Coverage for src/fastoai/routers/_utils.py: 86%
7 statements
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-06 09:34 +0800
« prev ^ index » next coverage.py v7.6.8, created at 2024-12-06 09:34 +0800
1from typing import Any, get_type_hints
3from pydantic import BaseModel, create_model
4from typing_extensions import is_typeddict
7def create_model_from(type_: Any) -> type[BaseModel]:
8 if not is_typeddict(type_):
9 raise ValueError(f"Expected TypedDict, got {type_}")
10 return create_model(
11 type_.__name__,
12 __config__=None,
13 __doc__=None,
14 __base__=None,
15 __module__=__name__,
16 __validators__=None,
17 __cls_kwargs__=None,
18 **{
19 fn: (t, ... if fn in type_.__required_keys__ else None)
20 for fn, t in get_type_hints(type_, include_extras=True).items()
21 },
22 )