Generate core schema for a Pydantic model, dataclass and types like `str`, `datetime`, ... .
| 348 | |
| 349 | |
| 350 | class GenerateSchema: |
| 351 | """Generate core schema for a Pydantic model, dataclass and types like `str`, `datetime`, ... .""" |
| 352 | |
| 353 | __slots__ = ( |
| 354 | '_config_wrapper_stack', |
| 355 | '_ns_resolver', |
| 356 | '_typevars_map', |
| 357 | 'field_name_stack', |
| 358 | 'model_type_stack', |
| 359 | 'defs', |
| 360 | ) |
| 361 | |
| 362 | def __init__( |
| 363 | self, |
| 364 | config_wrapper: ConfigWrapper, |
| 365 | ns_resolver: NsResolver | None = None, |
| 366 | typevars_map: Mapping[TypeVar, Any] | None = None, |
| 367 | ) -> None: |
| 368 | # we need a stack for recursing into nested models |
| 369 | self._config_wrapper_stack = ConfigWrapperStack(config_wrapper) |
| 370 | self._ns_resolver = ns_resolver or NsResolver() |
| 371 | self._typevars_map = typevars_map |
| 372 | self.field_name_stack = _FieldNameStack() |
| 373 | self.model_type_stack = _ModelTypeStack() |
| 374 | self.defs = _Definitions() |
| 375 | |
| 376 | def __init_subclass__(cls) -> None: |
| 377 | super().__init_subclass__() |
| 378 | warnings.warn( |
| 379 | 'Subclassing `GenerateSchema` is not supported. The API is highly subject to change in minor versions.', |
| 380 | UserWarning, |
| 381 | stacklevel=2, |
| 382 | ) |
| 383 | |
| 384 | @property |
| 385 | def _config_wrapper(self) -> ConfigWrapper: |
| 386 | return self._config_wrapper_stack.tail |
| 387 | |
| 388 | @property |
| 389 | def _types_namespace(self) -> NamespacesTuple: |
| 390 | return self._ns_resolver.types_namespace |
| 391 | |
| 392 | @property |
| 393 | def _arbitrary_types(self) -> bool: |
| 394 | return self._config_wrapper.arbitrary_types_allowed |
| 395 | |
| 396 | # the following methods can be overridden but should be considered |
| 397 | # unstable / private APIs |
| 398 | def _list_schema(self, items_type: Any) -> CoreSchema: |
| 399 | return core_schema.list_schema(self.generate_schema(items_type)) |
| 400 | |
| 401 | def _dict_schema(self, keys_type: Any, values_type: Any) -> CoreSchema: |
| 402 | return core_schema.dict_schema(self.generate_schema(keys_type), self.generate_schema(values_type)) |
| 403 | |
| 404 | def _set_schema(self, items_type: Any) -> CoreSchema: |
| 405 | return core_schema.set_schema(self.generate_schema(items_type)) |
| 406 | |
| 407 | def _frozenset_schema(self, items_type: Any) -> CoreSchema: |
no outgoing calls