From bde25e69f8284a739074fb3dfd3bdbfe3e789798 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 26 Aug 2020 14:36:45 -0400 Subject: [PATCH] Add CustomFieldsDataFieldInspector for OpenAPI spec --- netbox/netbox/settings.py | 1 + netbox/utilities/custom_inspectors.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index 92f39cf44..7bcc806d7 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -484,6 +484,7 @@ REST_FRAMEWORK = { SWAGGER_SETTINGS = { 'DEFAULT_AUTO_SCHEMA_CLASS': 'utilities.custom_inspectors.NetBoxSwaggerAutoSchema', 'DEFAULT_FIELD_INSPECTORS': [ + 'utilities.custom_inspectors.CustomFieldsDataFieldInspector', 'utilities.custom_inspectors.JSONFieldInspector', 'utilities.custom_inspectors.NullableBooleanFieldInspector', 'utilities.custom_inspectors.SerializedPKRelatedFieldInspector', diff --git a/netbox/utilities/custom_inspectors.py b/netbox/utilities/custom_inspectors.py index e013bf82a..bee2f7d92 100644 --- a/netbox/utilities/custom_inspectors.py +++ b/netbox/utilities/custom_inspectors.py @@ -5,6 +5,7 @@ from drf_yasg.utils import get_serializer_ref_name from rest_framework.fields import ChoiceField from rest_framework.relations import ManyRelatedField +from extras.api.customfields import CustomFieldsDataField from utilities.api import ChoiceField, SerializedPKRelatedField, WritableNestedSerializer @@ -60,6 +61,17 @@ class NullableBooleanFieldInspector(FieldInspector): return result +class CustomFieldsDataFieldInspector(FieldInspector): + + def field_to_swagger_object(self, field, swagger_object_type, use_references, **kwargs): + SwaggerType, ChildSwaggerType = self._get_partial_types(field, swagger_object_type, use_references, **kwargs) + + if isinstance(field, CustomFieldsDataField) and swagger_object_type == openapi.Schema: + return SwaggerType(type=openapi.TYPE_OBJECT) + + return NotHandled + + class JSONFieldInspector(FieldInspector): """Required because by default, Swagger sees a JSONField as a string and not dict """