From a944224027e58b50f61d97d9d20d81626146d917 Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Tue, 10 Feb 2026 23:01:02 +0000 Subject: [PATCH] Inline get_config, rewrite update_config, DB init Config and rp_id defaults changed. --- paskia/db/__init__.py | 8 ++++---- paskia/db/operations.py | 24 +++++++----------------- paskia/db/structs.py | 3 +-- paskia/fastapi/__main__.py | 6 +++--- tests/conftest.py | 3 ++- 5 files changed, 17 insertions(+), 27 deletions(-) diff --git a/paskia/db/__init__.py b/paskia/db/__init__.py index be7a287..09637b2 100644 --- a/paskia/db/__init__.py +++ b/paskia/db/__init__.py @@ -47,12 +47,11 @@ from paskia.db.operations import ( delete_session, delete_sessions_for_user, delete_user, - get_config, login, remove_permission_from_org, remove_permission_from_role, - set_config, set_session_host, + update_config, update_credential_sign_count, update_org_name, update_permission, @@ -64,6 +63,7 @@ from paskia.db.operations import ( ) from paskia.db.structs import ( DB, + Config, Credential, Org, Permission, @@ -82,6 +82,7 @@ def data() -> DB: __all__ = [ # Types + "Config", "Credential", "DB", "Org", @@ -107,7 +108,6 @@ __all__ = [ "build_session", "build_user", # Read ops - "get_config", # Write ops "add_permission_to_org", "add_permission_to_role", @@ -132,8 +132,8 @@ __all__ = [ "login", "remove_permission_from_org", "remove_permission_from_role", - "set_config", "set_session_host", + "update_config", "update_credential_sign_count", "update_org_name", "update_permission", diff --git a/paskia/db/operations.py b/paskia/db/operations.py index 0617cfe..3a0f75b 100644 --- a/paskia/db/operations.py +++ b/paskia/db/operations.py @@ -32,7 +32,7 @@ from paskia.db.structs import ( _logger = logging.getLogger(__name__) # Global database instance (empty until init() loads data) -_db = DB() +_db = DB(config=Config(rp_id="uninitialized.invalid")) _store = JsonlStore(_db) _db._store = _store _initialized = False @@ -43,6 +43,12 @@ _initialized = False # ------------------------------------------------------------------------- +async def update_config(config: Config) -> None: + """Update the stored configuration.""" + with _db.transaction("update_config"): + _db.config = config + + def create_permission(perm: Permission, *, ctx: SessionContext | None = None) -> None: """Create a new permission.""" if perm.uuid in _db.permissions: @@ -580,19 +586,3 @@ def create_credential_session( if token: token.delete() return session.key - - -# ------------------------------------------------------------------------- -# Config operations -# ------------------------------------------------------------------------- - - -def get_config() -> Config: - """Get the stored configuration.""" - return _db.config - - -async def set_config(config: Config) -> None: - """Update the stored configuration.""" - with _db.transaction("update_config"): - _db.config = config diff --git a/paskia/db/structs.py b/paskia/db/structs.py index 4f318fc..c1e981b 100644 --- a/paskia/db/structs.py +++ b/paskia/db/structs.py @@ -7,7 +7,6 @@ from uuid import UUID import msgspec import uuid7 -from msgspec import field from paskia import db from paskia.util import hostutil @@ -534,6 +533,7 @@ class Config(msgspec.Struct, frozen=True, dict=True, omit_defaults=True): class DB(msgspec.Struct, dict=True, omit_defaults=False): """In-memory database. Access fields directly for reads.""" + config: Config permissions: dict[UUID, Permission] = {} orgs: dict[UUID, Org] = {} roles: dict[UUID, Role] = {} @@ -541,7 +541,6 @@ class DB(msgspec.Struct, dict=True, omit_defaults=False): credentials: dict[UUID, Credential] = {} sessions: dict[str, Session] = {} reset_tokens: dict[bytes, ResetToken] = {} - config: Config = field(default_factory=lambda: Config(rp_id="localhost")) def __post_init__(self): # Store reference for persistence (not serialized) diff --git a/paskia/fastapi/__main__.py b/paskia/fastapi/__main__.py index b1508be..3443109 100644 --- a/paskia/fastapi/__main__.py +++ b/paskia/fastapi/__main__.py @@ -10,10 +10,10 @@ from uvicorn import Config as UvicornConfig from uvicorn import Server from uvicorn import run as uvicorn_run +from paskia import db from paskia import globals as _globals from paskia.bootstrap import bootstrap_if_needed from paskia.config import PaskiaConfig -from paskia.db import get_config, set_config from paskia.db import init as db_init from paskia.db.background import flush from paskia.db.structs import Config @@ -107,7 +107,7 @@ def main(): # Init db and load stored config asyncio.run(db_init(rp_id=args.rp_id)) - stored_config = get_config() + stored_config = db.data().config # Apply defaults from stored config if args.rp_name is None and stored_config.rp_name is not None: @@ -232,7 +232,7 @@ def main(): await bootstrap_if_needed(config=cli_config) # Also save config if --save was explicitly used (even without bootstrap) if args.save: - await set_config(cli_config) + await db.update_config(cli_config) await flush() if len(endpoints) > 1: diff --git a/tests/conftest.py b/tests/conftest.py index c0493b4..2d881a5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,6 +23,7 @@ import paskia.db.operations as ops_db from paskia import globals as paskia_globals from paskia.authsession import reset_expires from paskia.db import ( + Config, Credential, Org, Permission, @@ -61,7 +62,7 @@ async def test_db() -> AsyncGenerator[DB, None]: """ with tempfile.NamedTemporaryFile(suffix=".jsonl", delete=True) as f: - db = DB() + db = DB(config=Config(rp_id="test.example.com")) store = JsonlStore(db, f.name) db._store = store await store.load()