update
This commit is contained in:
+54
-13
@@ -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}"))
|
||||
|
||||
Reference in New Issue
Block a user