Coverage for src/lexigram/admin/lib/di.py: 0%
12 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:18 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-24 23:18 +0800
1"""Dependency Injection utilities for lexigram-admin."""
3from __future__ import annotations
5from typing import TYPE_CHECKING, Any, TypeVar
7if TYPE_CHECKING:
8 from lexigram.contracts.core.di import ContainerResolverProtocol
10T = TypeVar("T")
13def get_admin_resolver(context: Any | None = None) -> ContainerResolverProtocol:
14 """Resolve the current DI resolver for the admin session.
16 Prefers the provided context, then falls back to internal contextvars
17 if available via contracts.
18 """
19 from lexigram.di.resolution.context import get_resolver
21 # 1. Check provided context
22 resolver = get_resolver(context)
23 if resolver:
24 return resolver
26 # 2. Last resort - trigger an error if we can't find anything
27 # Ensure the resolver is passed explicitly or available in the request state.
28 raise RuntimeError(
29 "Could not find a DI resolver in the current admin context. "
30 "Ensure the resolver is passed explicitly or available in the request state.",
31 )
34async def resolve_admin_service(
35 service_type: type[T] | str, context: Any | None = None
36) -> T:
37 """Resolve a service from the admin resolver."""
38 resolver = get_admin_resolver(context)
39 return await resolver.resolve(service_type)