import dataclasses import datetime from typing import Any @dataclasses.dataclass(frozen=True) class SeqId: raw_id: int @dataclasses.dataclass(frozen=True) class CardId: raw_id: str @dataclasses.dataclass(frozen=True) class CommonId: raw_id: str @dataclasses.dataclass(frozen=True) class UserId: raw_id: str @dataclasses.dataclass(frozen=True) class OrganizationId: raw_id: str @dataclasses.dataclass(frozen=True) class Card: card_id: CardId seq_id: SeqId common_id: CommonId organization_id: OrganizationId is_archived: bool name: str dependencies: list[None] # TODO tags: list[None] # TODO todo_list_user_id: UserId | None todo_list_completed: bool | None creator_user_id: UserId creation_date: datetime.datetime detailed_description: str | None """ TODO, fieds: 'position': -399 'listPosition': -399 'isLane': False 'assignments': [{'userId': 'Faieomp8fuS8DrnyP' 'completed': True}] 'tasksTotal': 0 'tasksDone': 0 'attachments': [] 'customFields': 'timeOnBoard': None 'timeOnColumns': None 'favroAttachments': [] """ @staticmethod def from_json(json: dict[str, Any]) -> 'Card': return Card( card_id=CardId(json['cardId']), seq_id=SeqId(json['sequentialId']), common_id=CommonId(json['cardCommonId']), detailed_description=json.get('detailedDescription'), is_archived=json['archived'], organization_id=OrganizationId(json['organizationId']), name=json['name'], todo_list_user_id=UserId(json['todoListUserId']) if 'todoListUserId' in json else None, todo_list_completed=json.get('todoListCompleted'), dependencies=json['dependencies'], tags=json['tags'], creator_user_id=UserId(json['createdByUserId']), creation_date=datetime.datetime.fromisoformat(json['createdAt']), )