From 4626b9d74acf00ad3b9204a66092f7c96a076fc1 Mon Sep 17 00:00:00 2001 From: bart-maykin Date: Fri, 2 Feb 2024 15:13:28 +0100 Subject: [PATCH] :art: [#165] changed expand snake_case query params to camelCase --- .../klantinteracties/api/tests/test_expand.py | 8 ++--- .../components/klantinteracties/openapi.yaml | 36 +++++++++---------- src/openklant/components/utils/expansion.py | 28 +++++++++++++-- src/openklant/utils/converters.py | 11 ++++++ src/openklant/utils/tests/test_converters.py | 15 ++++++++ 5 files changed, 74 insertions(+), 24 deletions(-) create mode 100644 src/openklant/utils/converters.py create mode 100644 src/openklant/utils/tests/test_converters.py diff --git a/src/openklant/components/klantinteracties/api/tests/test_expand.py b/src/openklant/components/klantinteracties/api/tests/test_expand.py index 1daea866..5c38ff70 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_expand.py +++ b/src/openklant/components/klantinteracties/api/tests/test_expand.py @@ -47,7 +47,7 @@ def setUp(self): def test_list_single_expansion(self): list_url = reverse("klantinteracties:klantcontact-list") - response = self.client.get(list_url, {"expand": "had_betrokkenen"}) + response = self.client.get(list_url, {"expand": "hadBetrokkenen"}) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -98,7 +98,7 @@ def test_list_single_expansion(self): def test_list_multiple_level_expansion(self): list_url = reverse("klantinteracties:klantcontact-list") response = self.client.get( - list_url, {"expand": "had_betrokkenen,had_betrokkenen.was_partij"} + list_url, {"expand": "hadBetrokkenen,hadBetrokkenen.wasPartij"} ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -188,7 +188,7 @@ def test_detail_single_expansion(self): "klantinteracties:klantcontact-detail", kwargs={"uuid": str(self.klantcontact.uuid)}, ) - response = self.client.get(detail_url, {"expand": "had_betrokkenen"}) + response = self.client.get(detail_url, {"expand": "hadBetrokkenen"}) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -238,7 +238,7 @@ def test_detail_multiple_level_expansion(self): kwargs={"uuid": str(self.klantcontact.uuid)}, ) response = self.client.get( - detail_url, {"expand": "had_betrokkenen,had_betrokkenen.was_partij"} + detail_url, {"expand": "hadBetrokkenen,hadBetrokkenen.wasPartij"} ) self.assertEqual(response.status_code, status.HTTP_200_OK) diff --git a/src/openklant/components/klantinteracties/openapi.yaml b/src/openklant/components/klantinteracties/openapi.yaml index 86eeeb3c..d6848f17 100644 --- a/src/openklant/components/klantinteracties/openapi.yaml +++ b/src/openklant/components/klantinteracties/openapi.yaml @@ -1364,21 +1364,21 @@ paths: items: type: string enum: - - ging_over_onderwerpobjecten - - had_betrokkenen - - had_betrokkenen.digitale_adressen - - had_betrokkenen.was_partij - - leidde_tot_interne_taken - - omvatte_bijlagen + - gingOverOnderwerpobjecten + - hadBetrokkenen + - hadBetrokkenen.digitaleAdressen + - hadBetrokkenen.wasPartij + - leiddeTotInterneTaken + - omvatteBijlagen description: |- Sluit de gespecifieerde gerelateerde resources in in het antwoord. - * `had_betrokkenen` - had_betrokkenen - * `leidde_tot_interne_taken` - leidde_tot_interne_taken - * `ging_over_onderwerpobjecten` - ging_over_onderwerpobjecten - * `omvatte_bijlagen` - omvatte_bijlagen - * `had_betrokkenen.was_partij` - had_betrokkenen.was_partij - * `had_betrokkenen.digitale_adressen` - had_betrokkenen.digitale_adressen + * `hadBetrokkenen` - had_betrokkenen + * `leiddeTotInterneTaken` - leidde_tot_interne_taken + * `gingOverOnderwerpobjecten` - ging_over_onderwerpobjecten + * `omvatteBijlagen` - omvatte_bijlagen + * `hadBetrokkenen.wasPartij` - had_betrokkenen.was_partij + * `hadBetrokkenen.digitaleAdressen` - had_betrokkenen.digitale_adressen explode: false style: form - in: query @@ -1910,16 +1910,16 @@ paths: type: string enum: - betrokkenen - - betrokkenen.had_klantcontact - - categorie_relaties - - digitale_adressen + - betrokkenen.hadKlantcontact + - categorieRelaties + - digitaleAdressen description: |- Sluit de gespecifieerde gerelateerde resources in in het antwoord. - * `digitale_adressen` - digitale_adressen + * `digitaleAdressen` - digitale_adressen * `betrokkenen` - betrokkenen - * `categorie_relaties` - categorie_relaties - * `betrokkenen.had_klantcontact` - betrokkenen.had_klantcontact + * `categorieRelaties` - categorie_relaties + * `betrokkenen.hadKlantcontact` - betrokkenen.had_klantcontact explode: false style: form - in: query diff --git a/src/openklant/components/utils/expansion.py b/src/openklant/components/utils/expansion.py index a735a9fe..10b18ed2 100644 --- a/src/openklant/components/utils/expansion.py +++ b/src/openklant/components/utils/expansion.py @@ -16,10 +16,14 @@ from rest_framework_inclusions.core import InclusionLoader from rest_framework_inclusions.renderer import ( InclusionJSONRenderer, - get_allowed_paths, should_skip_inclusions, ) +from openklant.utils.converters import ( + camel_to_snake_converter, + snake_to_camel_converter, +) + from .camilize import CamelCaseJSONRenderer logger = logging.getLogger(__name__) @@ -355,12 +359,32 @@ def _render_inclusions(self, data, renderer_context): return render_data +# Added camelCase to snake_case converter +def get_allowed_paths(request, view=None): + if getattr(view, "get_requested_inclusions", None): + include = view.get_requested_inclusions(request) + else: + include = request.GET.get("include") if request else None + + if include is None: + # nothing is allowed + return set() + if include == "*": + # everything is allowed + return None + + include = camel_to_snake_converter(include) + return [tuple(entry.split(".")) for entry in include.split(",")] + + def get_expand_options_for_serializer( serializer_class: Type[Serializer], ) -> List[tuple]: choices = [ ( - opt, + ".".join( + snake_to_camel_converter(field_name) for field_name in opt.split(".") + ), opt, ) for opt in serializer_class.inclusion_serializers diff --git a/src/openklant/utils/converters.py b/src/openklant/utils/converters.py new file mode 100644 index 00000000..b39c3c68 --- /dev/null +++ b/src/openklant/utils/converters.py @@ -0,0 +1,11 @@ +import re + + +def camel_to_snake_converter(value): + pattern = re.compile(r"(?