mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 17:57:11 +00:00
Fix the todoist integration (#27273)
* Fixed the todoist integration. * Removing unused import * Flake8 fixes. * Added username to codeowners. * Updated global codeowners
This commit is contained in:
parent
8de942f00f
commit
c416541814
@ -288,6 +288,7 @@ homeassistant/components/threshold/* @fabaff
|
||||
homeassistant/components/tibber/* @danielhiversen
|
||||
homeassistant/components/tile/* @bachya
|
||||
homeassistant/components/time_date/* @fabaff
|
||||
homeassistant/components/todoist/* @boralyl
|
||||
homeassistant/components/toon/* @frenck
|
||||
homeassistant/components/tplink/* @rytilahti
|
||||
homeassistant/components/traccar/* @ludeeus
|
||||
|
@ -36,6 +36,7 @@ CONTENT = "content"
|
||||
DESCRIPTION = "description"
|
||||
# Calendar Platform: Used in the '_get_date()' method
|
||||
DATETIME = "dateTime"
|
||||
DUE = "due"
|
||||
# Service Call: When is this task due (in natural language)?
|
||||
DUE_DATE_STRING = "due_date_string"
|
||||
# Service Call: The language of DUE_DATE_STRING
|
||||
@ -206,7 +207,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
project_id = project_id_lookup[project_name]
|
||||
|
||||
# Create the task
|
||||
item = api.items.add(call.data[CONTENT], project_id)
|
||||
item = api.items.add(call.data[CONTENT], project_id=project_id)
|
||||
|
||||
if LABELS in call.data:
|
||||
task_labels = call.data[LABELS]
|
||||
@ -216,11 +217,12 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
if PRIORITY in call.data:
|
||||
item.update(priority=call.data[PRIORITY])
|
||||
|
||||
_due: dict = {}
|
||||
if DUE_DATE_STRING in call.data:
|
||||
item.update(date_string=call.data[DUE_DATE_STRING])
|
||||
_due["string"] = call.data[DUE_DATE_STRING]
|
||||
|
||||
if DUE_DATE_LANG in call.data:
|
||||
item.update(date_lang=call.data[DUE_DATE_LANG])
|
||||
_due["lang"] = call.data[DUE_DATE_LANG]
|
||||
|
||||
if DUE_DATE in call.data:
|
||||
due_date = dt.parse_datetime(call.data[DUE_DATE])
|
||||
@ -231,7 +233,11 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
due_date = dt.as_utc(due_date)
|
||||
date_format = "%Y-%m-%dT%H:%M"
|
||||
due_date = datetime.strftime(due_date, date_format)
|
||||
item.update(due_date_utc=due_date)
|
||||
_due["date"] = due_date
|
||||
|
||||
if _due:
|
||||
item.update(due=_due)
|
||||
|
||||
# Commit changes
|
||||
api.commit()
|
||||
_LOGGER.debug("Created Todoist task: %s", call.data[CONTENT])
|
||||
@ -241,6 +247,17 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||
)
|
||||
|
||||
|
||||
def _parse_due_date(data: dict) -> datetime:
|
||||
"""Parse the due date dict into a datetime object."""
|
||||
# Add time information to date only strings.
|
||||
if len(data["date"]) == 10:
|
||||
data["date"] += "T00:00:00"
|
||||
# If there is no timezone provided, use UTC.
|
||||
if data["timezone"] is None:
|
||||
data["date"] += "Z"
|
||||
return dt.parse_datetime(data["date"])
|
||||
|
||||
|
||||
class TodoistProjectDevice(CalendarEventDevice):
|
||||
"""A device for getting the next Task from a Todoist Project."""
|
||||
|
||||
@ -412,16 +429,8 @@ class TodoistProjectData:
|
||||
# complete the task.
|
||||
# Generally speaking, that means right now.
|
||||
task[START] = dt.utcnow()
|
||||
if data[DUE_DATE_UTC] is not None:
|
||||
due_date = data[DUE_DATE_UTC]
|
||||
|
||||
# Due dates are represented in RFC3339 format, in UTC.
|
||||
# Home Assistant exclusively uses UTC, so it'll
|
||||
# handle the conversion.
|
||||
time_format = "%a %d %b %Y %H:%M:%S %z"
|
||||
# HASS' built-in parse time function doesn't like
|
||||
# Todoist's time format; strptime has to be used.
|
||||
task[END] = datetime.strptime(due_date, time_format)
|
||||
if data[DUE] is not None:
|
||||
task[END] = _parse_due_date(data[DUE])
|
||||
|
||||
if self._latest_due_date is not None and (
|
||||
task[END] > self._latest_due_date
|
||||
@ -540,9 +549,8 @@ class TodoistProjectData:
|
||||
project_task_data = project_data[TASKS]
|
||||
|
||||
events = []
|
||||
time_format = "%a %d %b %Y %H:%M:%S %z"
|
||||
for task in project_task_data:
|
||||
due_date = datetime.strptime(task["due_date_utc"], time_format)
|
||||
due_date = _parse_due_date(task["due"])
|
||||
if start_date < due_date < end_date:
|
||||
event = {
|
||||
"uid": task["id"],
|
||||
|
@ -3,8 +3,8 @@
|
||||
"name": "Todoist",
|
||||
"documentation": "https://www.home-assistant.io/integrations/todoist",
|
||||
"requirements": [
|
||||
"todoist-python==7.0.17"
|
||||
"todoist-python==8.0.0"
|
||||
],
|
||||
"dependencies": [],
|
||||
"codeowners": []
|
||||
"codeowners": ["@boralyl"]
|
||||
}
|
||||
|
@ -0,0 +1,25 @@
|
||||
new_task:
|
||||
description: Create a new task and add it to a project.
|
||||
fields:
|
||||
content:
|
||||
description: The name of the task.
|
||||
example: Pick up the mail.
|
||||
project:
|
||||
description: The name of the project this task should belong to. Defaults to Inbox.
|
||||
example: Errands
|
||||
labels:
|
||||
description: Any labels that you want to apply to this task, separated by a comma.
|
||||
example: Chores,Delivieries
|
||||
priority:
|
||||
description: The priority of this task, from 1 (normal) to 4 (urgent).
|
||||
example: 2
|
||||
due_date_string:
|
||||
description: The day this task is due, in natural language.
|
||||
example: Tomorrow
|
||||
due_date_lang:
|
||||
description: The language of due_date_string.
|
||||
example: en
|
||||
due_date:
|
||||
description: The day this task is due, in format YYYY-MM-DD.
|
||||
example: 2019-10-22
|
||||
|
@ -1888,7 +1888,7 @@ thingspeak==0.4.1
|
||||
tikteck==0.4
|
||||
|
||||
# homeassistant.components.todoist
|
||||
todoist-python==7.0.17
|
||||
todoist-python==8.0.0
|
||||
|
||||
# homeassistant.components.toon
|
||||
toonapilib==3.2.4
|
||||
|
Loading…
x
Reference in New Issue
Block a user