From a11b545a6051113e9f22afe31b7110c4f8701e30 Mon Sep 17 00:00:00 2001 From: "v.kovalchuk" Date: Sat, 10 Jun 2023 18:20:17 +0300 Subject: [PATCH] fix: Camelize query parameters --- .../contrib/djangorestframework_camel_case.py | 5 +++++ tests/contrib/test_djangorestframework_camel_case.py | 12 +++++++++++- .../contrib/test_djangorestframework_camel_case.yml | 12 ++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drf_spectacular/contrib/djangorestframework_camel_case.py b/drf_spectacular/contrib/djangorestframework_camel_case.py index 57a70ed1..fce51cd7 100644 --- a/drf_spectacular/contrib/djangorestframework_camel_case.py +++ b/drf_spectacular/contrib/djangorestframework_camel_case.py @@ -36,5 +36,10 @@ def camelize_component(schema: dict, name: Optional[str] = None) -> dict: if component_type == 'schemas': camelize_component(component.schema) + for url_schema in result["paths"].values(): + for method_schema in url_schema.values(): + for parameter in method_schema.get("parameters", []): + parameter["name"] = camelize_str(parameter["name"]) + # inplace modification of components also affect result dict, so regeneration is not necessary return result diff --git a/tests/contrib/test_djangorestframework_camel_case.py b/tests/contrib/test_djangorestframework_camel_case.py index ab8f4844..108b2ec5 100644 --- a/tests/contrib/test_djangorestframework_camel_case.py +++ b/tests/contrib/test_djangorestframework_camel_case.py @@ -14,7 +14,7 @@ from typing_extensions import TypedDict from drf_spectacular.contrib.djangorestframework_camel_case import camelize_serializer_fields -from drf_spectacular.utils import extend_schema +from drf_spectacular.utils import extend_schema, OpenApiParameter from tests import assert_schema, generate_schema @@ -46,6 +46,16 @@ def get_field_nested_ignored(self) -> NestedObject: # type: ignore pass # pragma: no cover +@extend_schema( + parameters=[ + OpenApiParameter( + name="field_one", + description="filter_field", + required=False, + type=str, + ), + ] +) class FakeViewset(mixins.ListModelMixin, viewsets.GenericViewSet): serializer_class = FakeSerializer diff --git a/tests/contrib/test_djangorestframework_camel_case.yml b/tests/contrib/test_djangorestframework_camel_case.yml index 4b6f9c51..7d519fcd 100644 --- a/tests/contrib/test_djangorestframework_camel_case.yml +++ b/tests/contrib/test_djangorestframework_camel_case.yml @@ -6,6 +6,12 @@ paths: /a_b_c/: get: operationId: a_b_c_list + parameters: + - in: query + name: fieldOne + schema: + type: string + description: filter_field tags: - a_b_c security: @@ -24,6 +30,12 @@ paths: /a_b_c/home/: get: operationId: a_b_c_home_retrieve + parameters: + - in: query + name: fieldOne + schema: + type: string + description: filter_field tags: - a_b_c security: