id: str# Subtask identifier title: str# Subtask title status: SubtaskStatus # The completion status of subtask completed_time: Optional[datetime] = None# Subtask completed time in "yyyy-MM-dd'T'HH:mm:ssZ" is_all_day: bool = False# All day sort_order: int = 0# Subtask sort order start_date: Optional[datetime] = None# Subtask start date time in "yyyy-MM-dd'T'HH:mm:ssZ" time_zone: Optional[str] = None# Subtask timezone
classTask(BaseModel): """Model representing a task.""" id: str# Task identifier title: str# Task title project_id: str = ''# Task project id is_all_day: bool = False# All day completed_time: Optional[datetime] = None# Task completed time in "yyyy-MM-dd'T'HH:mm:ssZ" content: Optional[str] = None# Task content desc: Optional[str] = None# Task description of checklist due_date: Optional[datetime] = None# Task due date time in "yyyy-MM-dd'T'HH:mm:ssZ" items: Optional[list[ChecklistItem]] = None# Subtasks of Task priority: TaskPriority = TaskPriority.NONE # Task priority (0, 1, 3, 5) reminders: Optional[list[str]] = None# List of reminder triggers repeat_flag: Optional[str] = None# Recurring rules of task sort_order: int = 0# Task sort order start_date: Optional[datetime] = None# Start date time in "yyyy-MM-dd'T'HH:mm:ssZ" status: TaskStatus = TaskStatus.NORMAL # Task completion status (0, 2) time_zone: Optional[str] = None# Task timezone
classProject(BaseModel): """Model representing a project.""" id: str# Project identifier name: str# Project name color: str = ''# Project color sort_order: int = 0# Order value (int64) closed: bool = False# Project closed status group_id: Optional[str] = None# Project group identifier view_mode: ViewMode = ViewMode.LIST # View mode ("list", "kanban", "timeline") permission: Permission = Permission.READ # Permission level ("read", "write", "comment") kind: ProjectKind = ProjectKind.TASK # Project type ("TASK" or "NOTE")
classColumn(BaseModel): """Model representing a column in a project.""" id: str# Column identifier project_id: str# Project identifier name: str# Column name sort_order: int# Order value (int64)
# Main ProjectData Model classProjectData(BaseModel): project: Project tasks: list[Task] = [] # columns: list[Column] = [] # useless and buggy
classDidaTemplate: """ Abstraction of the open API of dida365.com.
if __name__ == '__main__': template = DidaTemplate() for proj in template.list_project(): proj_detail = template.get_project(proj.id) for task in proj_detail.tasks: print(task.title)