From 687dd65c310f8e9282707a4d6cd63645903555fb Mon Sep 17 00:00:00 2001 From: JONEMI21 Date: Fri, 7 Nov 2025 14:25:13 +0000 Subject: [PATCH] align tests with intended functionality --- fastapi/dependencies/utils.py | 31 ++++++++++++++----- .../test_tutorial007_py310.py | 4 +-- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 5bf6bcb96..4e0ecbc52 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -344,9 +344,16 @@ def remove_invalid(v: Any, handler: Callable[[Any], Any]) -> Any: v.pop(loc[0], None) elif len(loc) == 2 and isinstance(v.get(loc[0]), list): try: - v[loc[0]].pop(int(loc[1])) + v[loc[0]][loc[1]] = None except (ValueError, IndexError): pass + # remove the None values from lists + for key in list(v.keys()): + if isinstance(v[key], list): + v[key] = [item for item in v[key] if item is not None] + # remove empty lists + if v[key] == []: + v.pop(key) return handler(v) @@ -519,13 +526,6 @@ def analyze_param( field_info.alias = alias - if is_scalar_sequence_field(field) or is_scalar_sequence_mapping_field(field): - # Wrap the validator to remove invalid values from scalar sequence - # and scalar sequence mapping fields instead of failing the whole validation - field_info.metadata = getattr(field_info, "metadata", []) + [ - WrapValidator(remove_invalid) - ] - field = create_model_field( name=param_name, type_=use_annotation_from_field_info, @@ -550,6 +550,21 @@ def analyze_param( and getattr(field, "shape", 1) == 1 ) ) + if is_scalar_sequence_field(field) or is_scalar_sequence_mapping_field( + field + ): + field_info.metadata = getattr(field_info, "metadata", []) + [ + WrapValidator(remove_invalid) + ] + field = create_model_field( + name=param_name, + type_=use_annotation_from_field_info, + default=field_info.default, + alias=alias, + required=field_info.default + in (RequiredParam, may_v1.RequiredParam, Undefined), + field_info=field_info, + ) return ParamDetails(type_annotation=type_annotation, depends=depends, field=field) diff --git a/tests/test_tutorial/test_query_params/test_tutorial007_py310.py b/tests/test_tutorial/test_query_params/test_tutorial007_py310.py index 8b5c075e2..dd9a9f850 100644 --- a/tests/test_tutorial/test_query_params/test_tutorial007_py310.py +++ b/tests/test_tutorial/test_query_params/test_tutorial007_py310.py @@ -16,8 +16,8 @@ def test_foo_needy_very(client: TestClient): assert response.json() == { "query": 2, "mapping_query_str_or_int": {"foo": "baz"}, - "mapping_query_int": None, - "sequence_mapping_int": None, + "mapping_query_int": {}, + "sequence_mapping_int": {}, }