81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
|
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']),
|
||
|
)
|
||
|
|
||
|
|