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}"