from dataclasses import dataclass, field from typing import List, Optional from pathlib import Path @dataclass class Metadata: title: str = None description: Optional[str] = None year: Optional[int] = None developer: Optional[str] = None publisher: Optional[str] = None genre: Optional[List[str]] = field(default_factory=list) players: Optional[int] = None cover_image: Optional[str] = None # Remote URL screenshot: Optional[str] = None # Remote URL cover_image_path: Optional[Path] = None # Local file path screenshot_path: Optional[Path] = None # Local file path tags: Optional[List[str]] = field(default_factory=list) @dataclass class Game: title: str path: Path metadata: Metadata|None = None @dataclass class Roms: list: List[Game] = field(default_factory=list)