Empty cache when ValueError is raised with 'unsupported pickle protocol: 3'. This happen when cache have been pickled with Python3 but is read by Python2.

pull/684/head
Louis Vézina 5 years ago
parent d92e7755d3
commit 6a2e2e0f5a

@ -10,6 +10,7 @@ from get_args import args
from config import settings from config import settings
from subliminal_patch.exceptions import TooManyRequests, APIThrottled, ParseResponseError from subliminal_patch.exceptions import TooManyRequests, APIThrottled, ParseResponseError
from subliminal.exceptions import DownloadLimitExceeded, ServiceUnavailable from subliminal.exceptions import DownloadLimitExceeded, ServiceUnavailable
from subliminal import region as subliminal_cache_region
VALID_THROTTLE_EXCEPTIONS = (TooManyRequests, DownloadLimitExceeded, ServiceUnavailable, APIThrottled, VALID_THROTTLE_EXCEPTIONS = (TooManyRequests, DownloadLimitExceeded, ServiceUnavailable, APIThrottled,
ParseResponseError) ParseResponseError)
@ -154,13 +155,20 @@ def provider_throttle(name, exception):
throttle_until = datetime.datetime.now() + throttle_delta throttle_until = datetime.datetime.now() + throttle_delta
if cls_name not in VALID_COUNT_EXCEPTIONS or throttled_count(name): if cls_name not in VALID_COUNT_EXCEPTIONS or throttled_count(name):
tp[name] = (cls_name, throttle_until, throttle_description) if cls_name == 'ValueError' and exception.message.startswith('unsupported pickle protocol'):
settings.general.throtteled_providers = str(tp) for fn in subliminal_cache_region.backend.all_filenames:
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle: try:
settings.write(handle) os.remove(fn)
except (IOError, OSError):
logging.info("Throttling %s for %s, until %s, because of: %s. Exception info: %r", name, throttle_description, logging.debug("Couldn't remove cache file: %s", os.path.basename(fn))
throttle_until.strftime("%y/%m/%d %H:%M"), cls_name, exception.message) else:
tp[name] = (cls_name, throttle_until, throttle_description)
settings.general.throtteled_providers = str(tp)
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle:
settings.write(handle)
logging.info("Throttling %s for %s, until %s, because of: %s. Exception info: %r", name, throttle_description,
throttle_until.strftime("%y/%m/%d %H:%M"), cls_name, exception.message)
def throttled_count(name): def throttled_count(name):

Loading…
Cancel
Save