82 lines
2.0 KiB
Python
82 lines
2.0 KiB
Python
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']),
|
|
)
|