Source code for stdlibx.config._lib

 1from __future__ import annotations
 2
 3from typing import (
 4    TYPE_CHECKING,
 5    Any,
 6    Callable,
 7    Mapping,
 8    Protocol,
 9    TypeVar,
10    runtime_checkable,
11)
12
13if TYPE_CHECKING:
14    from stdlibx.config._types import Loader
15
16T = TypeVar("T", covariant=True)
17
18
19@runtime_checkable
20class _PydanticValidator(Protocol[T]):
21    def model_validate(self, obj: Any, *, from_attributes: bool) -> T: ...
22
23
[docs] 24def load_config( 25 validator: _PydanticValidator[T] | Callable[[Mapping[str, Any]], T], 26 loaders: list[Loader], 27) -> T: 28 _ret = {key: val for loader in loaders for key, val in loader.load().items()} 29 if isinstance(validator, _PydanticValidator): 30 return validator.model_validate(_ret, from_attributes=False) 31 return validator(_ret)