diff --git a/src/core/entities/series.py b/src/core/entities/series.py index 2a45524..410c84c 100644 --- a/src/core/entities/series.py +++ b/src/core/entities/series.py @@ -5,21 +5,33 @@ class Serie: """ Represents an anime series with metadata and episode information. - The `key` property is the unique identifier for the series (provider-assigned, URL-safe). - The `folder` property is the filesystem folder name (metadata only, not used for lookups). + The `key` property is the unique identifier for the series + (provider-assigned, URL-safe). + The `folder` property is the filesystem folder name + (metadata only, not used for lookups). Args: - key: Unique series identifier from provider (e.g., "attack-on-titan"). Cannot be empty. + key: Unique series identifier from provider + (e.g., "attack-on-titan"). Cannot be empty. name: Display name of the series site: Provider site URL - folder: Filesystem folder name (metadata only, e.g., "Attack on Titan (2013)") - episodeDict: Dictionary mapping season numbers to lists of episode numbers + folder: Filesystem folder name (metadata only, + e.g., "Attack on Titan (2013)") + episodeDict: Dictionary mapping season numbers to + lists of episode numbers Raises: ValueError: If key is None or empty string """ - def __init__(self, key: str, name: str, site: str, folder: str, episodeDict: dict[int, list[int]]): + def __init__( + self, + key: str, + name: str, + site: str, + folder: str, + episodeDict: dict[int, list[int]] + ): if not key or not key.strip(): raise ValueError("Serie key cannot be None or empty") @@ -31,15 +43,20 @@ class Serie: def __str__(self): """String representation of Serie object""" - return f"Serie(key='{self.key}', name='{self.name}', site='{self.site}', folder='{self.folder}', episodeDict={self.episodeDict})" + return ( + f"Serie(key='{self.key}', name='{self.name}', " + f"site='{self.site}', folder='{self.folder}', " + f"episodeDict={self.episodeDict})" + ) @property def key(self) -> str: """ Unique series identifier (primary identifier for all lookups). - This is the provider-assigned, URL-safe identifier used throughout the application - for series identification, lookups, and operations. + This is the provider-assigned, URL-safe identifier used + throughout the application for series identification, + lookups, and operations. Returns: str: The unique series key @@ -116,25 +133,34 @@ class Serie: "name": self.name, "site": self.site, "folder": self.folder, - "episodeDict": {str(k): list(v) for k, v in self.episodeDict.items()} + "episodeDict": { + str(k): list(v) for k, v in self.episodeDict.items() + } } @staticmethod def from_dict(data: dict): """Create a Serie object from dictionary.""" - episode_dict = {int(k): v for k, v in data["episodeDict"].items()} # Convert keys to int - return Serie(data["key"], data["name"], data["site"], data["folder"], episode_dict) - + # Convert keys to int + episode_dict = { + int(k): v for k, v in data["episodeDict"].items() + } + return Serie( + data["key"], + data["name"], + data["site"], + data["folder"], + episode_dict + ) def save_to_file(self, filename: str): """Save Serie object to JSON file.""" - with open(filename, "w") as file: + with open(filename, "w", encoding="utf-8") as file: json.dump(self.to_dict(), file, indent=4) - @classmethod def load_from_file(cls, filename: str) -> "Serie": """Load Serie object from JSON file.""" - with open(filename, "r") as file: + with open(filename, "r", encoding="utf-8") as file: data = json.load(file) - return cls.from_dict(data) \ No newline at end of file + return cls.from_dict(data)