You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.1 KiB
84 lines
2.1 KiB
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
type property
|
|
"""
|
|
from rebulk import CustomRule, Rebulk, POST_PROCESS
|
|
from rebulk.match import Match
|
|
|
|
from ..common.pattern import is_disabled
|
|
from ...rules.processors import Processors
|
|
|
|
|
|
def _type(matches, value):
|
|
"""
|
|
Define type match with given value.
|
|
:param matches:
|
|
:param value:
|
|
:return:
|
|
"""
|
|
matches.append(Match(len(matches.input_string), len(matches.input_string), name='type', value=value))
|
|
|
|
|
|
def type_(config): # pylint:disable=unused-argument
|
|
"""
|
|
Builder for rebulk object.
|
|
|
|
:param config: rule configuration
|
|
:type config: dict
|
|
:return: Created Rebulk object
|
|
:rtype: Rebulk
|
|
"""
|
|
rebulk = Rebulk(disabled=lambda context: is_disabled(context, 'type'))
|
|
rebulk = rebulk.rules(TypeProcessor)
|
|
|
|
return rebulk
|
|
|
|
|
|
class TypeProcessor(CustomRule):
|
|
"""
|
|
Post processor to find file type based on all others found matches.
|
|
"""
|
|
priority = POST_PROCESS
|
|
|
|
dependency = Processors
|
|
|
|
properties = {'type': ['episode', 'movie']}
|
|
|
|
def when(self, matches, context): # pylint:disable=too-many-return-statements
|
|
option_type = context.get('type', None)
|
|
if option_type:
|
|
return option_type
|
|
|
|
episode = matches.named('episode')
|
|
season = matches.named('season')
|
|
absolute_episode = matches.named('absolute_episode')
|
|
episode_details = matches.named('episode_details')
|
|
|
|
if episode or season or episode_details or absolute_episode:
|
|
return 'episode'
|
|
|
|
film = matches.named('film')
|
|
if film:
|
|
return 'movie'
|
|
|
|
year = matches.named('year')
|
|
date = matches.named('date')
|
|
|
|
if date and not year:
|
|
return 'episode'
|
|
|
|
bonus = matches.named('bonus')
|
|
if bonus and not year:
|
|
return 'episode'
|
|
|
|
crc32 = matches.named('crc32')
|
|
anime_release_group = matches.named('release_group', lambda match: 'anime' in match.tags)
|
|
if crc32 and anime_release_group:
|
|
return 'episode'
|
|
|
|
return 'movie'
|
|
|
|
def then(self, matches, when_response, context):
|
|
_type(matches, when_response)
|