Browse Source

Change only cache entries to name cache if regex type (anime/normal) matches parsed show_obj setting.

Change add flushing of name parser cache when switching anime settings of a show.
tags/release_0.24.7^2
Prinz23 4 years ago
committed by JackDandy
parent
commit
0fe35f1706
  1. 19
      sickbeard/name_parser/parser.py
  2. 3
      sickbeard/providers/generic.py
  3. 3
      sickbeard/webserve.py

19
sickbeard/name_parser/parser.py

@ -44,12 +44,13 @@ from ..classes import OrderedDefaultdict
from .._legacy_classes import LegacyParseResult from .._legacy_classes import LegacyParseResult
from _23 import decode_str, list_keys, list_range from _23 import decode_str, list_keys, list_range
from six import iterkeys, itervalues, PY2, string_types, text_type from six import iteritems, iterkeys, itervalues, PY2, string_types, text_type
# noinspection PyUnreachableCode # noinspection PyUnreachableCode
if False: if False:
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
from typing import Any, AnyStr, Dict, List, Optional from typing import Any, AnyStr, Dict, List, Optional
from ..tv import TVShow
class NameParser(object): class NameParser(object):
@ -632,7 +633,8 @@ class NameParser(object):
and not final_result.release_group and None is not release_group: 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 final_result.release_group = release_group # use provider ID otherwise pick_best_result fails
if cache_result: if cache_result \
and any('anime' in wr for wr in final_result.which_regex) == bool(final_result.show_obj.is_anime):
name_parser_cache.add(name, final_result) name_parser_cache.add(name, final_result)
logger.log(u'Parsed %s into %s' % (name, final_result), logger.DEBUG) logger.log(u'Parsed %s into %s' % (name, final_result), logger.DEBUG)
@ -828,7 +830,7 @@ class ParseResult(LegacyParseResult):
class NameParserCache(object): class NameParserCache(object):
def __init__(self): def __init__(self):
super(NameParserCache, self).__init__() super(NameParserCache, self).__init__()
self._previous_parsed = OrderedDefaultdict() self._previous_parsed = OrderedDefaultdict() # type: Dict[AnyStr, ParseResult]
self._cache_size = 1000 self._cache_size = 1000
self.lock = threading.Lock() self.lock = threading.Lock()
@ -868,6 +870,17 @@ class NameParserCache(object):
self._previous_parsed.move_to_end(name) self._previous_parsed.move_to_end(name)
return self._previous_parsed[name] return self._previous_parsed[name]
def flush(self, show_obj):
# type: (TVShow) -> None
"""
removes all entries corresponding to the given show_obj
:param show_obj: TVShow object
"""
with self.lock:
self._previous_parsed = OrderedDefaultdict(None, [(k, v) for k, v in iteritems(self._previous_parsed)
if v.show_obj != show_obj])
name_parser_cache = NameParserCache() name_parser_cache = NameParserCache()

3
sickbeard/providers/generic.py

@ -1131,8 +1131,7 @@ class GenericProvider(object):
parser = NameParser(False, show_obj=self.get_show(item, **kwargs), convert=True, indexer_lookup=False) parser = NameParser(False, show_obj=self.get_show(item, **kwargs), convert=True, indexer_lookup=False)
# parse the file name # parse the file name
try: try:
cache_result = not (show_obj and show_obj.is_anime) parse_result = parser.parse(title, release_group=self.get_id())
parse_result = parser.parse(title, cache_result=cache_result, release_group=self.get_id())
except InvalidNameException: except InvalidNameException:
logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG) logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG)
continue continue

3
sickbeard/webserve.py

@ -2673,6 +2673,9 @@ class Home(MainHandler):
except exceptions_helper.CantRefreshException as e: except exceptions_helper.CantRefreshException as e:
errors.append('Unable to refresh this show: ' + ex(e)) errors.append('Unable to refresh this show: ' + ex(e))
if bool(anime) != show_obj.is_anime:
sickbeard.name_parser.parser.name_parser_cache.flush(show_obj)
show_obj.paused = paused show_obj.paused = paused
show_obj.scene = scene show_obj.scene = scene
show_obj.anime = anime show_obj.anime = anime

Loading…
Cancel
Save