← baseline_full_v2

fastapi_14430

failed NO_PATCH NO_PATCH UNSUBMITTED empty_patch(None) · None tool calls · 0 s · fastapi/fastapi

Task input

🐛 Fix optional sequence handling with new union syntax from Python 3.10

https://github.com/fastapi/fastapi/pull/14297 is only taking one union type into account. I can only recommend using https://github.com/pydantic/typing-inspection for these kind of checks (see https://typing-inspection.pydantic.dev/latest/usage/ for motivation).

Tool calls (0)

#ToolArgumentsResult
No trace captured.

Test output

show
.s.......F
=================================== FAILURES ===================================
_________ test_serialize_sequence_value_with_optional_list_pipe_union __________

    @needs_pydanticv2
    @needs_py310
    def test_serialize_sequence_value_with_optional_list_pipe_union():
        """Test that serialize_sequence_value handles optional lists correctly (with new syntax)."""
        from fastapi._compat import v2
    
        field_info = FieldInfo(annotation=list[str] | None)
        field = v2.ModelField(name="items", field_info=field_info)
>       result = v2.serialize_sequence_value(field=field, value=["a", "b", "c"])
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_compat.py:159: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

field = ModelField(field_info=FieldInfo(annotation=Union[list[str], NoneType], required=True), name='items', mode='validation')
value = ['a', 'b', 'c']

    def serialize_sequence_value(*, field: ModelField, value: Any) -> Sequence[Any]:
        origin_type = get_origin(field.field_info.annotation) or field.field_info.annotation
        if origin_type is Union:  # Handle optional sequences
            union_args = get_args(field.field_info.annotation)
            for union_arg in union_args:
                if union_arg is type(None):
                    continue
                origin_type = get_origin(union_arg) or union_arg
                break
>       assert issubclass(origin_type, shared.sequence_types)  # type: ignore[arg-type]
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AssertionError

fastapi/_compat/v2.py:391: AssertionError
=============================== warnings summary ===============================
../../../../../../../Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45
  /Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead.
    _PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]]

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!
1 failed, 8 passed, 1 skipped, 1 warning in 0.67s