mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
use FieldInspector for JSONField type
This commit is contained in:
@ -376,7 +376,6 @@ class DeviceSerializer(TaggitSerializer, CustomFieldModelSerializer):
|
|||||||
cluster = NestedClusterSerializer(required=False, allow_null=True)
|
cluster = NestedClusterSerializer(required=False, allow_null=True)
|
||||||
virtual_chassis = NestedVirtualChassisSerializer(required=False, allow_null=True)
|
virtual_chassis = NestedVirtualChassisSerializer(required=False, allow_null=True)
|
||||||
tags = TagListSerializerField(required=False)
|
tags = TagListSerializerField(required=False)
|
||||||
local_context_data = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Device
|
model = Device
|
||||||
@ -412,12 +411,6 @@ class DeviceSerializer(TaggitSerializer, CustomFieldModelSerializer):
|
|||||||
data['device_bay'] = NestedDeviceBaySerializer(instance=device_bay, context=context).data
|
data['device_bay'] = NestedDeviceBaySerializer(instance=device_bay, context=context).data
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@swagger_serializer_method(serializer_or_field=serializers.DictField)
|
|
||||||
def get_local_context_data(self, obj):
|
|
||||||
"""Used to strongly type the local_context_data field for Swagger generation
|
|
||||||
"""
|
|
||||||
return obj.local_context_data
|
|
||||||
|
|
||||||
|
|
||||||
class DeviceWithConfigContextSerializer(DeviceSerializer):
|
class DeviceWithConfigContextSerializer(DeviceSerializer):
|
||||||
config_context = serializers.SerializerMethodField()
|
config_context = serializers.SerializerMethodField()
|
||||||
|
@ -506,6 +506,7 @@ REST_FRAMEWORK = {
|
|||||||
SWAGGER_SETTINGS = {
|
SWAGGER_SETTINGS = {
|
||||||
'DEFAULT_AUTO_SCHEMA_CLASS': 'utilities.custom_inspectors.NetBoxSwaggerAutoSchema',
|
'DEFAULT_AUTO_SCHEMA_CLASS': 'utilities.custom_inspectors.NetBoxSwaggerAutoSchema',
|
||||||
'DEFAULT_FIELD_INSPECTORS': [
|
'DEFAULT_FIELD_INSPECTORS': [
|
||||||
|
'utilities.custom_inspectors.JSONFieldInspector',
|
||||||
'utilities.custom_inspectors.NullableBooleanFieldInspector',
|
'utilities.custom_inspectors.NullableBooleanFieldInspector',
|
||||||
'utilities.custom_inspectors.CustomChoiceFieldInspector',
|
'utilities.custom_inspectors.CustomChoiceFieldInspector',
|
||||||
'utilities.custom_inspectors.TagListFieldInspector',
|
'utilities.custom_inspectors.TagListFieldInspector',
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from django.contrib.postgres.fields import JSONField
|
||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from drf_yasg.inspectors import FieldInspector, NotHandled, PaginatorInspector, FilterInspector, SwaggerAutoSchema
|
from drf_yasg.inspectors import FieldInspector, NotHandled, PaginatorInspector, FilterInspector, SwaggerAutoSchema
|
||||||
from drf_yasg.utils import get_serializer_ref_name
|
from drf_yasg.utils import get_serializer_ref_name
|
||||||
@ -119,6 +120,15 @@ class NullableBooleanFieldInspector(FieldInspector):
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
class JSONFieldInspector(FieldInspector):
|
||||||
|
"""Required because by default, Swagger sees a JSONField as a string and not dict
|
||||||
|
"""
|
||||||
|
def process_result(self, result, method_name, obj, **kwargs):
|
||||||
|
if isinstance(result, openapi.Schema) and isinstance(obj, JSONField):
|
||||||
|
result.type = 'dict'
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class IdInFilterInspector(FilterInspector):
|
class IdInFilterInspector(FilterInspector):
|
||||||
def process_result(self, result, method_name, obj, **kwargs):
|
def process_result(self, result, method_name, obj, **kwargs):
|
||||||
if isinstance(result, list):
|
if isinstance(result, list):
|
||||||
|
@ -67,7 +67,6 @@ class VirtualMachineSerializer(TaggitSerializer, CustomFieldModelSerializer):
|
|||||||
primary_ip4 = NestedIPAddressSerializer(required=False, allow_null=True)
|
primary_ip4 = NestedIPAddressSerializer(required=False, allow_null=True)
|
||||||
primary_ip6 = NestedIPAddressSerializer(required=False, allow_null=True)
|
primary_ip6 = NestedIPAddressSerializer(required=False, allow_null=True)
|
||||||
tags = TagListSerializerField(required=False)
|
tags = TagListSerializerField(required=False)
|
||||||
local_context_data = serializers.SerializerMethodField()
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualMachine
|
model = VirtualMachine
|
||||||
@ -78,12 +77,6 @@ class VirtualMachineSerializer(TaggitSerializer, CustomFieldModelSerializer):
|
|||||||
]
|
]
|
||||||
validators = []
|
validators = []
|
||||||
|
|
||||||
@swagger_serializer_method(serializer_or_field=serializers.DictField)
|
|
||||||
def get_local_context_data(self, obj):
|
|
||||||
"""Used to strongly type the local_context_data field for Swagger generation
|
|
||||||
"""
|
|
||||||
return obj.local_context_data
|
|
||||||
|
|
||||||
|
|
||||||
class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
|
class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
|
||||||
config_context = serializers.SerializerMethodField()
|
config_context = serializers.SerializerMethodField()
|
||||||
|
Reference in New Issue
Block a user