From 01c775194788cca7e736fb6676a2da954f4af403 Mon Sep 17 00:00:00 2001 From: Toilal Date: Sat, 24 Oct 2015 17:31:31 +0200 Subject: [PATCH] Update to latest Rebulk changes --- guessit/__main__.py | 2 + guessit/rules/properties/bonus.py | 4 +- guessit/rules/properties/episodes.py | 6 +- guessit/rules/properties/language.py | 4 +- guessit/rules/properties/other.py | 2 + guessit/rules/properties/screen_size.py | 9 ++ guessit/test/movies.yml | 133 +++++++++++++++++++++++- 7 files changed, 154 insertions(+), 6 deletions(-) diff --git a/guessit/__main__.py b/guessit/__main__.py index 0c8a4b8..de9fdb8 100644 --- a/guessit/__main__.py +++ b/guessit/__main__.py @@ -31,6 +31,8 @@ class GuessitEncoder(json.JSONEncoder): ret['start'] = o.start ret['end'] = o.end return ret + elif hasattr(o, 'name'): # Babelfish languages/countries long name + return o.name else: return str(o) diff --git a/guessit/rules/properties/bonus.py b/guessit/rules/properties/bonus.py index 89979d4..52b5820 100644 --- a/guessit/rules/properties/bonus.py +++ b/guessit/rules/properties/bonus.py @@ -13,8 +13,8 @@ BONUS = Rebulk().regex_defaults(flags=re.IGNORECASE) BONUS.regex(r'x(\d+)', name='bonusNumber', private_parent=True, children=True, formatter=int, validator={'__parent__': lambda match: seps_surround}, - conflict_solver=lambda match, conflicting: conflicting - if match.name in ['videoCodec', 'episodeNumber'] else None) + conflict_solver=lambda match, conflicting: match + if conflicting.name in ['videoCodec', 'episodeNumber'] else '__default__') class BonusTitleRule(AppendMatchRule): diff --git a/guessit/rules/properties/episodes.py b/guessit/rules/properties/episodes.py index 6f8ea63..7b15d49 100644 --- a/guessit/rules/properties/episodes.py +++ b/guessit/rules/properties/episodes.py @@ -14,4 +14,8 @@ EPISODES.regex(r'(?P\d+)x(?P\d+)', r'S(?P\d+)[ex](?P\d+)', formatter=int, children=True, - private_parent=True) + private_parent=True, + conflict_solver=lambda match, other: match + if match.name in ['season', 'episodeNumber'] + and other.name == 'screenSize' + else '__default__') diff --git a/guessit/rules/properties/language.py b/guessit/rules/properties/language.py index dff24c2..b869b0f 100644 --- a/guessit/rules/properties/language.py +++ b/guessit/rules/properties/language.py @@ -18,7 +18,7 @@ UNDETERMINED = babelfish.Language('und') SYN = {('und', None): ['unknown', 'inconnu', 'unk', 'un'], ('ell', None): ['gr', 'greek'], ('spa', None): ['esp', 'español'], - ('fra', None): ['français', 'vf', 'vff', 'vfi'], + ('fra', None): ['français', 'vf', 'vff', 'vfi', 'vfq'], ('swe', None): ['se'], ('por', 'BR'): ['po', 'pb', 'pob', 'br', 'brazilian'], ('cat', None): ['català'], @@ -158,7 +158,7 @@ LNG_COMMON_WORDS = frozenset([ 'la', 'el', 'del', 'por', 'mar', 'al', # other 'ind', 'arw', 'ts', 'ii', 'bin', 'chan', 'ss', 'san', 'oss', 'iii', - 'vi', 'ben', 'da', 'lt', 'ch', 'sr', 'ps', 'cx', + 'vi', 'ben', 'da', 'lt', 'ch', 'sr', 'ps', 'cx', 'vo', # new from babelfish 'mkv', 'avi', 'dmd', 'the', 'dis', 'cut', 'stv', 'des', 'dia', 'and', 'cab', 'sub', 'mia', 'rim', 'las', 'une', 'par', 'srt', 'ano', 'toy', diff --git a/guessit/rules/properties/other.py b/guessit/rules/properties/other.py index 9b049f3..0155f2e 100644 --- a/guessit/rules/properties/other.py +++ b/guessit/rules/properties/other.py @@ -38,6 +38,8 @@ for value in ('Screener', 'Remux', '3D', 'HD', 'mHD', 'HDLight', 'HQ', 'DDC', 'H for value in ('Limited', 'Complete', 'Classic', 'Unrated', 'LiNE', 'Bonus', 'Trailer'): OTHER.string(value, value=value, tags='other.has-neighbor') +OTHER.string('VO', 'OV', value='OV', tags='other.has-neighbor') + OTHER.regex('Scr(?:eener)?', value='Screener', validator=None, tags='other.validate.screener') diff --git a/guessit/rules/properties/screen_size.py b/guessit/rules/properties/screen_size.py index f9d98d0..e87228d 100644 --- a/guessit/rules/properties/screen_size.py +++ b/guessit/rules/properties/screen_size.py @@ -7,6 +7,7 @@ from rebulk import Rebulk import regex as re from ..common.validators import seps_surround +from guessit.rules.common import dash SCREEN_SIZE = Rebulk().regex_defaults(flags=re.IGNORECASE) SCREEN_SIZE.defaults(name="screenSize", validator=seps_surround) @@ -21,5 +22,13 @@ SCREEN_SIZE.regex(r"(?:\d{3,}(?:\\|\/|x|\*))?1080i", value="1080i") SCREEN_SIZE.regex(r"(?:\d{3,}(?:\\|\/|x|\*))?1080p?x?", value="1080p") SCREEN_SIZE.regex(r"(?:\d{3,4}(?:\\|\/|x|\*))?2160(?:i|p?x?)", value="4K") + +_digits_re = re.compile(r'\d+') + + +SCREEN_SIZE.regex(r'\d{3,4}-?[x\*]-?\d{3,4}', abbreviations=[dash], + formatter=lambda value: 'x'.join(_digits_re.findall(value)), + conflict_solver=lambda match, other: match if other.name == 'screenSize' else other) + # TODO: implement validators from guessit 1 # validator=ChainedValidator(DefaultValidator(), OnlyOneValidator())) diff --git a/guessit/test/movies.yml b/guessit/test/movies.yml index 73c47b2..fa9c2bd 100644 --- a/guessit/test/movies.yml +++ b/guessit/test/movies.yml @@ -646,4 +646,135 @@ : title: Dr LiNE The Lorax screenSize: 720p videoCodec: h264 - format: BluRay \ No newline at end of file + format: BluRay + +#TODO: Camelcase implementation +#? BeatdownFrenchDVDRip.mkv +#: options: -c +# title: Beatdown +# language: French +# format: DVD + +#? YvesSaintLaurent2013FrenchDVDScrXvid.avi +#: options: -c +# format: DVD +# language: French +# other: Screener +# title: Yves saint laurent +# videoCodec: XviD +# year: 2013 + + +? Elle.s.en.va.720p.mkv +: screenSize: 720p + title: Elle s en va + +? FooBar.7.PDTV-FlexGet +: format: DVB + releaseGroup: FlexGet + title: FooBar 7 + +? h265 - HEVC Riddick Unrated Director Cut French 1080p DTS.mkv +: audioCodec: DTS + edition: Director's cut + language: fr + screenSize: 1080p + title: Riddick + other: Unrated + videoCodec: h265 + +? "[h265 - HEVC] Riddick Unrated Director Cut French [1080p DTS].mkv" +: audioCodec: DTS + edition: Director's cut + language: fr + screenSize: 1080p + title: Riddick + other: Unrated + videoCodec: h265 + +? Barbecue-2014-French-mHD-1080p +: options: -n + language: fr + other: mHD + screenSize: 1080p + title: Barbecue + year: 2014 + +? Underworld Quadrilogie VO+VFF+VFQ 1080p HDlight.x264~Tonyk~Monde Infernal +: options: -n + language: fr + other: + - HDLight + - OV + screenSize: 1080p + title: Underworld Quadrilogie + videoCodec: h264 + +? A Bout Portant (The Killers).PAL.Multi.DVD-R-KZ +: options: -n + format: DVD + language: mul + releaseGroup: KZ + title: A Bout Portant + +? "Mise à Sac (Alain Cavalier, 1967) [Vhs.Rip.Vff]" +: format: VHS + language: fr + title: "Mise à Sac" + year: 1967 + +? A Bout Portant (The Killers).PAL.Multi.DVD-R-KZ +: format: DVD + other: PAL + language: mul + releaseGroup: KZ + title: A Bout Portant + +? Youth.In.Revolt.(Be.Bad).2009.MULTI.1080p.LAME3*92-MEDIOZZ +: audioCodec: MP3 + language: mul + releaseGroup: MEDIOZZ + screenSize: 1080p + title: Youth In Revolt + year: 2009 + +? La Defense Lincoln (The Lincoln Lawyer) 2011 [DVDRIP][Vostfr] +: format: DVD + subtitleLanguage: fr + title: La Defense Lincoln + year: 2011 + +? '[h265 - HEVC] Fight Club French 1080p DTS.' +: audioCodec: DTS + language: fr + screenSize: 1080p + title: Fight Club + videoCodec: h265 + +? Love Gourou (Mike Myers) - FR +: language: fr + title: Love Gourou + +? '[h265 - hevc] transformers 2 1080p french ac3 6ch.' +: audioChannels: '5.1' + audioCodec: AC3 + language: fr + screenSize: 1080p + title: transformers 2 + videoCodec: h265 + +? 1.Angry.Man.1957.mkv +: title: 1 Angry Man + year: 1957 + +? 12.Angry.Men.1957.mkv +: title: 12 Angry Men + year: 1957 + +? 123.Angry.Men.1957.mkv +: title: 123 Angry Men + year: 1957 + +? "Looney Tunes 1444x866 Porky's Last Stand.mkv" +: screenSize: 1444x866 + title: Looney Tunes \ No newline at end of file