]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix: prevent duplicate cachalot app in Django settings (#10300)
authorAntoine Mérino <antoine.merino.dev@gmail.com>
Tue, 1 Jul 2025 16:11:58 +0000 (18:11 +0200)
committerGitHub <noreply@github.com>
Tue, 1 Jul 2025 16:11:58 +0000 (09:11 -0700)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
src/paperless/settings.py
src/paperless/tests/test_db_cache.py

index e77fceb96388505eb426cb04f44beb077f1dddfb..41146e7170f7565ba00081dc8c4d296e51ffb89c 100644 (file)
@@ -918,7 +918,6 @@ CELERY_BEAT_SCHEDULE_FILENAME = str(DATA_DIR / "celerybeat-schedule.db")
 
 # Cachalot: Database read cache.
 def _parse_cachalot_settings():
-    global INSTALLED_APPS
     ttl = __get_int("PAPERLESS_READ_CACHE_TTL", 3600)
     ttl = min(ttl, 31536000) if ttl > 0 else 3600
     _, redis_url = _parse_redis_url(
@@ -936,18 +935,18 @@ def _parse_cachalot_settings():
         "CACHALOT_REDIS_URL": redis_url,
         "CACHALOT_TIMEOUT": ttl,
     }
-    if result["CACHALOT_ENABLED"]:
-        INSTALLED_APPS.append("cachalot")
     return result
 
 
-_cachalot_settings = _parse_cachalot_settings()
-CACHALOT_ENABLED = _cachalot_settings["CACHALOT_ENABLED"]
-CACHALOT_CACHE = _cachalot_settings["CACHALOT_CACHE"]
-CACHALOT_TIMEOUT = _cachalot_settings["CACHALOT_TIMEOUT"]
-CACHALOT_QUERY_KEYGEN = _cachalot_settings["CACHALOT_QUERY_KEYGEN"]
-CACHALOT_TABLE_KEYGEN = _cachalot_settings["CACHALOT_TABLE_KEYGEN"]
-CACHALOT_FINAL_SQL_CHECK = _cachalot_settings["CACHALOT_FINAL_SQL_CHECK"]
+cachalot_settings = _parse_cachalot_settings()
+CACHALOT_ENABLED = cachalot_settings["CACHALOT_ENABLED"]
+if CACHALOT_ENABLED:  # pragma: no cover
+    INSTALLED_APPS.append("cachalot")
+CACHALOT_CACHE = cachalot_settings["CACHALOT_CACHE"]
+CACHALOT_TIMEOUT = cachalot_settings["CACHALOT_TIMEOUT"]
+CACHALOT_QUERY_KEYGEN = cachalot_settings["CACHALOT_QUERY_KEYGEN"]
+CACHALOT_TABLE_KEYGEN = cachalot_settings["CACHALOT_TABLE_KEYGEN"]
+CACHALOT_FINAL_SQL_CHECK = cachalot_settings["CACHALOT_FINAL_SQL_CHECK"]
 
 
 # Django default & Cachalot cache configuration
@@ -968,7 +967,7 @@ def _parse_caches():
         },
         "read-cache": {
             "BACKEND": _CACHE_BACKEND,
-            "LOCATION": _parse_cachalot_settings()["CACHALOT_REDIS_URL"],
+            "LOCATION": cachalot_settings["CACHALOT_REDIS_URL"],
             "KEY_PREFIX": _REDIS_KEY_PREFIX,
         },
     }
@@ -977,9 +976,6 @@ def _parse_caches():
 CACHES = _parse_caches()
 
 
-del _cachalot_settings
-
-
 def default_threads_per_worker(task_workers) -> int:
     # always leave one core open
     available_cores = max(multiprocessing.cpu_count(), 1)
index f00d0824cf9413d4cc2e861923cc51450c19106f..ae9066ca1787b10292c45cfa592aa98f4e43fc4e 100644 (file)
@@ -63,26 +63,20 @@ class TestDbCacheSettings:
         },
     )
     def test_cachalot_custom_settings(self):
-        cachalot_settings = _parse_cachalot_settings()
-        assert "cachalot" in settings.INSTALLED_APPS
-        caches = _parse_caches()
+        settings = _parse_cachalot_settings()
 
-        # Modifiable settings
-        assert cachalot_settings["CACHALOT_ENABLED"]
-        assert cachalot_settings["CACHALOT_TIMEOUT"] == 7200
-        assert caches["read-cache"]["LOCATION"] == "redis://localhost:6380/7"
-
-        # Fixed settings
-        assert cachalot_settings["CACHALOT_CACHE"] == "read-cache"
+        assert settings["CACHALOT_ENABLED"]
+        assert settings["CACHALOT_TIMEOUT"] == 7200
+        assert settings["CACHALOT_CACHE"] == "read-cache"
         assert (
-            cachalot_settings["CACHALOT_QUERY_KEYGEN"]
+            settings["CACHALOT_QUERY_KEYGEN"]
             == "paperless.db_cache.custom_get_query_cache_key"
         )
         assert (
-            cachalot_settings["CACHALOT_TABLE_KEYGEN"]
+            settings["CACHALOT_TABLE_KEYGEN"]
             == "paperless.db_cache.custom_get_table_cache_key"
         )
-        assert cachalot_settings["CACHALOT_FINAL_SQL_CHECK"] is True
+        assert settings["CACHALOT_FINAL_SQL_CHECK"] is True
 
     @pytest.mark.parametrize(
         ("env_var_ttl", "expected_cachalot_timeout"),