import requests import dataclasses import datetime from typing import Any import functools from collections.abc import Iterator from logging import getLogger @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']), )