def create_schema( self, model: Type[Model], *, name: str = "", depth: int = 0, fields: Optional[List[str]] = None, exclude: Optional[List[str]] = None, ) -> Type[Schema]: name = name or model.__name__ if fields and exclude: raise ConfigError( "Only one of 'include' or 'exclude' should be set.") key = self.get_key(model, name, depth, fields, exclude) if key in self.schemas: return self.schemas[key] definitions = {} for fld in self._selected_model_fields(model, fields, exclude): python_type, field_info = get_schema_field(fld, depth=depth) definitions[fld.name] = (python_type, field_info) schema = cast( Type[Schema], create_pydantic_model(name, __base__=Schema, **definitions), # type: ignore ) self.schemas[key] = schema return schema
def create_schema( self, model: Type[Model], *, name: str = "", depth: int = 0, fields: Optional[List[str]] = None, exclude: Optional[List[str]] = None, custom_fields: Optional[List[Tuple[str, Any, Any]]] = None, base_class: Type[Schema] = Schema, ) -> Type[Schema]: name = name or model.__name__ if fields and exclude: raise ConfigError("Only one of 'fields' or 'exclude' should be set.") key = self.get_key(model, name, depth, fields, exclude, custom_fields) if key in self.schemas: return self.schemas[key] definitions = {} for fld in self._selected_model_fields(model, fields, exclude): python_type, field_info = get_schema_field(fld, depth=depth) definitions[fld.name] = (python_type, field_info) if custom_fields: for fld_name, python_type, field_info in custom_fields: definitions[fld_name] = (python_type, field_info) if name in self.schema_names: name = self._get_unique_name(name) schema: Type[Schema] = create_pydantic_model( name, __config__=None, __base__=base_class, __module__=base_class.__module__, __validators__={}, **definitions, ) # type: ignore self.schemas[key] = schema self.schema_names.add(name) return schema