diff --git a/fastapi/_compat/shared.py b/fastapi/_compat/shared.py index 19438d08e..4568b6307 100644 --- a/fastapi/_compat/shared.py +++ b/fastapi/_compat/shared.py @@ -140,7 +140,16 @@ def is_v1_field_info(field_info: Any) -> bool: # shim _v1_params classes if _v1_params is not None: - for name in ("Param", "Body", "Form", "File", "Query", "Path", "Header", "Cookie"): + for name in ( + "Param", + "Body", + "Form", + "File", + "Query", + "Path", + "Header", + "Cookie", + ): cls = getattr(_v1_params, name, None) if cls and isinstance(field_info, cls): return True diff --git a/fastapi/_compat/v1.py b/fastapi/_compat/v1.py index e96efef17..124bb786e 100644 --- a/fastapi/_compat/v1.py +++ b/fastapi/_compat/v1.py @@ -33,9 +33,11 @@ except Exception: # pydantic v1: usar o erro mais próximo semanticamente from pydantic.errors import ConfigError as _PSGE except Exception: + class _PSGE(Exception): # fallback defensivo (não deve acontecer) pass + PydanticSchemaGenerationError = _PSGE _pv1 = None diff --git a/fastapi/utils.py b/fastapi/utils.py index 5871a464b..506399ea5 100644 --- a/fastapi/utils.py +++ b/fastapi/utils.py @@ -111,9 +111,11 @@ def create_model_field( # Detect v1 context from fastapi._compat.shared import is_v1_field_info - is_v1_model = annotation_is_pydantic_v1(type_) or lenient_issubclass(type_, _get_v1().BaseModel) + is_v1_model = annotation_is_pydantic_v1(type_) or lenient_issubclass( + type_, _get_v1().BaseModel + ) is_v1_field = is_v1_field_info(field_info) - is_forced_v1 = (version == "1") + is_forced_v1 = version == "1" # Route to appropriate ModelField if is_v1_model or is_v1_field or is_forced_v1: @@ -128,6 +130,7 @@ def create_model_field( if PYDANTIC_V2: from ._compat import v2 + try: return v2.ModelField(**v2_kwargs) # type: ignore[return-value] except PydanticSchemaGenerationError: