同步操作将从 Gitee 极速下载/FastAPI 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import functoolsimport refrom dataclasses import is_dataclassfrom enum import Enumfrom typing import Any, Dict, Optional, Set, Type, Union, castimport fastapifrom fastapi.datastructures import DefaultPlaceholder, DefaultTypefrom fastapi.openapi.constants import REF_PREFIXfrom pydantic import BaseConfig, BaseModel, create_modelfrom pydantic.class_validators import Validatorfrom pydantic.fields import FieldInfo, ModelField, UndefinedTypefrom pydantic.schema import model_process_schemafrom pydantic.utils import lenient_issubclassdef get_model_definitions(*,flat_models: Set[Union[Type[BaseModel], Type[Enum]]],model_name_map: Dict[Union[Type[BaseModel], Type[Enum]], str],) -> Dict[str, Any]:definitions: Dict[str, Dict[str, Any]] = {}for model in flat_models:m_schema, m_definitions, m_nested_models = model_process_schema(model, model_name_map=model_name_map, ref_prefix=REF_PREFIX)definitions.update(m_definitions)model_name = model_name_map[model]definitions[model_name] = m_schemareturn definitionsdef get_path_param_names(path: str) -> Set[str]:return set(re.findall("{(.*?)}", path))def create_response_field(name: str,type_: Type[Any],class_validators: Optional[Dict[str, Validator]] = None,default: Optional[Any] = None,required: Union[bool, UndefinedType] = False,model_config: Type[BaseConfig] = BaseConfig,field_info: Optional[FieldInfo] = None,alias: Optional[str] = None,) -> ModelField:"""Create a new response field. Raises if type_ is invalid."""class_validators = class_validators or {}field_info = field_info or FieldInfo(None)response_field = functools.partial(ModelField,name=name,type_=type_,class_validators=class_validators,default=default,required=required,model_config=model_config,alias=alias,)try:return response_field(field_info=field_info)except RuntimeError:raise fastapi.exceptions.FastAPIError(f"Invalid args for response field! Hint: check that {type_} is a valid pydantic field type")def create_cloned_field(field: ModelField,*,cloned_types: Optional[Dict[Type[BaseModel], Type[BaseModel]]] = None,) -> ModelField:# _cloned_types has already cloned types, to support recursive modelsif cloned_types is None:cloned_types = dict()original_type = field.type_if is_dataclass(original_type) and hasattr(original_type, "__pydantic_model__"):original_type = original_type.__pydantic_model__use_type = original_typeif lenient_issubclass(original_type, BaseModel):original_type = cast(Type[BaseModel], original_type)use_type = cloned_types.get(original_type)if use_type is None:use_type = create_model(original_type.__name__, __base__=original_type)cloned_types[original_type] = use_typefor f in original_type.__fields__.values():use_type.__fields__[f.name] = create_cloned_field(f, cloned_types=cloned_types)new_field = create_response_field(name=field.name, type_=use_type)new_field.has_alias = field.has_aliasnew_field.alias = field.aliasnew_field.class_validators = field.class_validatorsnew_field.default = field.defaultnew_field.required = field.requirednew_field.model_config = field.model_confignew_field.field_info = field.field_infonew_field.allow_none = field.allow_nonenew_field.validate_always = field.validate_alwaysif field.sub_fields:new_field.sub_fields = [create_cloned_field(sub_field, cloned_types=cloned_types)for sub_field in field.sub_fields]if field.key_field:new_field.key_field = create_cloned_field(field.key_field, cloned_types=cloned_types)new_field.validators = field.validatorsnew_field.pre_validators = field.pre_validatorsnew_field.post_validators = field.post_validatorsnew_field.parse_json = field.parse_jsonnew_field.shape = field.shapenew_field.populate_validators()return new_fielddef generate_operation_id_for_path(*, name: str, path: str, method: str) -> str:operation_id = name + pathoperation_id = re.sub("[^0-9a-zA-Z_]", "_", operation_id)operation_id = operation_id + "_" + method.lower()return operation_iddef deep_dict_update(main_dict: Dict[Any, Any], update_dict: Dict[Any, Any]) -> None:for key in update_dict:if (key in main_dictand isinstance(main_dict[key], dict)and isinstance(update_dict[key], dict)):deep_dict_update(main_dict[key], update_dict[key])else:main_dict[key] = update_dict[key]def get_value_or_default(first_item: Union[DefaultPlaceholder, DefaultType],*extra_items: Union[DefaultPlaceholder, DefaultType],) -> Union[DefaultPlaceholder, DefaultType]:"""Pass items or `DefaultPlaceholder`s by descending priority.The first one to _not_ be a `DefaultPlaceholder` will be returned.Otherwise, the first item (a `DefaultPlaceholder`) will be returned."""items = (first_item,) + extra_itemsfor item in items:if not isinstance(item, DefaultPlaceholder):return itemreturn first_item
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。