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.
73 lines
3.0 KiB
73 lines
3.0 KiB
6 years ago
|
#!/usr/bin/env python
|
||
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
format property
|
||
|
"""
|
||
|
from rebulk.remodule import re
|
||
|
|
||
|
from rebulk import Rebulk, RemoveMatch, Rule
|
||
|
from ..common import dash
|
||
|
from ..common.validators import seps_before, seps_after
|
||
|
|
||
|
|
||
|
def format_():
|
||
|
"""
|
||
|
Builder for rebulk object.
|
||
|
:return: Created Rebulk object
|
||
|
:rtype: Rebulk
|
||
|
"""
|
||
|
rebulk = Rebulk().regex_defaults(flags=re.IGNORECASE, abbreviations=[dash])
|
||
|
rebulk.defaults(name="format", tags=['video-codec-prefix', 'streaming_service.suffix'])
|
||
|
|
||
|
rebulk.regex("VHS", "VHS-?Rip", value="VHS")
|
||
|
rebulk.regex("CAM", "CAM-?Rip", "HD-?CAM", value="Cam")
|
||
|
rebulk.regex("TELESYNC", "TS", "HD-?TS", value="Telesync")
|
||
|
rebulk.regex("WORKPRINT", "WP", value="Workprint")
|
||
|
rebulk.regex("TELECINE", "TC", value="Telecine")
|
||
|
rebulk.regex("PPV", "PPV-?Rip", value="PPV") # Pay Per View
|
||
|
rebulk.regex("SD-?TV", "SD-?TV-?Rip", "Rip-?SD-?TV", "TV-?Rip",
|
||
|
"Rip-?TV", "TV-?(?=Dub)", value="TV") # TV is too common to allow matching
|
||
|
rebulk.regex("DVB-?Rip", "DVB", "PD-?TV", value="DVB")
|
||
|
rebulk.regex("DVD", "DVD-?Rip", "VIDEO-?TS", "DVD-?R(?:$|(?!E))", # "DVD-?R(?:$|^E)" => DVD-Real ...
|
||
|
"DVD-?9", "DVD-?5", value="DVD")
|
||
|
|
||
|
rebulk.regex("HD-?TV", "TV-?RIP-?HD", "HD-?TV-?RIP", "HD-?RIP", value="HDTV",
|
||
|
conflict_solver=lambda match, other: other if other.name == 'other' else '__default__')
|
||
|
rebulk.regex("VOD", "VOD-?Rip", value="VOD")
|
||
|
rebulk.regex("WEB-?Rip", "WEB-?DL-?Rip", "WEB-?Cap", value="WEBRip")
|
||
|
rebulk.regex("WEB-?DL", "WEB-?HD", "WEB", "DL-?WEB", "DL(?=-?Mux)", value="WEB-DL")
|
||
|
rebulk.regex("HD-?DVD-?Rip", "HD-?DVD", value="HD-DVD")
|
||
|
rebulk.regex("Blu-?ray(?:-?Rip)?", "B[DR]", "B[DR]-?Rip", "BD[59]", "BD25", "BD50", value="BluRay")
|
||
|
rebulk.regex("AHDTV", value="AHDTV")
|
||
|
rebulk.regex('UHD-?TV', 'UHD-?Rip', value='UHDTV',
|
||
|
conflict_solver=lambda match, other: other if other.name == 'other' else '__default__')
|
||
|
rebulk.regex("HDTC", value="HDTC")
|
||
|
rebulk.regex("DSR", "DSR?-?Rip", "SAT-?Rip", "DTH", "DTH-?Rip", value="SATRip")
|
||
|
|
||
|
rebulk.rules(ValidateFormat)
|
||
|
|
||
|
return rebulk
|
||
|
|
||
|
|
||
|
class ValidateFormat(Rule):
|
||
|
"""
|
||
|
Validate format with screener property, with video_codec property or separated
|
||
|
"""
|
||
|
priority = 64
|
||
|
consequence = RemoveMatch
|
||
|
|
||
|
def when(self, matches, context):
|
||
|
ret = []
|
||
|
for format_match in matches.named('format'):
|
||
|
if not seps_before(format_match) and \
|
||
|
not matches.range(format_match.start - 1, format_match.start - 2,
|
||
|
lambda match: 'format-prefix' in match.tags):
|
||
|
ret.append(format_match)
|
||
|
continue
|
||
|
if not seps_after(format_match) and \
|
||
|
not matches.range(format_match.end, format_match.end + 1,
|
||
|
lambda match: 'format-suffix' in match.tags):
|
||
|
ret.append(format_match)
|
||
|
continue
|
||
|
return ret
|