Browse Source

update for pre-3.14 UnionType

pull/9837/head
JONEMI21 6 months ago
parent
commit
fec0122010
  1. 6
      fastapi/_compat/v2.py
  2. 4
      tests/test_request_params/test_query/test_free_form.py

6
fastapi/_compat/v2.py

@ -585,10 +585,10 @@ if shared.PYDANTIC_VERSION_MINOR_TUPLE >= (2, 6):
# Omit by default for scalar mapping and scalar sequence mapping annotations # Omit by default for scalar mapping and scalar sequence mapping annotations
# added in Pydantic v2.6 https://github.com/pydantic/pydantic/releases/tag/v2.6.0 # added in Pydantic v2.6 https://github.com/pydantic/pydantic/releases/tag/v2.6.0
def _omit_by_default(annotation: Any) -> Any: def _omit_by_default(annotation: Any) -> Any:
origin = getattr(annotation, "__origin__", None) origin = get_origin(annotation)
args = getattr(annotation, "__args__", ()) args = get_args(annotation)
if origin is Union: if origin is Union or origin is UnionType:
new_args = tuple(_omit_by_default(arg) for arg in args) new_args = tuple(_omit_by_default(arg) for arg in args)
return Union[new_args] return Union[new_args]
elif origin is list: elif origin is list:

4
tests/test_request_params/test_query/test_free_form.py

@ -1,4 +1,4 @@
from typing import Annotated from typing import Annotated, Union
import pytest import pytest
from dirty_equals import IsOneOf from dirty_equals import IsOneOf
@ -82,7 +82,7 @@ def test_required_dict_str(path: str):
@app.get("/required-dict-union") @app.get("/required-dict-union")
async def read_required_dict_union( async def read_required_dict_union(
p: Annotated[dict[str, str] | dict[str, int], Query()], p: Annotated[Union[dict[str, str], dict[str, int]], Query()],
): ):
return {"p": p} return {"p": p}

Loading…
Cancel
Save