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)