Example #1
0
def streaming_service(config):
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(
        disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(
        flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    for value, items in config.items():
        patterns = items if isinstance(items, list) else [items]
        for pattern in patterns:
            if pattern.startswith('re:'):
                rebulk.regex(pattern, value=value)
            else:
                rebulk.string(pattern, value=value)

    rebulk.rules(ValidateStreamingService)

    return rebulk
Example #2
0
def streaming_service(config):  # pylint: disable=too-many-statements,unused-argument
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(
        disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(
        flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    regex_prefix = 're:'

    for value, items in config.items():
        patterns = items if isinstance(items, list) else [items]
        for pattern in patterns:
            if isinstance(pattern, dict):
                kwargs = pattern
                pattern = pattern['pattern']
            else:
                kwargs = {}
            regex = kwargs.pop('regex', False)
            if regex or pattern.startswith(regex_prefix):
                rebulk.regex(pattern[len(regex_prefix):],
                             value=value,
                             **kwargs)
            else:
                rebulk.string(pattern, value=value, **kwargs)

    rebulk.rules(ValidateStreamingService)

    return rebulk
Example #3
0
def screen_size(config):
    """
    Builder for rebulk object.

    :param config: rule configuration
    :type config: dict
    :return: Created Rebulk object
    :rtype: Rebulk
    """
    interlaced = frozenset(config['interlaced'])
    progressive = frozenset(config['progressive'])
    frame_rates = frozenset(config['frame_rates'])
    min_ar = config['min_ar']
    max_ar = config['max_ar']

    rebulk = Rebulk()
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(
        flags=re.IGNORECASE)

    rebulk.defaults(
        name='screen_size',
        validator=seps_surround,
        abbreviations=[dash],
        disabled=lambda context: is_disabled(context, 'screen_size'))

    frame_rate_pattern = build_or_pattern(frame_rates, name='frame_rate')
    interlaced_pattern = build_or_pattern(interlaced, name='height')
    progressive_pattern = build_or_pattern(progressive, name='height')

    res_pattern = r'(?:(?P<width>\d{3,4})(?:x|\*))?'
    rebulk.regex(res_pattern + interlaced_pattern + r'(?P<scan_type>i)' +
                 frame_rate_pattern + '?')
    rebulk.regex(res_pattern + progressive_pattern + r'(?P<scan_type>p)' +
                 frame_rate_pattern + '?')
    rebulk.regex(res_pattern + progressive_pattern +
                 r'(?P<scan_type>p)?(?:hd)')
    rebulk.regex(res_pattern + progressive_pattern + r'(?P<scan_type>p)?x?')
    rebulk.string('4k',
                  value='2160p',
                  conflict_solver=lambda match, other: '__default__'
                  if other.name == 'screen_size' else match)
    rebulk.regex(r'(?P<width>\d{3,4})-?(?:x|\*)-?(?P<height>\d{3,4})',
                 conflict_solver=lambda match, other: '__default__'
                 if other.name == 'screen_size' else other)

    rebulk.regex(frame_rate_pattern + '-?(?:p|fps)',
                 name='frame_rate',
                 formatter=FrameRate.fromstring,
                 disabled=lambda context: is_disabled(context, 'frame_rate'))

    rebulk.rules(PostProcessScreenSize(progressive, min_ar, max_ar),
                 ScreenSizeOnlyOne, ResolveScreenSizeConflicts)

    return rebulk
Example #4
0
def streaming_service(config):  # pylint: disable=too-many-statements,unused-argument
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(
        disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(
        flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    load_config_patterns(rebulk, config)

    rebulk.rules(ValidateStreamingService)

    return rebulk
Example #5
0
def screen_size(config):
    """
    Builder for rebulk object.

    :param config: rule configuration
    :type config: dict
    :return: Created Rebulk object
    :rtype: Rebulk
    """
    interlaced = frozenset({res for res in config['interlaced']})
    progressive = frozenset({res for res in config['progressive']})
    frame_rates = [re.escape(rate) for rate in config['frame_rates']]
    min_ar = config['min_ar']
    max_ar = config['max_ar']

    rebulk = Rebulk()
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(flags=re.IGNORECASE)

    rebulk.defaults(name='screen_size', validator=seps_surround, abbreviations=[dash],
                    disabled=lambda context: is_disabled(context, 'screen_size'))

    frame_rate_pattern = build_or_pattern(frame_rates, name='frame_rate')
    interlaced_pattern = build_or_pattern(interlaced, name='height')
    progressive_pattern = build_or_pattern(progressive, name='height')

    res_pattern = r'(?:(?P<width>\d{3,4})(?:x|\*))?'
    rebulk.regex(res_pattern + interlaced_pattern + r'(?P<scan_type>i)' + frame_rate_pattern + '?')
    rebulk.regex(res_pattern + progressive_pattern + r'(?P<scan_type>p)' + frame_rate_pattern + '?')
    rebulk.regex(res_pattern + progressive_pattern + r'(?P<scan_type>p)?(?:hd)')
    rebulk.regex(res_pattern + progressive_pattern + r'(?P<scan_type>p)?x?')
    rebulk.string('4k', value='2160p')
    rebulk.regex(r'(?P<width>\d{3,4})-?(?:x|\*)-?(?P<height>\d{3,4})',
                 conflict_solver=lambda match, other: '__default__' if other.name == 'screen_size' else other)

    rebulk.regex(frame_rate_pattern + '(p|fps)', name='frame_rate',
                 formatter=FrameRate.fromstring, disabled=lambda context: is_disabled(context, 'frame_rate'))

    rebulk.rules(PostProcessScreenSize(progressive, min_ar, max_ar), ScreenSizeOnlyOne, ResolveScreenSizeConflicts)

    return rebulk
Example #6
0
def streaming_service(config):  # pylint: disable=too-many-statements,unused-argument
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    for value, items in config.items():
        patterns = items if isinstance(items, list) else [items]
        for pattern in patterns:
            if pattern.startswith('re:'):
                rebulk.regex(pattern, value=value)
            else:
                rebulk.string(pattern, value=value)

    rebulk.rules(ValidateStreamingService)

    return rebulk
Example #7
0
def streaming_service(config):  # pylint: disable=too-many-statements,unused-argument
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(
        disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(
        flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    rebulk.string('AE', 'A&E', value='A&E')
    rebulk.string('AMBC', value='ABC')
    rebulk.string('AUBC', value='ABC Australia')
    rebulk.string('AJAZ', value='Al Jazeera English')
    rebulk.string('AMC', value='AMC')
    rebulk.string('AMZN', 'Amazon', value='Amazon Prime')
    rebulk.regex('Amazon-?Prime', value='Amazon Prime')
    rebulk.string('AS', value='Adult Swim')
    rebulk.regex('Adult-?Swim', value='Adult Swim')
    rebulk.string('ATK', value="America's Test Kitchen")
    rebulk.string('ANPL', value='Animal Planet')
    rebulk.string('ANLB', value='AnimeLab')
    rebulk.string('AOL', value='AOL')
    rebulk.string('ARD', value='ARD')
    rebulk.string('iP', value='BBC iPlayer')
    rebulk.regex('BBC-?iPlayer', value='BBC iPlayer')
    rebulk.string('BRAV', value='BravoTV')
    rebulk.string('CNLP', value='Canal+')
    rebulk.string('CN', value='Cartoon Network')
    rebulk.string('CBC', value='CBC')
    rebulk.string('CBS', value='CBS')
    rebulk.string('CNBC', value='CNBC')
    rebulk.string('CC', value='Comedy Central')
    rebulk.string('4OD', value='Channel 4')
    rebulk.string('CHGD', value='CHRGD')
    rebulk.string('CMAX', value='Cinemax')
    rebulk.string('CMT', value='Country Music Television')
    rebulk.regex('Comedy-?Central', value='Comedy Central')
    rebulk.string('CCGC', value='Comedians in Cars Getting Coffee')
    rebulk.string('CR', value='Crunchy Roll')
    rebulk.string('CRKL', value='Crackle')
    rebulk.regex('Crunchy-?Roll', value='Crunchy Roll')
    rebulk.string('CSPN', value='CSpan')
    rebulk.string('CTV', value='CTV')
    rebulk.string('CUR', value='CuriosityStream')
    rebulk.string('CWS', value='CWSeed')
    rebulk.string('DSKI', value='Daisuki')
    rebulk.string('DHF', value='Deadhouse Films')
    rebulk.string('DDY', value='Digiturk Diledigin Yerde')
    rebulk.string('DISC', 'Discovery', value='Discovery')
    rebulk.string('DSNY', 'Disney', value='Disney')
    rebulk.string('DIY', value='DIY Network')
    rebulk.string('DOCC', value='Doc Club')
    rebulk.string('DPLY', value='DPlay')
    rebulk.string('ETV', value='E!')
    rebulk.string('EPIX', value='ePix')
    rebulk.string('ETTV', value='El Trece')
    rebulk.string('ESPN', value='ESPN')
    rebulk.string('ESQ', value='Esquire')
    rebulk.string('FAM', value='Family')
    rebulk.string('FJR', value='Family Jr')
    rebulk.string('FOOD', value='Food Network')
    rebulk.string('FOX', value='Fox')
    rebulk.string('FREE', value='Freeform')
    rebulk.string('FYI', value='FYI Network')
    rebulk.string('GLBL', value='Global')
    rebulk.string('GLOB', value='GloboSat Play')
    rebulk.string('HLMK', value='Hallmark')
    rebulk.string('HBO', value='HBO Go')
    rebulk.regex('HBO-?Go', value='HBO Go')
    rebulk.string('HGTV', value='HGTV')
    rebulk.string('HIST', 'History', value='History')
    rebulk.string('HULU', value='Hulu')
    rebulk.string('ID', value='Investigation Discovery')
    rebulk.string('IFC', value='IFC')
    rebulk.string('iTunes', 'iT', value='iTunes')
    rebulk.string('ITV', value='ITV')
    rebulk.string('KNOW', value='Knowledge Network')
    rebulk.string('LIFE', value='Lifetime')
    rebulk.string('MTOD', value='Motor Trend OnDemand')
    rebulk.string('MNBC', value='MSNBC')
    rebulk.string('MTV', value='MTV')
    rebulk.string('NATG', value='National Geographic')
    rebulk.regex('National-?Geographic', value='National Geographic')
    rebulk.string('NBA', value='NBA TV')
    rebulk.regex('NBA-?TV', value='NBA TV')
    rebulk.string('NBC', value='NBC')
    rebulk.string('NF', 'Netflix', value='Netflix')
    rebulk.string('NFL', value='NFL')
    rebulk.string('NFLN', value='NFL Now')
    rebulk.string('GC', value='NHL GameCenter')
    rebulk.string('NICK', 'Nickelodeon', value='Nickelodeon')
    rebulk.string('NRK', value='Norsk Rikskringkasting')
    rebulk.string('PBS', value='PBS')
    rebulk.string('PBSK', value='PBS Kids')
    rebulk.string('PSN', value='Playstation Network')
    rebulk.string('PLUZ', value='Pluzz')
    rebulk.string('RTE', value='RTE One')
    rebulk.string('SBS', value='SBS (AU)')
    rebulk.string('SESO', 'SeeSo', value='SeeSo')
    rebulk.string('SHMI', value='Shomi')
    rebulk.string('SPIK', value='Spike')
    rebulk.string('SPKE', value='Spike TV')
    rebulk.regex('Spike-?TV', value='Spike TV')
    rebulk.string('SNET', value='Sportsnet')
    rebulk.string('SPRT', value='Sprout')
    rebulk.string('STAN', value='Stan')
    rebulk.string('STZ', value='Starz')
    rebulk.string('SVT', value='Sveriges Television')
    rebulk.string('SWER', value='SwearNet')
    rebulk.string('SYFY', value='Syfy')
    rebulk.string('TBS', value='TBS')
    rebulk.string('TFOU', value='TFou')
    rebulk.string('CW', value='The CW')
    rebulk.regex('The-?CW', value='The CW')
    rebulk.string('TLC', value='TLC')
    rebulk.string('TUBI', value='TubiTV')
    rebulk.string('TV3', value='TV3 Ireland')
    rebulk.string('TV4', value='TV4 Sweeden')
    rebulk.string('TVL', value='TV Land')
    rebulk.regex('TV-?Land', value='TV Land')
    rebulk.string('UFC', value='UFC')
    rebulk.string('UKTV', value='UKTV')
    rebulk.string('UNIV', value='Univision')
    rebulk.string('USAN', value='USA Network')
    rebulk.string('VLCT', value='Velocity')
    rebulk.string('VH1', value='VH1')
    rebulk.string('VICE', value='Viceland')
    rebulk.string('VMEO', value='Vimeo')
    rebulk.string('VRV', value='VRV')
    rebulk.string('WNET', value='W Network')
    rebulk.string('WME', value='WatchMe')
    rebulk.string('WWEN', value='WWE Network')
    rebulk.string('XBOX', value='Xbox Video')
    rebulk.string('YHOO', value='Yahoo')
    rebulk.string('RED', value='YouTube Red')
    rebulk.string('ZDF', value='ZDF')

    rebulk.rules(ValidateStreamingService)

    return rebulk
Example #8
0
def streaming_service(config):  # pylint: disable=too-many-statements,unused-argument
    """Streaming service property.

    :param config: rule configuration
    :type config: dict
    :return:
    :rtype: Rebulk
    """
    rebulk = Rebulk(disabled=lambda context: is_disabled(context, 'streaming_service'))
    rebulk = rebulk.string_defaults(ignore_case=True).regex_defaults(flags=re.IGNORECASE, abbreviations=[dash])
    rebulk.defaults(name='streaming_service', tags=['source-prefix'])

    rebulk.string('AE', 'A&E', value='A&E')
    rebulk.string('AMBC', value='ABC')
    rebulk.string('AUBC', value='ABC Australia')
    rebulk.string('AJAZ', value='Al Jazeera English')
    rebulk.string('AMC', value='AMC')
    rebulk.string('AMZN', 'Amazon', value='Amazon Prime')
    rebulk.regex('Amazon-?Prime', value='Amazon Prime')
    rebulk.string('AS', value='Adult Swim')
    rebulk.regex('Adult-?Swim', value='Adult Swim')
    rebulk.string('ATK', value="America's Test Kitchen")
    rebulk.string('ANPL', value='Animal Planet')
    rebulk.string('ANLB', value='AnimeLab')
    rebulk.string('AOL', value='AOL')
    rebulk.string('ARD', value='ARD')
    rebulk.string('iP', value='BBC iPlayer')
    rebulk.regex('BBC-?iPlayer', value='BBC iPlayer')
    rebulk.string('BRAV', value='BravoTV')
    rebulk.string('CNLP', value='Canal+')
    rebulk.string('CN', value='Cartoon Network')
    rebulk.string('CBC', value='CBC')
    rebulk.string('CBS', value='CBS')
    rebulk.string('CNBC', value='CNBC')
    rebulk.string('CC', value='Comedy Central')
    rebulk.string('4OD', value='Channel 4')
    rebulk.string('CHGD', value='CHRGD')
    rebulk.string('CMAX', value='Cinemax')
    rebulk.string('CMT', value='Country Music Television')
    rebulk.regex('Comedy-?Central', value='Comedy Central')
    rebulk.string('CCGC', value='Comedians in Cars Getting Coffee')
    rebulk.string('CR', value='Crunchy Roll')
    rebulk.string('CRKL', value='Crackle')
    rebulk.regex('Crunchy-?Roll', value='Crunchy Roll')
    rebulk.string('CSPN', value='CSpan')
    rebulk.string('CTV', value='CTV')
    rebulk.string('CUR', value='CuriosityStream')
    rebulk.string('CWS', value='CWSeed')
    rebulk.string('DSKI', value='Daisuki')
    rebulk.string('DHF', value='Deadhouse Films')
    rebulk.string('DDY', value='Digiturk Diledigin Yerde')
    rebulk.string('DISC', 'Discovery', value='Discovery')
    rebulk.string('DSNY', 'Disney', value='Disney')
    rebulk.string('DIY', value='DIY Network')
    rebulk.string('DOCC', value='Doc Club')
    rebulk.string('DPLY', value='DPlay')
    rebulk.string('ETV', value='E!')
    rebulk.string('EPIX', value='ePix')
    rebulk.string('ETTV', value='El Trece')
    rebulk.string('ESPN', value='ESPN')
    rebulk.string('ESQ', value='Esquire')
    rebulk.string('FAM', value='Family')
    rebulk.string('FJR', value='Family Jr')
    rebulk.string('FOOD', value='Food Network')
    rebulk.string('FOX', value='Fox')
    rebulk.string('FREE', value='Freeform')
    rebulk.string('FYI', value='FYI Network')
    rebulk.string('GLBL', value='Global')
    rebulk.string('GLOB', value='GloboSat Play')
    rebulk.string('HLMK', value='Hallmark')
    rebulk.string('HBO', value='HBO Go')
    rebulk.regex('HBO-?Go', value='HBO Go')
    rebulk.string('HGTV', value='HGTV')
    rebulk.string('HIST', 'History', value='History')
    rebulk.string('HULU', value='Hulu')
    rebulk.string('ID', value='Investigation Discovery')
    rebulk.string('IFC', value='IFC')
    rebulk.string('iTunes', 'iT', value='iTunes')
    rebulk.string('ITV', value='ITV')
    rebulk.string('KNOW', value='Knowledge Network')
    rebulk.string('LIFE', value='Lifetime')
    rebulk.string('MTOD', value='Motor Trend OnDemand')
    rebulk.string('MNBC', value='MSNBC')
    rebulk.string('MTV', value='MTV')
    rebulk.string('NATG', value='National Geographic')
    rebulk.regex('National-?Geographic', value='National Geographic')
    rebulk.string('NBA', value='NBA TV')
    rebulk.regex('NBA-?TV', value='NBA TV')
    rebulk.string('NBC', value='NBC')
    rebulk.string('NF', 'Netflix', value='Netflix')
    rebulk.string('NFL', value='NFL')
    rebulk.string('NFLN', value='NFL Now')
    rebulk.string('GC', value='NHL GameCenter')
    rebulk.string('NICK', 'Nickelodeon', value='Nickelodeon')
    rebulk.string('NRK', value='Norsk Rikskringkasting')
    rebulk.string('PBS', value='PBS')
    rebulk.string('PBSK', value='PBS Kids')
    rebulk.string('PSN', value='Playstation Network')
    rebulk.string('PLUZ', value='Pluzz')
    rebulk.string('RTE', value='RTE One')
    rebulk.string('SBS', value='SBS (AU)')
    rebulk.string('SESO', 'SeeSo', value='SeeSo')
    rebulk.string('SHMI', value='Shomi')
    rebulk.string('SPIK', value='Spike')
    rebulk.string('SPKE', value='Spike TV')
    rebulk.regex('Spike-?TV', value='Spike TV')
    rebulk.string('SNET', value='Sportsnet')
    rebulk.string('SPRT', value='Sprout')
    rebulk.string('STAN', value='Stan')
    rebulk.string('STZ', value='Starz')
    rebulk.string('SVT', value='Sveriges Television')
    rebulk.string('SWER', value='SwearNet')
    rebulk.string('SYFY', value='Syfy')
    rebulk.string('TBS', value='TBS')
    rebulk.string('TFOU', value='TFou')
    rebulk.string('CW', value='The CW')
    rebulk.regex('The-?CW', value='The CW')
    rebulk.string('TLC', value='TLC')
    rebulk.string('TUBI', value='TubiTV')
    rebulk.string('TV3', value='TV3 Ireland')
    rebulk.string('TV4', value='TV4 Sweeden')
    rebulk.string('TVL', value='TV Land')
    rebulk.regex('TV-?Land', value='TV Land')
    rebulk.string('UFC', value='UFC')
    rebulk.string('UKTV', value='UKTV')
    rebulk.string('UNIV', value='Univision')
    rebulk.string('USAN', value='USA Network')
    rebulk.string('VLCT', value='Velocity')
    rebulk.string('VH1', value='VH1')
    rebulk.string('VICE', value='Viceland')
    rebulk.string('VMEO', value='Vimeo')
    rebulk.string('VRV', value='VRV')
    rebulk.string('WNET', value='W Network')
    rebulk.string('WME', value='WatchMe')
    rebulk.string('WWEN', value='WWE Network')
    rebulk.string('XBOX', value='Xbox Video')
    rebulk.string('YHOO', value='Yahoo')
    rebulk.string('RED', value='YouTube Red')
    rebulk.string('ZDF', value='ZDF')

    rebulk.rules(ValidateStreamingService)

    return rebulk