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:
parent
aeb1ebe7a2
commit
c4ec6c9f0e
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user