From 67cf6a0c8b0592389de3243a57035caa0c82fb7a Mon Sep 17 00:00:00 2001 From: sHa Date: Tue, 30 Dec 2025 09:08:14 +0000 Subject: [PATCH] feat: Enhance caching mechanism with MD5 hashing for instance identifiers --- dist/renamer-0.5.7-py3-none-any.whl | Bin 0 -> 47754 bytes pyproject.toml | 2 +- renamer/decorators/caching.py | 2 ++ renamer/extractors/extractor.py | 4 ++-- uv.lock | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 dist/renamer-0.5.7-py3-none-any.whl diff --git a/dist/renamer-0.5.7-py3-none-any.whl b/dist/renamer-0.5.7-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..7dc216f2a16a7976d8574afc98651a53a1687ba1 GIT binary patch literal 47754 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 ObP@ejWG@5_8&OdpMt)ZpeU$Bu? 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 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index 15b4880..ba9bc74 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "renamer" -version = "0.5.6" +version = "0.5.7" description = "Terminal-based media file renamer and metadata viewer" readme = "README.md" requires-python = ">=3.11" diff --git a/renamer/decorators/caching.py b/renamer/decorators/caching.py index ebc330b..f4a4019 100644 --- a/renamer/decorators/caching.py +++ b/renamer/decorators/caching.py @@ -31,6 +31,8 @@ def cached_method(ttl_seconds: int = 3600) -> Callable: # Use instance identifier (file_path for extractors) instance_id = getattr(self, 'file_path', str(id(self))) + if isinstance(instance_id, Path): + instance_id = hashlib.md5(str(instance_id).encode('utf-8')).hexdigest() # Create hash from args and kwargs (excluding self) param_str = json.dumps((args, kwargs), sort_keys=True, default=str) diff --git a/renamer/extractors/extractor.py b/renamer/extractors/extractor.py index 3cd14ab..7cf065d 100644 --- a/renamer/extractors/extractor.py +++ b/renamer/extractors/extractor.py @@ -5,6 +5,7 @@ from .mediainfo_extractor import MediaInfoExtractor from .fileinfo_extractor import FileInfoExtractor from .tmdb_extractor import TMDBExtractor from .default_extractor import DefaultExtractor +import hashlib class MediaExtractor: @@ -13,8 +14,8 @@ class MediaExtractor: @classmethod def create(cls, file_path: Path, cache=None, ttl_seconds: int = 21600): """Factory method that returns cached object if available, else creates new.""" + cache_key = f"extractor_{hashlib.md5(str(file_path).encode('utf-8')).hexdigest()}" if cache: - cache_key = f"extractor_{file_path}" cached_obj = cache.get_object(cache_key) if cached_obj: print(f"Loaded MediaExtractor object from cache for {file_path.name}") @@ -25,7 +26,6 @@ class MediaExtractor: # Cache the object if cache: - cache_key = f"extractor_{file_path}" cache.set_object(cache_key, instance, ttl_seconds) print(f"Cached MediaExtractor object for {file_path.name}") diff --git a/uv.lock b/uv.lock index c79b9ac..2e6b689 100644 --- a/uv.lock +++ b/uv.lock @@ -342,7 +342,7 @@ wheels = [ [[package]] name = "renamer" -version = "0.5.6" +version = "0.5.7" source = { editable = "." } dependencies = [ { name = "langcodes" },