From d6015e0cc729d3f05c0a6bbfdb3a540967bdb94f Mon Sep 17 00:00:00 2001 From: Jamin Kauf Date: Fri, 2 Oct 2026 15:17:24 +0200 Subject: [PATCH 1/5] added safe_remove_cache to deal with different shelve backends --- pokebase/cache.py | 11 ++++++++++- tests/test_module_cache.py | 8 ++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pokebase/cache.py b/pokebase/cache.py index 5613d5b..0bf14b8 100644 --- a/pokebase/cache.py +++ b/pokebase/cache.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import glob import os import shelve @@ -9,6 +10,7 @@ CACHE_DIR = None API_CACHE = None SPRITE_CACHE = None +API_CACHE_FILE_NAME = "api.cache" def save(data, endpoint, resource_id=None, subresource=None): @@ -137,10 +139,17 @@ def set_cache(new_path=None): new_path = get_default_cache() CACHE_DIR = safe_make_dirs(os.path.abspath(new_path)) - API_CACHE = os.path.join(CACHE_DIR, "api.cache") + API_CACHE = os.path.join(CACHE_DIR, API_CACHE_FILE_NAME) SPRITE_CACHE = safe_make_dirs(os.path.join(CACHE_DIR, "sprite")) return CACHE_DIR, API_CACHE, SPRITE_CACHE +def safe_remove_cache(): + """Depending on the database backend that shelve is using, different database files will be created. Shelve does not offer a way to detect which one it has created, so this function catches all of them""" + for f in glob.glob(f"{CACHE_DIR}\\{API_CACHE_FILE_NAME}*"): + if os.path.exists(f): + os.remove(f) + + CACHE_DIR, API_CACHE, SPRITE_CACHE = set_cache() diff --git a/tests/test_module_cache.py b/tests/test_module_cache.py index 53c1b2c..0877667 100644 --- a/tests/test_module_cache.py +++ b/tests/test_module_cache.py @@ -3,6 +3,7 @@ import importlib import os import shelve +import glob import unittest from hypothesis import assume, given @@ -60,7 +61,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): resource_id=integers(min_value=1)) def testEnv_CacheFileNotFound(self, data, endpoint, resource_id): assume(data != dict()) - os.remove(cache.API_CACHE) + cache.safe_remove_cache() self.assertIsNone(cache.save(data, endpoint, resource_id)) @given(data=dictionaries(text(), text()), @@ -113,7 +114,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): def testEnv_CacheFileNotFound(self, endpoint, resource_id): # ensure it exsists before we delete it, cache.set_cache('testing') - os.remove(cache.API_CACHE) + cache.safe_remove_cache() with self.assertRaises(KeyError): cache.load(endpoint, resource_id) @@ -168,8 +169,7 @@ def testAttr_Caches_Default(self): def testEnv_CacheDirNotFound(self): cache.set_cache('testing') os.rmdir(cache.SPRITE_CACHE) - if os.path.exists(cache.API_CACHE): os.remove(cache.API_CACHE) - os.rmdir(cache.CACHE_DIR) + cache.safe_remove_cache() self.assertEqual(cache.set_cache(), (cache.CACHE_DIR, cache.API_CACHE, cache.SPRITE_CACHE)) From 541ef1bdc75755177ed54f487473883a1ebc83c6 Mon Sep 17 00:00:00 2001 From: Jamin Kauf Date: Fri, 9 Oct 2026 17:43:43 +0200 Subject: [PATCH 2/5] renamed & documented delete_cache --- README.md | 6 ++++++ pokebase/cache.py | 6 +++++- tests/test_module_cache.py | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 46ef4a7..5be7b92 100644 --- a/README.md +++ b/README.md @@ -77,3 +77,9 @@ Do this :) >>> from pokebase import cache >>> cache.API_CACHE ``` + +To delete the existing cache, don't delete files directly, as `shelve`'s file structure is platform-dependant. Indead, do +```python console +>>> from pokebase import cache +>>> cache.delete_cache() +``` diff --git a/pokebase/cache.py b/pokebase/cache.py index 0bf14b8..712194d 100644 --- a/pokebase/cache.py +++ b/pokebase/cache.py @@ -145,11 +145,15 @@ def set_cache(new_path=None): return CACHE_DIR, API_CACHE, SPRITE_CACHE -def safe_remove_cache(): +def delete_cache(): """Depending on the database backend that shelve is using, different database files will be created. Shelve does not offer a way to detect which one it has created, so this function catches all of them""" + global CACHE_DIR, API_CACHE, SPRITE_CACHE for f in glob.glob(f"{CACHE_DIR}\\{API_CACHE_FILE_NAME}*"): if os.path.exists(f): os.remove(f) + CACHE_DIR = None + API_CACHE = None + SPRITE_CACHE = None CACHE_DIR, API_CACHE, SPRITE_CACHE = set_cache() diff --git a/tests/test_module_cache.py b/tests/test_module_cache.py index 0877667..9b3e51b 100644 --- a/tests/test_module_cache.py +++ b/tests/test_module_cache.py @@ -61,7 +61,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): resource_id=integers(min_value=1)) def testEnv_CacheFileNotFound(self, data, endpoint, resource_id): assume(data != dict()) - cache.safe_remove_cache() + cache.delete_cache() self.assertIsNone(cache.save(data, endpoint, resource_id)) @given(data=dictionaries(text(), text()), @@ -114,7 +114,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): def testEnv_CacheFileNotFound(self, endpoint, resource_id): # ensure it exsists before we delete it, cache.set_cache('testing') - cache.safe_remove_cache() + cache.delete_cache() with self.assertRaises(KeyError): cache.load(endpoint, resource_id) @@ -169,7 +169,7 @@ def testAttr_Caches_Default(self): def testEnv_CacheDirNotFound(self): cache.set_cache('testing') os.rmdir(cache.SPRITE_CACHE) - cache.safe_remove_cache() + cache.delete_cache() self.assertEqual(cache.set_cache(), (cache.CACHE_DIR, cache.API_CACHE, cache.SPRITE_CACHE)) From f4a023b4bd21cf6e7524ce0ef2e287910216e043 Mon Sep 17 00:00:00 2001 From: Jamin Kauf Date: Sat, 10 Oct 2026 12:20:35 +0200 Subject: [PATCH 3/5] Undo deleting cache path variable in delete_cache from commit 541ef1bdc75755177ed54f487473883a1ebc83c6 --- pokebase/cache.py | 6 +----- tests/test_module_cache.py | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/pokebase/cache.py b/pokebase/cache.py index 712194d..3cbfb16 100644 --- a/pokebase/cache.py +++ b/pokebase/cache.py @@ -145,15 +145,11 @@ def set_cache(new_path=None): return CACHE_DIR, API_CACHE, SPRITE_CACHE -def delete_cache(): +def empty_cache(): """Depending on the database backend that shelve is using, different database files will be created. Shelve does not offer a way to detect which one it has created, so this function catches all of them""" - global CACHE_DIR, API_CACHE, SPRITE_CACHE for f in glob.glob(f"{CACHE_DIR}\\{API_CACHE_FILE_NAME}*"): if os.path.exists(f): os.remove(f) - CACHE_DIR = None - API_CACHE = None - SPRITE_CACHE = None CACHE_DIR, API_CACHE, SPRITE_CACHE = set_cache() diff --git a/tests/test_module_cache.py b/tests/test_module_cache.py index 9b3e51b..63c3ef8 100644 --- a/tests/test_module_cache.py +++ b/tests/test_module_cache.py @@ -61,7 +61,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): resource_id=integers(min_value=1)) def testEnv_CacheFileNotFound(self, data, endpoint, resource_id): assume(data != dict()) - cache.delete_cache() + cache.empty_cache() self.assertIsNone(cache.save(data, endpoint, resource_id)) @given(data=dictionaries(text(), text()), @@ -114,7 +114,7 @@ def testArg_subresource_Text(self, data, endpoint, resource_id, subresource): def testEnv_CacheFileNotFound(self, endpoint, resource_id): # ensure it exsists before we delete it, cache.set_cache('testing') - cache.delete_cache() + cache.empty_cache() with self.assertRaises(KeyError): cache.load(endpoint, resource_id) @@ -169,7 +169,7 @@ def testAttr_Caches_Default(self): def testEnv_CacheDirNotFound(self): cache.set_cache('testing') os.rmdir(cache.SPRITE_CACHE) - cache.delete_cache() + cache.empty_cache() self.assertEqual(cache.set_cache(), (cache.CACHE_DIR, cache.API_CACHE, cache.SPRITE_CACHE)) From a3585ee856ad3657f0103248f3993adeee94dd43 Mon Sep 17 00:00:00 2001 From: Jamin Kauf Date: Sat, 10 Oct 2026 12:22:41 +0200 Subject: [PATCH 4/5] renamed cache.delete_cache to cache.empty_cache --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5be7b92..efec186 100644 --- a/README.md +++ b/README.md @@ -81,5 +81,5 @@ Do this :) To delete the existing cache, don't delete files directly, as `shelve`'s file structure is platform-dependant. Indead, do ```python console >>> from pokebase import cache ->>> cache.delete_cache() +>>> cache.empty_cache() ``` From a7af6d8069f6c80197b821291e21d3ca8e9722da Mon Sep 17 00:00:00 2001 From: Jamin Kauf Date: Sat, 10 Oct 2026 16:29:38 +0200 Subject: [PATCH 5/5] fixed empty_cache docstring line length and path joining --- pokebase/cache.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pokebase/cache.py b/pokebase/cache.py index 3cbfb16..5d3354e 100644 --- a/pokebase/cache.py +++ b/pokebase/cache.py @@ -146,8 +146,9 @@ def set_cache(new_path=None): def empty_cache(): - """Depending on the database backend that shelve is using, different database files will be created. Shelve does not offer a way to detect which one it has created, so this function catches all of them""" - for f in glob.glob(f"{CACHE_DIR}\\{API_CACHE_FILE_NAME}*"): + """Depending on the database backend that shelve is using, different database files will be created. + Shelve does not offer a way to detect which one it has created, so this function catches all of them""" + for f in glob.glob(f"{API_CACHE}*"): if os.path.exists(f): os.remove(f)