Add homeassistant
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import urllib.parse
|
||||
from dataclasses import asdict, dataclass
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from datetime import datetime
|
||||
|
||||
import requests
|
||||
|
||||
@@ -6,10 +13,20 @@ from src.config import Config
|
||||
|
||||
|
||||
class TickTick:
|
||||
@dataclass
|
||||
class Task:
|
||||
projectId: str # noqa: N815
|
||||
title: str
|
||||
dueDate: str | None = None # noqa: N815
|
||||
content: str | None = None
|
||||
desc: str | None = None
|
||||
|
||||
def __init__(self) -> None:
|
||||
print("Initializing TickTick...")
|
||||
if Config.get_env("TICKTICK_ACCESS_TOKEN") is None:
|
||||
self._begin_auth()
|
||||
else:
|
||||
self._access_token = Config.get_env("TICKTICK_ACCESS_TOKEN")
|
||||
|
||||
def _begin_auth(self) -> None:
|
||||
ticktick_code_auth_url = "https://ticktick.com/oauth/authorize?"
|
||||
@@ -37,5 +54,26 @@ class TickTick:
|
||||
client_id = Config.get_env("TICKTICK_CLIENT_ID")
|
||||
client_secret = Config.get_env("TICKTICK_CLIENT_SECRET")
|
||||
response = requests.post(ticktick_token_url, data=ticktick_token_auth_params, auth=(client_id, client_secret), timeout=10)
|
||||
print(response)
|
||||
Config.update_env("TICKTICK_ACCESS_TOKEN", response.json().get("access_token"))
|
||||
return True
|
||||
|
||||
def get_tasks(self, project_id: str) -> list[dict]:
|
||||
ticktick_get_tasks_url = "https://api.ticktick.com/open/v1/project/" + project_id + "/data"
|
||||
header: dict[str, str] = {"Authorization": f"Bearer {self._access_token}"}
|
||||
response = requests.get(ticktick_get_tasks_url, headers=header, timeout=10)
|
||||
return response.json()["tasks"]
|
||||
|
||||
def has_duplicate_task(self, project_id: str, task_title: str) -> bool:
|
||||
tasks = self.get_tasks(project_id=project_id)
|
||||
return any(task["title"] == task_title for task in tasks)
|
||||
|
||||
def create_task(self, task: TickTick.Task) -> dict[str, str]:
|
||||
if not self.has_duplicate_task(project_id=task.projectId, task_title=task.title):
|
||||
ticktick_task_creation_url = "https://api.ticktick.com/open/v1/task"
|
||||
header: dict[str, str] = {"Authorization": f"Bearer {self._access_token}"}
|
||||
requests.post(ticktick_task_creation_url, headers=header, json=asdict(task), timeout=10)
|
||||
return {"title": task.title}
|
||||
|
||||
def datetime_to_ticktick_format(self, datetime: datetime) -> str:
|
||||
return datetime.strftime("%Y-%m-%dT%H:%M:%S") + "+0000"
|
||||
|
||||
Reference in New Issue
Block a user