From 6d1617df7f8e837e2b52c219b8c017c9d4ca2a81 Mon Sep 17 00:00:00 2001 From: merlinz01 <158784988+merlinz01@users.noreply.github.com> Date: Thu, 5 Sep 2024 21:58:36 -0400 Subject: [PATCH] make compatible with Python <3.10 and Pydantic v1 Signed-off-by: merlinz01 <158784988+merlinz01@users.noreply.github.com> --- fastapi/dependencies/utils.py | 22 +++++++++++++++----- tests/test_none_passed_when_null_received.py | 4 ++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index b4f1938b4..2f0b806ec 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -733,11 +733,23 @@ async def solve_dependencies( ) -def _allows_none(field: ModelField) -> bool: - origin = get_origin(field.type_) - return (origin is Union or origin is types.UnionType) and type(None) in get_args( - field.type_ - ) +if PYDANTIC_V2: + if sys.hexversion >= 0x30A00000: + + def _allows_none(field: ModelField) -> bool: + origin = get_origin(field.type_) + return (origin is Union or origin is types.UnionType) and type( + None + ) in get_args(field.type_) + else: + + def _allows_none(field: ModelField) -> bool: + origin = get_origin(field.type_) + return origin is Union and type(None) in get_args(field.type_) +else: + + def _allows_none(field: ModelField) -> bool: + return field.allow_none def _validate_value_with_model_field( diff --git a/tests/test_none_passed_when_null_received.py b/tests/test_none_passed_when_null_received.py index 4d1b3b0a8..51d3991f0 100644 --- a/tests/test_none_passed_when_null_received.py +++ b/tests/test_none_passed_when_null_received.py @@ -10,7 +10,7 @@ DEFAULT = 1234567890 endpoints = [] -if sys.hexversion >= 0x31000000: +if sys.hexversion >= 0x30A0000: from typing import Annotated @app.post("/api1") @@ -22,7 +22,7 @@ if sys.hexversion >= 0x31000000: endpoints.append("/api1") -if sys.hexversion >= 0x30900000: +if sys.hexversion >= 0x3090000: from typing import Annotated @app.post("/api2")