Source code for flexget.components.parsing.parsers.parser_internal

import time

from loguru import logger

from flexget import plugin
from flexget.event import event
from flexget.utils.log import log_once
from flexget.utils.parsers.generic import ParseWarning
from flexget.utils.parsers.movie import MovieParser
from flexget.utils.parsers.series import SeriesParser

from .parser_common import MovieParseResult, SeriesParseResult

logger = logger.bind(name='parser_internal')


try:
    preferred_clock = time.process_time
except AttributeError:
    preferred_clock = time.clock


[docs] class ParserInternal: # movie_parser API
[docs] @plugin.priority(1) def parse_movie(self, data, **kwargs): logger.debug('Parsing movie: `{}` kwargs: {}', data, kwargs) start = preferred_clock() parser = MovieParser() try: parser.parse(data) except ParseWarning as pw: log_once(pw.value, logger=logger) result = MovieParseResult( data=data, name=parser.name, year=parser.year, quality=parser.quality, proper_count=parser.proper_count, valid=bool(parser.name), ) logger.debug('Parsing result: {} (in {} ms)', parser, (preferred_clock() - start) * 1000) return result
# series_parser API
[docs] @plugin.priority(1) def parse_series(self, data, **kwargs): logger.debug('Parsing series: `{}` kwargs: {}', data, kwargs) start = preferred_clock() parser = SeriesParser(**kwargs) try: parser.parse(data) except ParseWarning as pw: log_once(pw.value, logger=logger) # TODO: Returning this invalid object seems a bit silly, raise an exception is probably better if not parser.valid: return SeriesParseResult(valid=False) result = SeriesParseResult( data=data, name=parser.name, episodes=parser.episodes, id=parser.id, id_type=parser.id_type, quality=parser.quality, proper_count=parser.proper_count, special=parser.special, group=parser.group, season_pack=parser.season_pack, strict_name=parser.strict_name, identified_by=parser.identified_by, ) logger.debug('Parsing result: {} (in {} ms)', parser, (preferred_clock() - start) * 1000) return result
[docs] @event('plugin.register') def register_plugin(): plugin.register( ParserInternal, 'parser_internal', interfaces=['movie_parser', 'series_parser'], api_ver=2 )