from datetime import timedelta from dataclasses import dataclass, field @dataclass class Entry: id: int text: str html: str | None = None @dataclass class Sequence: position: int entry: Entry duration: timedelta | None @dataclass class Order: id: int title: str sequence_entries: list[Sequence] @dataclass class PublicationProfile: id: int title: str description: str @dataclass class Publication: id: int title: str description: str by_line: str orders: list[Order] = field(default_factory=list) # Rather than using a subclass I think this makes sense def to_profile(self) -> PublicationProfile: return PublicationProfile(id=self.id, title=self.title, description=self.description)