From bad4e8dd1b889cdb0f3c20e8990556c97daaf0b7 Mon Sep 17 00:00:00 2001 From: ahtlon Date: Fri, 31 Jul 2026 01:50:08 +0200 Subject: [PATCH] [settings] rework settings --- app/services/settings.py | 47 ++++++++++++++++++++++++++++++---------- test/conftest.py | 13 +++++++++-- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/app/services/settings.py b/app/services/settings.py index 85a31c2..5f84f88 100644 --- a/app/services/settings.py +++ b/app/services/settings.py @@ -1,29 +1,52 @@ import logging import os +from functools import lru_cache logger = logging.getLogger(__name__) -def verify_settings(): - card_envs = [ +@lru_cache(1) +def disable_cards_check(): + if os.environ.get("DISABLE_CARDS", "").lower() in ("1", "true"): + return True + + for env in ( "MIFARE_APP_MASTER_KEY", "MIFARE_ACL_READ_BASE_KEY", "MIFARE_ACL_WRITE_BASE_KEY", - ] - important_envs = ["SECRET_KEY"] - other_envs = ["SQLALCHEMY_DATABASE_PATH"] - for setting in card_envs: - if (setting not in os.environ or setting == "") and not os.getenv( - "DISABLE_CARDS" - ): - raise ValueError( - f"Missing environment variable for scanner start: {setting} \n Run with DISABLE_CARDS env var to disable cards" # noqa: E501 + ): + if not os.getenv(env): + logger.critical( + f"Missing environment variable for scanner start: {env} \n Card scanner and related funcionality is disabled!" # noqa: E501 ) + return True + return False + + +disable_cards = disable_cards_check() + +if not disable_cards: + mifare_app_master_key = os.getenv("MIFARE_APP_MASTER_KEY") + mifare_acl_read_base_key = os.getenv("MIFARE_ACL_READ_BASE_KEY") + mifare_acl_write_base_key = os.getenv("MIFARE_ACL_WRITE_BASE_KEY") + + +def verify_settings(): + important_envs = ["SECRET_KEY"] + other_envs = ["SQLALCHEMY_DATABASE_PATH", "LOCK_PIN", "UNLOCK_PIN", "MOCK_GPIO"] for setting in important_envs: - if setting not in os.environ or setting == "": + if not os.getenv(setting): raise ValueError( f"Missing critical environment variable {setting}. Stopping..." ) for setting in other_envs: if setting not in os.environ: logger.warning(f"Env var {setting} not set. Continuing with defaults.") + + +verify_settings() +secret_key = os.getenv("SECRET_KEY") +sqlalchemy_database_path = os.getenv("SQLALCHEMY_DATABASE_PATH") +lock_pin = os.getenv("LOCK_PIN") +unlock_pin = os.getenv("UNLOCK_PIN") +mock_gpio = os.getenv("MOCK_GPIO") diff --git a/test/conftest.py b/test/conftest.py index 1a4bf40..92ce9f9 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -5,7 +5,6 @@ from fastapi.testclient import TestClient from sqlalchemy.pool import StaticPool from sqlmodel import Session, SQLModel, create_engine -from app.main import app from app.model.models import ( AccessAuthorizationDB, Card, @@ -25,6 +24,16 @@ engine = create_engine( ) +@pytest.fixture +def app(): + import os + + os.environ["SECRET_KEY"] = "ff" * 16 + from app.main import app + + return app + + @pytest.fixture(scope="function") def db_session(): """Create a fresh database session for each test.""" @@ -35,7 +44,7 @@ def db_session(): @pytest.fixture(scope="function") -def client(db_session): +def client(app, db_session): """Create a test client with a database session override.""" def override_get_session():