feat: Implement environment variable fallback for configuration settings
This commit is contained in:
@@ -15,6 +15,15 @@ def _parse_csv_env(name: str) -> tuple[str, ...]:
|
||||
return tuple(item.strip().lower() for item in raw_value.split(",") if item.strip())
|
||||
|
||||
|
||||
def _env_or_default(name: str, default: str) -> str:
|
||||
raw_value = os.getenv(name)
|
||||
if raw_value is None:
|
||||
return default
|
||||
|
||||
normalized = raw_value.strip()
|
||||
return normalized or default
|
||||
|
||||
|
||||
class BaseConfig:
|
||||
"""Base configuration."""
|
||||
SECRET_KEY = os.getenv("SECRET_KEY", "change-me-in-production")
|
||||
@@ -25,10 +34,10 @@ class BaseConfig:
|
||||
MAX_CONTENT_LENGTH = int(
|
||||
os.getenv("ABSOLUTE_MAX_CONTENT_LENGTH_MB", 100)
|
||||
) * 1024 * 1024
|
||||
UPLOAD_FOLDER = os.getenv("UPLOAD_FOLDER", "/tmp/uploads")
|
||||
OUTPUT_FOLDER = os.getenv("OUTPUT_FOLDER", "/tmp/outputs")
|
||||
UPLOAD_FOLDER = _env_or_default("UPLOAD_FOLDER", "/tmp/uploads")
|
||||
OUTPUT_FOLDER = _env_or_default("OUTPUT_FOLDER", "/tmp/outputs")
|
||||
FILE_EXPIRY_SECONDS = int(os.getenv("FILE_EXPIRY_SECONDS", 1800))
|
||||
DATABASE_PATH = os.getenv(
|
||||
DATABASE_PATH = _env_or_default(
|
||||
"DATABASE_PATH", os.path.join(BASE_DIR, "data", "dociva.db")
|
||||
)
|
||||
PERMANENT_SESSION_LIFETIME = timedelta(days=30)
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
"""Tests for GET /api/config — dynamic upload limits."""
|
||||
import importlib
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@@ -51,3 +54,22 @@ class TestConfigEndpoint:
|
||||
data = resp.get_json()
|
||||
limits = data["file_limits_mb"]
|
||||
assert data["max_upload_mb"] == max(limits.values())
|
||||
|
||||
|
||||
class TestConfigEnvironmentFallbacks:
|
||||
"""Tests for environment values that should not accept blank strings."""
|
||||
|
||||
def test_blank_database_path_falls_back_to_default(self, monkeypatch):
|
||||
"""A blank DATABASE_PATH must not create a temporary per-connection SQLite DB."""
|
||||
monkeypatch.setenv("DATABASE_PATH", "")
|
||||
|
||||
import config as config_module
|
||||
|
||||
reloaded = importlib.reload(config_module)
|
||||
try:
|
||||
expected = os.path.join(reloaded.BASE_DIR, "data", "dociva.db")
|
||||
assert reloaded.BaseConfig.DATABASE_PATH == expected
|
||||
assert reloaded.ProductionConfig.DATABASE_PATH == expected
|
||||
finally:
|
||||
monkeypatch.delenv("DATABASE_PATH", raising=False)
|
||||
importlib.reload(config_module)
|
||||
|
||||
Reference in New Issue
Block a user