Coverage for fastblocks / adapters / admin / sqladmin.py: 67%
36 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-11-26 03:58 -0800
« prev ^ index » next coverage.py v7.12.0, created at 2025-11-26 03:58 -0800
1"""SQLAdmin Adapter for FastBlocks.
3Provides administrative interface using SQLAdmin for database model management.
4Includes automatic model discovery and registration with template integration.
6Author: lesleslie <les@wedgwoodwebworks.com>
7Created: 2025-01-12
8"""
10import typing as t
11from contextlib import suppress
12from uuid import UUID
14from acb.adapters import AdapterStatus
15from acb.depends import Inject, depends
16from starlette.applications import Starlette
17from fastblocks.applications import FastBlocks
19from ._base import AdminBase, AdminBaseSettings
21Auth = None
22Storage = None
23Models = None
24Sql = None
25Templates = None
28class AdminSettings(AdminBaseSettings): ...
31class Admin(AdminBase):
32 @depends.inject
33 def __init__(
34 self,
35 templates: Inject[t.Any],
36 app: Starlette | None = None,
37 **kwargs: t.Any,
38 ) -> None:
39 super().__init__()
40 from sqladmin import Admin as SqlAdminBase
42 if app is None:
43 app = FastBlocks()
45 self._sqladmin = SqlAdminBase(app=app, **kwargs)
46 self.templates = templates.admin
48 def __getattr__(self, name: str) -> t.Any:
49 return getattr(self._sqladmin, name)
51 async def init(self) -> None:
52 with suppress(Exception):
53 models = await depends.get("models")
54 if hasattr(models, "get_admin_models"):
55 admin_models = models.get_admin_models()
56 for model in admin_models:
57 self._sqladmin.add_view(model)
60MODULE_ID = UUID("01937d86-7f5d-7e6f-b120-4567890123de")
61MODULE_STATUS = AdapterStatus.STABLE
63with suppress(Exception):
64 depends.set(Admin, "sqladmin")