Browse Source

Use eval_type_lenient instead of try_eval_type for older Pydantic version

pull/15307/head
Dima Bulavenko 3 months ago
parent
commit
bd652a3649
  1. 2
      fastapi/_compat/__init__.py
  2. 6
      fastapi/_compat/v2.py
  3. 8
      fastapi/dependencies/utils.py

2
fastapi/_compat/__init__.py

@ -26,7 +26,7 @@ from .v2 import Undefined as Undefined
from .v2 import Url as Url from .v2 import Url as Url
from .v2 import copy_field_info as copy_field_info from .v2 import copy_field_info as copy_field_info
from .v2 import create_body_model as create_body_model from .v2 import create_body_model as create_body_model
from .v2 import evaluate_forwardref as evaluate_forwardref from .v2 import evaluate_forwardref as evaluate_forwardref # ty: ignore[deprecated]
from .v2 import get_cached_model_fields as get_cached_model_fields from .v2 import get_cached_model_fields as get_cached_model_fields
from .v2 import get_definitions as get_definitions from .v2 import get_definitions as get_definitions
from .v2 import get_flat_models_from_fields as get_flat_models_from_fields from .v2 import get_flat_models_from_fields as get_flat_models_from_fields

6
fastapi/_compat/v2.py

@ -25,9 +25,7 @@ from pydantic import ValidationError as ValidationError
from pydantic._internal._schema_generation_shared import ( # type: ignore[attr-defined] # ty: ignore[unused-ignore-comment] from pydantic._internal._schema_generation_shared import ( # type: ignore[attr-defined] # ty: ignore[unused-ignore-comment]
GetJsonSchemaHandler as GetJsonSchemaHandler, GetJsonSchemaHandler as GetJsonSchemaHandler,
) )
from pydantic._internal._typing_extra import ( from pydantic._internal._typing_extra import eval_type_lenient # ty: ignore[deprecated]
try_eval_type, # ty: ignore[deprecated]
)
from pydantic.fields import FieldInfo as FieldInfo from pydantic.fields import FieldInfo as FieldInfo
from pydantic.json_schema import GenerateJsonSchema as _GenerateJsonSchema from pydantic.json_schema import GenerateJsonSchema as _GenerateJsonSchema
from pydantic.json_schema import JsonSchemaValue as JsonSchemaValue from pydantic.json_schema import JsonSchemaValue as JsonSchemaValue
@ -40,7 +38,7 @@ from pydantic_core.core_schema import (
RequiredParam = PydanticUndefined RequiredParam = PydanticUndefined
Undefined = PydanticUndefined Undefined = PydanticUndefined
evaluate_forwardref = try_eval_type evaluate_forwardref = eval_type_lenient # ty: ignore[deprecated]
class GenerateJsonSchema(_GenerateJsonSchema): class GenerateJsonSchema(_GenerateJsonSchema):

8
fastapi/dependencies/utils.py

@ -33,7 +33,7 @@ from fastapi._compat import (
Undefined, Undefined,
copy_field_info, copy_field_info,
create_body_model, create_body_model,
evaluate_forwardref, evaluate_forwardref, # ty: ignore[deprecated]
field_annotation_is_scalar, field_annotation_is_scalar,
field_annotation_is_scalar_sequence, field_annotation_is_scalar_sequence,
field_annotation_is_sequence, field_annotation_is_sequence,
@ -246,8 +246,10 @@ def get_typed_annotation(annotation: Any, globalns: dict[str, Any]) -> Any:
if isinstance(annotation, str): if isinstance(annotation, str):
annotation = ForwardRef(annotation) annotation = ForwardRef(annotation)
if isinstance(annotation, ForwardRef): if isinstance(annotation, ForwardRef):
annotation, is_evaluated = evaluate_forwardref(annotation, globalns, globalns) # ty: ignore[deprecated] annotation = evaluate_forwardref(annotation, globalns, globalns) # ty: ignore[deprecated]
if not is_evaluated: # eval_type_lenient returns the ForwardRef unchanged when resolution
# fails, so a ForwardRef result means the type could not be resolved.
if isinstance(annotation, ForwardRef):
raise NameError( raise NameError(
f"Could not resolve annotation {annotation.__forward_arg__!r}. " f"Could not resolve annotation {annotation.__forward_arg__!r}. "
f"Make sure the type is defined or imported before it is used " f"Make sure the type is defined or imported before it is used "

Loading…
Cancel
Save