From 5fa0a7f1029064b897742344561aa2cdfa509ddd Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 5 Aug 2024 21:57:58 +0700 Subject: [PATCH 1/3] 16670 fix OpenAPI schema generation with nested serializers --- netbox/core/api/schema.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index bcc49d3fc3..ca21a3e2f1 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -126,6 +126,13 @@ def get_response_serializers(self) -> typing.Any: return response_serializers + def _get_serializer_name(self, serializer, direction, bypass_extensions=False) -> str: + name = super()._get_serializer_name(serializer, direction, bypass_extensions) + if hasattr(serializer, 'nested') and serializer.nested: + name = 'Brief' + name + + return name + def get_serializer_ref_name(self, serializer): # from drf-yasg.utils """Get serializer's ref_name (or None for ModelSerializer if it is named 'NestedSerializer') @@ -137,8 +144,6 @@ def get_serializer_ref_name(self, serializer): serializer_name = type(serializer).__name__ if hasattr(serializer_meta, 'ref_name'): ref_name = serializer_meta.ref_name - elif serializer_name == 'NestedSerializer' and isinstance(serializer, serializers.ModelSerializer): - ref_name = None else: ref_name = serializer_name if ref_name.endswith('Serializer'): From b614196ff84745879d4696f9ef82d26f1b1d5cc8 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 5 Aug 2024 22:15:56 +0700 Subject: [PATCH 2/3] 16670 fix comment --- netbox/core/api/schema.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index ca21a3e2f1..4fe61c2abc 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -135,7 +135,7 @@ def _get_serializer_name(self, serializer, direction, bypass_extensions=False) - def get_serializer_ref_name(self, serializer): # from drf-yasg.utils - """Get serializer's ref_name (or None for ModelSerializer if it is named 'NestedSerializer') + """Get serializer's ref_name :param serializer: Serializer instance :return: Serializer's ``ref_name`` or ``None`` for inline serializer :rtype: str or None From a900cf8bfc2eca31db20f69cd2ea52e13289dc26 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 27 Aug 2024 12:42:42 -0400 Subject: [PATCH 3/3] Add comment; misc cleanup --- netbox/core/api/schema.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index 4fe61c2abc..7c4ae722e9 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -128,8 +128,10 @@ def get_response_serializers(self) -> typing.Any: def _get_serializer_name(self, serializer, direction, bypass_extensions=False) -> str: name = super()._get_serializer_name(serializer, direction, bypass_extensions) - if hasattr(serializer, 'nested') and serializer.nested: - name = 'Brief' + name + + # If this serializer is nested, prepend its name with "Brief" + if getattr(serializer, 'nested', False): + name = f'Brief{name}' return name