diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index d185eaf8468e25fd6062ca0f768115fdafe9c65c..85122677ea7f8e95efc6762c3139ed16304f9f2b 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -85,7 +85,10 @@ class NameParser(object): result.series_name = self.clean_series_name(result.series_name) if 'season_num' in named_groups: - result.season_number = int(match.group('season_num')) + tmp_season = int(match.group('season_num')) + if cur_regex_name == 'bare' and tmp_season in (19,20): + continue + result.season_number = tmp_season if 'ep_num' in named_groups: ep_num = self._convert_number(match.group('ep_num')) @@ -115,7 +118,7 @@ class NameParser(object): if 'release_group' in named_groups: result.release_group = match.group('release_group') - + return result return None diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py index ee8100f30bc8d472bb95d37ab9e6ef71f47bc514..85465b1ac4091f6dea2874aa8e3dc26b4990e6e0 100644 --- a/sickbeard/name_parser/regexes.py +++ b/sickbeard/name_parser/regexes.py @@ -140,10 +140,11 @@ ep_regexes = [ ''' ^((?P<series_name>.+?)[. _-]+)? # Show_Name and separator (e(p(isode)?)?|part|pt)[. _-]? # e, ep, episode, or part - (?P<ep_num>(\d+|[ivx]+)) # first ep num + (?P<ep_num>(\d+|([ivx]+(?=[. _-])))) # first ep num ([. _-]+((and|&|to)[. _-]+)? # and/&/to joiner ((e(p(isode)?)?|part|pt)[. _-]?) # e, ep, episode, or part - (?P<extra_ep_num>(?!(1080|720)[pi])(\d+|[ivx]+))[. _-])* # second ep num + (?P<extra_ep_num>(?!(1080|720)[pi]) + (\d+|([ivx]+(?=[. _-]))))[. _-])* # second ep num ([. _-]*(?P<extra_info>.+?) # Source_Quality_Etc- ((?<![. _-])-(?P<release_group>[^-]+))?)?$ # Group ''' @@ -165,7 +166,7 @@ ep_regexes = [ ''' ^((?P<series_name>.+?)[. _-]+)? # Show_Name and separator (?P<ep_num>\d{2}) # 02 - [. _-]*((?P<extra_info>.+?) # Source_Quality_Etc- + [. _-]+((?P<extra_info>.+?) # Source_Quality_Etc- ((?<![. _-])-(?P<release_group>[^-]+))?)?$ # Group ''' ), diff --git a/tests/name_parser_tests.py b/tests/name_parser_tests.py index ea92cbc0082235c20c222fb8713673c96d96b441..c84edf5dec1c85288ae26c5ded3e48510fa64952 100644 --- a/tests/name_parser_tests.py +++ b/tests/name_parser_tests.py @@ -54,6 +54,8 @@ simple_test_cases = { 'show.name.2010.123.source.quality.etc-group': parser.ParseResult(None, 'show name 2010', 1, [23], 'source.quality.etc', 'group'), 'show.name.2010.222.123.source.quality.etc-group': parser.ParseResult(None, 'show name 2010.222', 1, [23], 'source.quality.etc', 'group'), 'Show.Name.102': parser.ParseResult(None, 'Show Name', 1, [2]), + 'the.event.401.hdtv-lol': parser.ParseResult(None, 'the event', 4, [1], 'hdtv', 'lol'), + 'show.name.2010.special.hdtv-blah': None, }, 'stupid': { @@ -183,8 +185,14 @@ class BasicTests(unittest.TestCase): cur_test = cur_test_base if VERBOSE or verbose: print 'Testing', cur_test - test_result = np.parse(cur_test) + result = simple_test_cases[section][cur_test_base] + if not result: + self.assertRaises(parser.InvalidNameException, np.parse, cur_test) + return + else: + test_result = np.parse(cur_test) + if DEBUG or verbose: print 'air_by_date:', test_result.air_by_date, 'air_date:', test_result.air_date print test_result