Coverage for src / lexigram / admin / module.py: 62%
16 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-13 22:14 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-13 22:14 +0800
1"""Admin module for dependency injection."""
3from __future__ import annotations
5from typing import Any
7from lexigram.di.module import DynamicModule, Module, module
10@module()
11class AdminModule(Module):
12 """Lexigram admin panel module.
14 Call :meth:`configure` to register the admin panel with its bundle
15 provider and contributor system.
17 Usage::
19 from lexigram.admin.config import AdminConfig
21 app.add_modules([
22 AdminModule.configure(
23 config=AdminConfig(title="My Admin"),
24 resources=[UserResource, ProductResource],
25 ),
26 ])
27 """
29 @classmethod
30 def configure(
31 cls,
32 config: Any | None = None,
33 auth_provider: Any | None = None,
34 resources: list[type] | None = None,
35 controllers: list[type] | None = None,
36 **kwargs: Any,
37 ) -> DynamicModule:
38 """Create an AdminModule with explicit configuration.
40 Args:
41 config: AdminConfig or None for defaults.
42 auth_provider: Optional AuthProviderProtocol for auth integration.
43 resources: List of Resource classes to register.
44 controllers: List of controller classes to register.
45 **kwargs: Forwarded to AdminProvider.
47 Returns:
48 A DynamicModule descriptor.
49 """
50 from lexigram.admin.di.bundle_provider import AdminProvider
51 from lexigram.contracts.admin.protocols import (
52 AdminContributorRegistryProtocol,
53 AdminDashboardProtocol,
54 )
56 return DynamicModule(
57 module=cls,
58 providers=[
59 AdminProvider(
60 config=config,
61 auth_provider=auth_provider,
62 resources=resources,
63 controllers=controllers,
64 **kwargs,
65 ),
66 ],
67 exports=[AdminContributorRegistryProtocol, AdminDashboardProtocol],
68 )
70 @classmethod
71 def stub(cls, config: Any = None) -> DynamicModule:
72 """Return a no-op AdminModule for testing.
74 Returns:
75 A DynamicModule with default admin configuration.
76 """
77 from lexigram.admin.di.bundle_provider import AdminProvider
78 from lexigram.contracts.admin.protocols import (
79 AdminContributorRegistryProtocol,
80 AdminDashboardProtocol,
81 )
83 return DynamicModule(
84 module=cls,
85 providers=[AdminProvider()],
86 exports=[AdminContributorRegistryProtocol, AdminDashboardProtocol],
87 )
90__all__ = ["AdminModule"]