Task 1.1: Fix PEP 8 compliance in Serie class

- Fixed line length issues (max 79 chars)
- Added UTF-8 encoding to file operations
- Fixed blank line formatting
- Improved code formatting in __str__, to_dict, from_dict methods
- All docstrings now comply with PEP 8
- All 16 Serie class tests pass
- All 5 anime model tests pass
- No functional changes, only style improvements
This commit is contained in:
Lukas 2025-11-23 19:38:26 +01:00
parent aeb1ebe7a2
commit c4ec6c9f0e

View File

@ -5,21 +5,33 @@ class Serie:
""" """
Represents an anime series with metadata and episode information. Represents an anime series with metadata and episode information.
The `key` property is the unique identifier for the series (provider-assigned, URL-safe). The `key` property is the unique identifier for the series
The `folder` property is the filesystem folder name (metadata only, not used for lookups). (provider-assigned, URL-safe).
The `folder` property is the filesystem folder name
(metadata only, not used for lookups).
Args: 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 name: Display name of the series
site: Provider site URL site: Provider site URL
folder: Filesystem folder name (metadata only, e.g., "Attack on Titan (2013)") folder: Filesystem folder name (metadata only,
episodeDict: Dictionary mapping season numbers to lists of episode numbers e.g., "Attack on Titan (2013)")
episodeDict: Dictionary mapping season numbers to
lists of episode numbers
Raises: Raises:
ValueError: If key is None or empty string 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(): if not key or not key.strip():
raise ValueError("Serie key cannot be None or empty") raise ValueError("Serie key cannot be None or empty")
@ -31,15 +43,20 @@ class Serie:
def __str__(self): def __str__(self):
"""String representation of Serie object""" """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 @property
def key(self) -> str: def key(self) -> str:
""" """
Unique series identifier (primary identifier for all lookups). Unique series identifier (primary identifier for all lookups).
This is the provider-assigned, URL-safe identifier used throughout the application This is the provider-assigned, URL-safe identifier used
for series identification, lookups, and operations. throughout the application for series identification,
lookups, and operations.
Returns: Returns:
str: The unique series key str: The unique series key
@ -116,25 +133,34 @@ class Serie:
"name": self.name, "name": self.name,
"site": self.site, "site": self.site,
"folder": self.folder, "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 @staticmethod
def from_dict(data: dict): def from_dict(data: dict):
"""Create a Serie object from dictionary.""" """Create a Serie object from dictionary."""
episode_dict = {int(k): v for k, v in data["episodeDict"].items()} # Convert keys to int # Convert keys to int
return Serie(data["key"], data["name"], data["site"], data["folder"], episode_dict) 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): def save_to_file(self, filename: str):
"""Save Serie object to JSON file.""" """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) json.dump(self.to_dict(), file, indent=4)
@classmethod @classmethod
def load_from_file(cls, filename: str) -> "Serie": def load_from_file(cls, filename: str) -> "Serie":
"""Load Serie object from JSON file.""" """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) data = json.load(file)
return cls.from_dict(data) return cls.from_dict(data)