summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMichiel van Baak <[email protected]>2021-03-14 16:56:50 +0100
committerMichiel van Baak <[email protected]>2021-03-14 16:56:50 +0100
commit9d73ccacf30f7931a64e6b25f0581ed1f604de53 (patch)
tree029ad6d38edc5d1d6c29ba503906e4ee5d8029d0
parent99a529037d10f0b276396de310eafd9a0b4d2716 (diff)
downloadbazarr-9d73ccacf30f7931a64e6b25f0581ed1f604de53.tar.gz
bazarr-9d73ccacf30f7931a64e6b25f0581ed1f604de53.zip
Use sha1 digest as cache key
Subliminal uses dogpile.cache to save state of subtitle availability. Some methods that dogpile.cache caches can have big argument lists, resulting in a default cache key that is longer than 255 characters. The dogpile.cache backend used, saves cache items to the filesystem, using the cache key as filename. This can result in errors about Filename too long. SHA1 generates a 160bit hash of the key, and we use the hexadecimal digest of that hash, resulting in key names of 80 characters.
-rw-r--r--libs/subliminal/cache.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/libs/subliminal/cache.py b/libs/subliminal/cache.py
index 3d8848e1d..da0312ba5 100644
--- a/libs/subliminal/cache.py
+++ b/libs/subliminal/cache.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
import datetime
+from hashlib import sha1
from dogpile.cache import make_region
@@ -14,4 +15,13 @@ EPISODE_EXPIRATION_TIME = datetime.timedelta(days=3).total_seconds()
REFINER_EXPIRATION_TIME = datetime.timedelta(weeks=1).total_seconds()
-region = make_region()
+def sha1_key_mangler(key):
+ """Return sha1 hex for cache keys"""
+ if isinstance(key, str):
+ key = key.encode("utf-8")
+
+ return sha1(key).hexdigest()
+
+
+# Use key mangler to limit cache key names to 40 characters
+region = make_region(key_mangler=sha1_key_mangler)