Coverage for src/lexigram/auth/di/sub_providers/admin_provider.py: 93%
30 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 00:58 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-26 00:58 +0800
1"""Admin DI provider: registers AuthAdminContributor."""
3from __future__ import annotations
5from typing import TYPE_CHECKING
7from lexigram.contracts.core.provider import ProviderPriority
8from lexigram.di.provider import Provider
9from lexigram.logging import get_logger
11if TYPE_CHECKING:
12 from lexigram.auth.config import AuthConfig
13 from lexigram.contracts.core.di import (
14 ContainerRegistrarProtocol,
15 ContainerResolverProtocol,
16 )
18__all__ = ["AuthAdminProvider"]
20logger = get_logger(__name__)
23class AuthAdminProvider(Provider):
24 """Registers AuthAdminContributor for admin panel integration.
26 Args:
27 config: Auth configuration.
28 """
30 def __init__(self, config: AuthConfig | None = None) -> None:
31 super().__init__(name="auth_admin", priority=ProviderPriority.LOW)
32 self._config = config
34 async def register(self, container: ContainerRegistrarProtocol) -> None:
35 """Bind admin contributor singleton."""
36 from lexigram.auth.admin.contributor import AuthAdminContributor
37 from lexigram.auth.admin.handlers.active_sessions import (
38 ActiveSessionsWidgetHandler,
39 )
40 from lexigram.auth.admin.handlers.failed_logins import (
41 FailedLoginsWidgetHandler,
42 )
43 from lexigram.auth.admin.handlers.token_refresh_rate import (
44 TokenRefreshRateWidgetHandler,
45 )
46 from lexigram.auth.services.activity_tracker import AuthActivityTracker
48 container.singleton(AuthActivityTracker, AuthActivityTracker)
49 container.transient(
50 ActiveSessionsWidgetHandler,
51 ActiveSessionsWidgetHandler,
52 )
53 container.transient(
54 FailedLoginsWidgetHandler,
55 FailedLoginsWidgetHandler,
56 )
57 container.transient(
58 TokenRefreshRateWidgetHandler,
59 TokenRefreshRateWidgetHandler,
60 )
61 container.singleton(AuthAdminContributor, AuthAdminContributor)
63 async def boot(self, container: ContainerResolverProtocol) -> None:
64 """Boot the auth admin contributor."""
65 from lexigram.auth.admin.contributor import AuthAdminContributor
67 try:
68 contributor = await container.resolve(AuthAdminContributor)
69 await contributor.on_admin_boot(container)
70 logger.info("auth_admin_contributor.booted")
71 except Exception as e: # noqa: BLE001
72 logger.warning(
73 "auth_admin_contributor.boot_failed",
74 error=str(e),
75 )