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

1"""SQLAdmin Adapter for FastBlocks. 

2 

3Provides administrative interface using SQLAdmin for database model management. 

4Includes automatic model discovery and registration with template integration. 

5 

6Author: lesleslie <les@wedgwoodwebworks.com> 

7Created: 2025-01-12 

8""" 

9 

10import typing as t 

11from contextlib import suppress 

12from uuid import UUID 

13 

14from acb.adapters import AdapterStatus 

15from acb.depends import Inject, depends 

16from starlette.applications import Starlette 

17from fastblocks.applications import FastBlocks 

18 

19from ._base import AdminBase, AdminBaseSettings 

20 

21Auth = None 

22Storage = None 

23Models = None 

24Sql = None 

25Templates = None 

26 

27 

28class AdminSettings(AdminBaseSettings): ... 

29 

30 

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 

41 

42 if app is None: 

43 app = FastBlocks() 

44 

45 self._sqladmin = SqlAdminBase(app=app, **kwargs) 

46 self.templates = templates.admin 

47 

48 def __getattr__(self, name: str) -> t.Any: 

49 return getattr(self._sqladmin, name) 

50 

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) 

58 

59 

60MODULE_ID = UUID("01937d86-7f5d-7e6f-b120-4567890123de") 

61MODULE_STATUS = AdapterStatus.STABLE 

62 

63with suppress(Exception): 

64 depends.set(Admin, "sqladmin")