This commit is contained in:
Patrick Nisble
2026-06-01 09:56:50 +02:00
parent 7c6c3d7223
commit 5c2016a05c
14 changed files with 1140 additions and 261 deletions
+54 -13
View File
@@ -1,3 +1,4 @@
from collections.abc import Iterator
from dataclasses import dataclass, field
from json import loads
from pydantic import BaseModel
@@ -6,9 +7,39 @@ from requests import HTTPError, get
from .common import EnvVar, JSONDataMap, JSONData, JSONDataList, JSONDataScalar
class ClickupStatus(BaseModel):
status: str
@property
def status_symbol(self) -> str:
match self.status:
case "backlog":
return "󰧟"
case "selected for development":
return "󱥸"
case "in progress":
return "󰝦"
case "in review":
return "󰬫"
case "done":
return "󰻃"
case "closed":
return "󰄴"
case "on hold":
return "󰏦"
case _:
return self.status
class ClickupTask(BaseModel):
id: str
name: str
markdown_description: str
status: ClickupStatus
class ClickupList(BaseModel):
task_count: int
@dataclass
@@ -44,20 +75,27 @@ class ClickupSession:
) as resp:
return resp.json()
def get_tasks(self, **filters: str) -> list[ClickupTask]:
data = self._get(
f"/team/{self.workspace_id}/task",
**{
"subtasks": "true",
"include_markdown_description": "true",
"assignees[]": self.user_id,
}
| filters,
).get("tasks", [])
if isinstance(data, list):
return [ClickupTask.model_validate(t) for t in data if isinstance(t, dict)]
def get_tasks(self, **filters: str) -> Iterator[ClickupTask]:
pix = 0
while True:
partial_data = self._get(
f"/team/{self.workspace_id}/task",
**{
"subtasks": "true",
"include_markdown_description": "true",
"include_closed": "true",
"assignees[]": self.user_id,
"page": pix,
}
| filters,
).get("tasks", [])
pix += 1
return []
for inst in partial_data:
yield ClickupTask.model_validate(inst)
if len(partial_data) < 100:
break
def get_task(self, task_id: str) -> ClickupTask:
return ClickupTask.model_validate(
@@ -66,3 +104,6 @@ class ClickupSession:
include_markdown_description="true",
),
)
def get_list(self, list_id: str) -> ClickupList:
return ClickupList.model_validate(self._get(f"/list/{list_id}"))