Files
WATFAG/src/watfag/parsers/tvboxset/__init__.py

50 lines
1.9 KiB
Python

import importlib
from pathlib import Path
from pkgutil import iter_modules
from typing import Optional
from xml.etree.ElementTree import Element
from watfag.parsers.generic import Release, ParserManager
from watfag.trackers import TrackerInfo
class TVBoxSetRelease(Release):
"""Holds info representing a release of a TV box set."""
def __init__(
self,
xml_result: Element,
tracker_info: Optional[TrackerInfo] = None
):
super().__init__(xml_result, tracker_info)
self.seasons: Optional[str] = None
def __str__(self):
parts = [f"{self.title} (Seasons: {self.seasons})"]
for attr in ['quality', 'video_codec', 'audio_codec', 'audio_layout', 'dynamic_range', 'repack', 'multi', 'source']:
value = getattr(self, attr)
parts.append(f"{attr.capitalize()}: {value if value else 'Unknown'}")
if self.streaming:
parts.append(f"Streaming: {self.streaming}")
parts.append(f"Group: {self.group_name if self.group else 'Unknown'}")
if not self.fully_consumed():
parts.append(f"Unparsed: {self.metadata_text}")
parts.append(f"WATFAG: {self.watfag:.2f}")
return " | ".join(parts)
class TVBoxSetParser:
"""
This class can be inherited by any parser that is specific to TV box sets.
It allows dynamic importing of parser classes and provides a method to run all parsers on a given TV box set release.
"""
class TVBoxSetParserManager(ParserManager):
"""Parses TV box set releases."""
def collect_parsers(self):
"""Dynamically imports all TV box set parsers."""
super().collect_parsers()
package_dir = Path(__file__).parent
for _, module_name, _ in iter_modules([package_dir]):
importlib.import_module(f"{__package__}.{module_name}")
self.parsers.extend(TVBoxSetParser.__subclasses__())