mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-04 03:27:12 -05:00 
			
		
		
		
	Fix: prevent duplicate cachalot app in Django settings (#10300)
--------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									f3b6e15321
								
							
						
					
					
						commit
						733a9674d6
					
				@ -918,7 +918,6 @@ CELERY_BEAT_SCHEDULE_FILENAME = str(DATA_DIR / "celerybeat-schedule.db")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Cachalot: Database read cache.
 | 
					# Cachalot: Database read cache.
 | 
				
			||||||
def _parse_cachalot_settings():
 | 
					def _parse_cachalot_settings():
 | 
				
			||||||
    global INSTALLED_APPS
 | 
					 | 
				
			||||||
    ttl = __get_int("PAPERLESS_READ_CACHE_TTL", 3600)
 | 
					    ttl = __get_int("PAPERLESS_READ_CACHE_TTL", 3600)
 | 
				
			||||||
    ttl = min(ttl, 31536000) if ttl > 0 else 3600
 | 
					    ttl = min(ttl, 31536000) if ttl > 0 else 3600
 | 
				
			||||||
    _, redis_url = _parse_redis_url(
 | 
					    _, redis_url = _parse_redis_url(
 | 
				
			||||||
@ -936,18 +935,18 @@ def _parse_cachalot_settings():
 | 
				
			|||||||
        "CACHALOT_REDIS_URL": redis_url,
 | 
					        "CACHALOT_REDIS_URL": redis_url,
 | 
				
			||||||
        "CACHALOT_TIMEOUT": ttl,
 | 
					        "CACHALOT_TIMEOUT": ttl,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if result["CACHALOT_ENABLED"]:
 | 
					 | 
				
			||||||
        INSTALLED_APPS.append("cachalot")
 | 
					 | 
				
			||||||
    return result
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_cachalot_settings = _parse_cachalot_settings()
 | 
					cachalot_settings = _parse_cachalot_settings()
 | 
				
			||||||
CACHALOT_ENABLED = _cachalot_settings["CACHALOT_ENABLED"]
 | 
					CACHALOT_ENABLED = cachalot_settings["CACHALOT_ENABLED"]
 | 
				
			||||||
CACHALOT_CACHE = _cachalot_settings["CACHALOT_CACHE"]
 | 
					if CACHALOT_ENABLED:  # pragma: no cover
 | 
				
			||||||
CACHALOT_TIMEOUT = _cachalot_settings["CACHALOT_TIMEOUT"]
 | 
					    INSTALLED_APPS.append("cachalot")
 | 
				
			||||||
CACHALOT_QUERY_KEYGEN = _cachalot_settings["CACHALOT_QUERY_KEYGEN"]
 | 
					CACHALOT_CACHE = cachalot_settings["CACHALOT_CACHE"]
 | 
				
			||||||
CACHALOT_TABLE_KEYGEN = _cachalot_settings["CACHALOT_TABLE_KEYGEN"]
 | 
					CACHALOT_TIMEOUT = cachalot_settings["CACHALOT_TIMEOUT"]
 | 
				
			||||||
CACHALOT_FINAL_SQL_CHECK = _cachalot_settings["CACHALOT_FINAL_SQL_CHECK"]
 | 
					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
 | 
					# Django default & Cachalot cache configuration
 | 
				
			||||||
@ -968,7 +967,7 @@ def _parse_caches():
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
        "read-cache": {
 | 
					        "read-cache": {
 | 
				
			||||||
            "BACKEND": _CACHE_BACKEND,
 | 
					            "BACKEND": _CACHE_BACKEND,
 | 
				
			||||||
            "LOCATION": _parse_cachalot_settings()["CACHALOT_REDIS_URL"],
 | 
					            "LOCATION": cachalot_settings["CACHALOT_REDIS_URL"],
 | 
				
			||||||
            "KEY_PREFIX": _REDIS_KEY_PREFIX,
 | 
					            "KEY_PREFIX": _REDIS_KEY_PREFIX,
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -977,9 +976,6 @@ def _parse_caches():
 | 
				
			|||||||
CACHES = _parse_caches()
 | 
					CACHES = _parse_caches()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
del _cachalot_settings
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def default_threads_per_worker(task_workers) -> int:
 | 
					def default_threads_per_worker(task_workers) -> int:
 | 
				
			||||||
    # always leave one core open
 | 
					    # always leave one core open
 | 
				
			||||||
    available_cores = max(multiprocessing.cpu_count(), 1)
 | 
					    available_cores = max(multiprocessing.cpu_count(), 1)
 | 
				
			||||||
 | 
				
			|||||||
@ -63,26 +63,20 @@ class TestDbCacheSettings:
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    def test_cachalot_custom_settings(self):
 | 
					    def test_cachalot_custom_settings(self):
 | 
				
			||||||
        cachalot_settings = _parse_cachalot_settings()
 | 
					        settings = _parse_cachalot_settings()
 | 
				
			||||||
        assert "cachalot" in settings.INSTALLED_APPS
 | 
					 | 
				
			||||||
        caches = _parse_caches()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Modifiable settings
 | 
					        assert settings["CACHALOT_ENABLED"]
 | 
				
			||||||
        assert cachalot_settings["CACHALOT_ENABLED"]
 | 
					        assert settings["CACHALOT_TIMEOUT"] == 7200
 | 
				
			||||||
        assert cachalot_settings["CACHALOT_TIMEOUT"] == 7200
 | 
					        assert settings["CACHALOT_CACHE"] == "read-cache"
 | 
				
			||||||
        assert caches["read-cache"]["LOCATION"] == "redis://localhost:6380/7"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Fixed settings
 | 
					 | 
				
			||||||
        assert cachalot_settings["CACHALOT_CACHE"] == "read-cache"
 | 
					 | 
				
			||||||
        assert (
 | 
					        assert (
 | 
				
			||||||
            cachalot_settings["CACHALOT_QUERY_KEYGEN"]
 | 
					            settings["CACHALOT_QUERY_KEYGEN"]
 | 
				
			||||||
            == "paperless.db_cache.custom_get_query_cache_key"
 | 
					            == "paperless.db_cache.custom_get_query_cache_key"
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        assert (
 | 
					        assert (
 | 
				
			||||||
            cachalot_settings["CACHALOT_TABLE_KEYGEN"]
 | 
					            settings["CACHALOT_TABLE_KEYGEN"]
 | 
				
			||||||
            == "paperless.db_cache.custom_get_table_cache_key"
 | 
					            == "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(
 | 
					    @pytest.mark.parametrize(
 | 
				
			||||||
        ("env_var_ttl", "expected_cachalot_timeout"),
 | 
					        ("env_var_ttl", "expected_cachalot_timeout"),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user