models.py

2.3 kB · python · 101 lines

1from dataclasses import asdict, dataclass, field23@dataclass4class Placement:56    name: str = None7    display: str = None8    width: float = None9    height: float = None10    dpi: int = None11    is_ignored: bool = None1213    def to_dict(self):14        return asdict(self)1516    @classmethod17    def from_dict(cls, data: dict):18        return cls(**data)1920    @property21    def dims(self):22        return (self.width, self.height)2324    @property25    def desc(self):26        return f"{self.name} - {self.display}"2728    @property29    def id(self):30        w = f"{round(self.width * 100):04d}"31        h = f"{round(self.height * 100):04d}"32        d = f"{round(self.dpi):04d}"33        return f"{w}-{h}-{d}"3435@dataclass36class Variant:3738    id: int = None39    size: str = None40    color: str = None41    cost: str = None42    is_ignored: bool = None4344    def to_dict(self):45        return asdict(self)4647    @classmethod48    def from_dict(cls, data: dict):49        return cls(**data)5051    @property52    def desc(self):53        return f"{self.id} - {self.size} - {self.color}"5455@dataclass56class Mockup:5758    id: int = None59    category: str = None60    title: str = None61    variant_ids: list[int] = field(default_factory=list)62    is_ignored: bool = None6364    def to_dict(self):65        return asdict(self)6667    @classmethod68    def from_dict(cls, data: dict):69        return cls(**data)7071    @property72    def alt(self):73        return f"{self.id} - {self.category} - {self.title}"7475@dataclass76class Product:7778    id: int = None79    category: str = None80    title: str = None81    technique: str = None82    primaries: list[str] = field(default_factory=list)83    stitch_colors: list[str] = field(default_factory=list)84    placements: list[Placement] = field(default_factory=list)85    variants: list[Variant] = field(default_factory=list)86    mockups: list[Mockup] = field(default_factory=list)8788    def to_dict(self):89        return asdict(self)9091    @classmethod92    def from_dict(cls, data: dict):93        data = data.copy()94        data["placements"] = [Placement.from_dict(p) for p in data["placements"]]95        data["variants"] = [Variant.from_dict(v) for v in data["variants"]]96        data["mockups"] = [Mockup.from_dict(m) for m in data["mockups"]]97        return cls(**data)9899    @property100    def desc(self):101        return f"{self.id} - {self.title}"