diff --git a/CHANGES.md b/CHANGES.md index 26b492f..2ca72fb 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,9 @@ -### 0.21.15 (2020-11-09 14:10:00 UTC) +### 0.21.16 (2020-11-10 20:15:00 UTC) + +* Fix anime name parser tests failing on assumed season number 1 + + +### 0.21.15 (2020-11-09 14:10:00 UTC) * Fix IMDb cards not always displayed as `in library` diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py index 5ebfc29..88821cb 100644 --- a/sickbeard/name_parser/parser.py +++ b/sickbeard/name_parser/parser.py @@ -628,11 +628,9 @@ class NameParser(object): and not final_result.ab_episode_numbers and not final_result.series_name: raise InvalidNameException('Unable to parse %s' % name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace')) - if final_result.show_obj and final_result.show_obj.is_anime: - if None is final_result.season_number: - final_result.season_number = 1 # assign season number or finish_find_search_results will fail - if not final_result.release_group: - final_result.release_group = release_group # use provider id or pick_best_result fails + if final_result.show_obj and final_result.show_obj.is_anime \ + and not final_result.release_group and None is not release_group: + final_result.release_group = release_group # use provider ID otherwise pick_best_result fails if cache_result: name_parser_cache.add(name, final_result) diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py index 964f1a7..46c9c82 100644 --- a/sickbeard/name_parser/regexes.py +++ b/sickbeard/name_parser/regexes.py @@ -295,6 +295,40 @@ anime_regexes = [ ''' ), + ('anime_ep_quality', + # Show Name 09 HD + # Show Name 09 HD1234 + # Show Name 09 SD + r''' + ^(\[(?P.+?)\][ ._-]*)? (?# Release Group and separator) + (?P.+?)[ ._-]+ (?# Show_Name and separator) + (?P\d{1,3}) (?# E01) + (-(?P\d{1,3}))? (?# E02) + .* + (v(?P[0-9]))? (?# version) + [ ._-]+(?P[sh]d\d{0,4}.*?) (?# Source_Quality_Etc-) + (\[(?P\w{8})\])? (?# CRC) + .*? (?# Separator and EOL) + ''' + ), + + ('anime_quality_ep', + # Show Name HD 09 + # Show Name HD1234 09 + # Show Name SD 09 + r''' + ^(\[(?P.+?)\][ ._-]*)? (?# Release Group and separator) + (?P.+?)[ ._-]+ (?# Show_Name and separator) + (?P[sh]d\d{0,4}.*?)[ ._-]+ (?# Source_Quality_Etc-) + (\[(?P\w{8})\])? (?# CRC) + (?P\d{1,3}) (?# E01) + (-(?P\d{1,3}))? (?# E02) + .* + (v(?P[0-9]))? (?# version) + .*? (?# Separator and EOL) + ''' + ), + ('anime_slash', # [SGKK] Bleach 312v1 [720p/MKV] r''' diff --git a/tests/name_parser_tests.py b/tests/name_parser_tests.py index bd1a22a..32358c8 100644 --- a/tests/name_parser_tests.py +++ b/tests/name_parser_tests.py @@ -223,6 +223,20 @@ simple_test_cases = { 'Show.Name.123-11001001': parser.ParseResult(None, 'Show Name', None, [], None, None, None, [123]), }, + 'anime_ep_quality': { + 'Show Name 09 HD': parser.ParseResult(None, 'Show Name', None, [], 'HD', None, None, [9]), + 'Show Name 09 SD': parser.ParseResult(None, 'Show Name', None, [], 'SD', None, None, [9]), + 'Show Name 09 HD720': parser.ParseResult(None, 'Show Name', None, [], 'HD720', None, None, [9]), + 'Show Name HD1080 09': parser.ParseResult(None, 'Show Name', None, [], 'HD1080', None, None, [9]), + }, + + 'anime_quality_ep': { + 'Show Name HD 09': parser.ParseResult(None, 'Show Name', None, [], 'HD', None, None, [9]), + 'Show Name SD 09': parser.ParseResult(None, 'Show Name', None, [], 'SD', None, None, [9]), + 'Show Name HD720 09': parser.ParseResult(None, 'Show Name', None, [], 'HD720', None, None, [9]), + 'Show Name HD1080 09': parser.ParseResult(None, 'Show Name', None, [], 'HD1080', None, None, [9]), + }, + 'anime_ep_name': { '[TzaTziki]_One_Piece_279_Chopper_Man_1_[720p][8AE5F25D]': parser.ParseResult(None, 'One Piece', None, [], '720p', 'TzaTziki', None, [279]), @@ -647,6 +661,14 @@ class BasicTests(unittest.TestCase): np = parser.NameParser(False, TVShowTest(is_anime=True), testing=True) self._test_names(np, 'anime_standard') + def test_anime_ep_quality(self): + np = parser.NameParser(False, TVShowTest(is_anime=True), testing=True) + self._test_names(np, 'anime_ep_quality') + + def test_anime_quality_ep(self): + np = parser.NameParser(False, TVShowTest(is_anime=True), testing=True) + self._test_names(np, 'anime_quality_ep') + def test_anime_ep_name(self): np = parser.NameParser(False, TVShowTest(is_anime=True), testing=True) self._test_names(np, 'anime_ep_name')