Initial commit
This commit is contained in:
57
src/watfag/parsers/tvboxset/__init__.py
Normal file
57
src/watfag/parsers/tvboxset/__init__.py
Normal file
@@ -0,0 +1,57 @@
|
||||
import importlib
|
||||
from pathlib import Path
|
||||
from pkgutil import iter_modules
|
||||
from typing import Optional
|
||||
|
||||
from parsers.generic import Release, ParserManager
|
||||
from parsers.generic.watfag import *
|
||||
|
||||
|
||||
class TVBoxSetRelease(Release):
|
||||
"""Holds info representing a release of a TV box set."""
|
||||
def __init__(self, unparsed_text, dl_link, **kwargs):
|
||||
super().__init__(unparsed_text, dl_link, **kwargs)
|
||||
self.show_title: str = ""
|
||||
self.seasons: Optional[str] = None
|
||||
self.group: Optional[Group] = None
|
||||
self.group_name: Optional[str] = None
|
||||
self.quality: Optional[Resolution] = None
|
||||
self.source: Optional[Source] = None
|
||||
self.streaming: Optional[StreamingService] = None
|
||||
self.video_codec: Optional[VideoCodec] = None
|
||||
self.audio_codec: Optional[AudioCodec] = None
|
||||
self.audio_layout: Optional[AudioLayout] = None
|
||||
self.dynamic_range: Optional[DynamicRange] = None
|
||||
self.repack: Optional[Repack] = None
|
||||
self.multi: Optional[Multi] = None
|
||||
|
||||
def __str__(self):
|
||||
parts = [f"{self.show_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__())
|
||||
Reference in New Issue
Block a user