mirror of
https://github.com/Benexl/FastAnime.git
synced 2026-01-08 11:21:04 -08:00
chore: format with ruff
This commit is contained in:
@@ -4,12 +4,11 @@ from typing import Iterator
|
||||
|
||||
|
||||
def parse_episode_range(
|
||||
episode_range_str: str | None,
|
||||
available_episodes: list[str]
|
||||
episode_range_str: str | None, available_episodes: list[str]
|
||||
) -> Iterator[str]:
|
||||
"""
|
||||
Parse an episode range string and return an iterator of episode numbers.
|
||||
|
||||
|
||||
This function handles various episode range formats:
|
||||
- Single episode: "5" -> episodes from index 5 onwards
|
||||
- Range with start and end: "5:10" -> episodes from index 5 to 10 (exclusive)
|
||||
@@ -17,18 +16,18 @@ def parse_episode_range(
|
||||
- Start only: "5:" -> episodes from index 5 onwards
|
||||
- End only: ":10" -> episodes from beginning to index 10
|
||||
- All episodes: ":" -> all episodes
|
||||
|
||||
|
||||
Args:
|
||||
episode_range_str: The episode range string to parse (e.g., "5:10", "5:", ":10", "5")
|
||||
available_episodes: List of available episode numbers/identifiers
|
||||
|
||||
|
||||
Returns:
|
||||
Iterator over the selected episode numbers
|
||||
|
||||
|
||||
Raises:
|
||||
ValueError: If the episode range format is invalid
|
||||
IndexError: If the specified indices are out of range
|
||||
|
||||
|
||||
Examples:
|
||||
>>> episodes = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
|
||||
>>> list(parse_episode_range("2:5", episodes))
|
||||
@@ -43,14 +42,14 @@ def parse_episode_range(
|
||||
if not episode_range_str:
|
||||
# No range specified, return all episodes
|
||||
return iter(available_episodes)
|
||||
|
||||
|
||||
# Sort episodes numerically for consistent ordering
|
||||
episodes = sorted(available_episodes, key=float)
|
||||
|
||||
|
||||
if ":" in episode_range_str:
|
||||
# Handle colon-separated ranges
|
||||
parts = episode_range_str.split(":")
|
||||
|
||||
|
||||
if len(parts) == 3:
|
||||
# Format: start:end:step
|
||||
start_str, end_str, step_str = parts
|
||||
@@ -59,15 +58,15 @@ def parse_episode_range(
|
||||
f"Invalid episode range format: '{episode_range_str}'. "
|
||||
"When using 3 parts (start:end:step), all parts must be non-empty."
|
||||
)
|
||||
|
||||
|
||||
try:
|
||||
start_idx = int(start_str)
|
||||
end_idx = int(end_str)
|
||||
step = int(step_str)
|
||||
|
||||
|
||||
if step <= 0:
|
||||
raise ValueError("Step value must be positive")
|
||||
|
||||
|
||||
return iter(episodes[start_idx:end_idx:step])
|
||||
except ValueError as e:
|
||||
if "invalid literal" in str(e):
|
||||
@@ -76,11 +75,11 @@ def parse_episode_range(
|
||||
"All parts must be valid integers."
|
||||
) from e
|
||||
raise
|
||||
|
||||
|
||||
elif len(parts) == 2:
|
||||
# Format: start:end or start: or :end
|
||||
start_str, end_str = parts
|
||||
|
||||
|
||||
if start_str and end_str:
|
||||
# Both start and end specified: start:end
|
||||
try:
|
||||
@@ -92,7 +91,7 @@ def parse_episode_range(
|
||||
f"Invalid episode range format: '{episode_range_str}'. "
|
||||
"Start and end must be valid integers."
|
||||
) from e
|
||||
|
||||
|
||||
elif start_str and not end_str:
|
||||
# Only start specified: start:
|
||||
try:
|
||||
@@ -103,7 +102,7 @@ def parse_episode_range(
|
||||
f"Invalid episode range format: '{episode_range_str}'. "
|
||||
"Start must be a valid integer."
|
||||
) from e
|
||||
|
||||
|
||||
elif not start_str and end_str:
|
||||
# Only end specified: :end
|
||||
try:
|
||||
@@ -114,7 +113,7 @@ def parse_episode_range(
|
||||
f"Invalid episode range format: '{episode_range_str}'. "
|
||||
"End must be a valid integer."
|
||||
) from e
|
||||
|
||||
|
||||
else:
|
||||
# Both empty: ":"
|
||||
return iter(episodes)
|
||||
|
||||
Reference in New Issue
Block a user