9608 fix schema errors

This commit is contained in:
Arthur 2023-01-30 17:57:34 -08:00
parent b097ee25fc
commit d0d13e8f6c
7 changed files with 29 additions and 0 deletions

View File

@ -10,6 +10,7 @@ class DCIMConfig(AppConfig):
def ready(self): def ready(self):
from . import signals, search from . import signals, search
from .models import CableTermination from .models import CableTermination
from . import schema # noqa: E402
# Register denormalized fields # Register denormalized fields
denormalized.register(CableTermination, '_device', { denormalized.register(CableTermination, '_device', {

14
netbox/dcim/schema.py Normal file
View File

@ -0,0 +1,14 @@
from drf_spectacular.extensions import (
OpenApiSerializerFieldExtension
)
from drf_spectacular.extensions import OpenApiViewExtension
from drf_spectacular.utils import extend_schema
from drf_spectacular.plumbing import build_basic_type
from drf_spectacular.types import OpenApiTypes
class FixTimeZoneSerializerField(OpenApiSerializerFieldExtension):
target_class = 'timezone_field.rest_framework.TimeZoneSerializerField'
def map_serializer_field(self, auto_schema, direction):
return build_basic_type(OpenApiTypes.STR)

View File

@ -1,4 +1,6 @@
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from drf_spectacular.utils import extend_schema_field
from drf_spectacular.types import OpenApiTypes
from rest_framework.fields import Field from rest_framework.fields import Field
from rest_framework.serializers import ValidationError from rest_framework.serializers import ValidationError
@ -36,6 +38,7 @@ class CustomFieldDefaultValues:
return value return value
@extend_schema_field(OpenApiTypes.OBJECT)
class CustomFieldsDataField(Field): class CustomFieldsDataField(Field):
def _get_custom_fields(self): def _get_custom_fields(self):

View File

@ -9,6 +9,7 @@ from dcim.api.nested_serializers import (
) )
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
from drf_spectacular.utils import extend_schema_field from drf_spectacular.utils import extend_schema_field
from drf_spectacular.types import OpenApiTypes
from extras.choices import * from extras.choices import *
from extras.models import * from extras.models import *
from extras.utils import FeatureQuery from extras.utils import FeatureQuery
@ -97,6 +98,7 @@ class CustomFieldSerializer(ValidatedModelSerializer):
'validation_minimum', 'validation_maximum', 'validation_regex', 'choices', 'created', 'last_updated', 'validation_minimum', 'validation_maximum', 'validation_regex', 'choices', 'created', 'last_updated',
] ]
@extend_schema_field(OpenApiTypes.STR)
def get_data_type(self, obj): def get_data_type(self, obj):
types = CustomFieldTypeChoices types = CustomFieldTypeChoices
if obj.type == types.TYPE_INTEGER: if obj.type == types.TYPE_INTEGER:

View File

@ -1,11 +1,14 @@
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from drf_spectacular.utils import extend_schema_field
from drf_spectacular.types import OpenApiTypes
from netaddr import AddrFormatError, IPNetwork from netaddr import AddrFormatError, IPNetwork
from . import lookups, validators from . import lookups, validators
from .formfields import IPNetworkFormField from .formfields import IPNetworkFormField
@extend_schema_field(OpenApiTypes.STR)
class BaseIPField(models.Field): class BaseIPField(models.Field):
def python_type(self): def python_type(self):
@ -67,6 +70,7 @@ IPNetworkField.register_lookup(lookups.NetFamily)
IPNetworkField.register_lookup(lookups.NetMaskLength) IPNetworkField.register_lookup(lookups.NetMaskLength)
@extend_schema_field(OpenApiTypes.STR)
class IPAddressField(BaseIPField): class IPAddressField(BaseIPField):
""" """
IP address (host address and mask) IP address (host address and mask)

View File

@ -1,4 +1,6 @@
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from drf_spectacular.utils import extend_schema_field
from drf_spectacular.types import OpenApiTypes
from netaddr import IPNetwork from netaddr import IPNetwork
from rest_framework import serializers from rest_framework import serializers
from rest_framework.exceptions import ValidationError from rest_framework.exceptions import ValidationError
@ -12,6 +14,7 @@ __all__ = (
) )
@extend_schema_field(OpenApiTypes.OBJECT)
class ChoiceField(serializers.Field): class ChoiceField(serializers.Field):
""" """
Represent a ChoiceField as {'value': <DB value>, 'label': <string>}. Accepts a single value on write. Represent a ChoiceField as {'value': <DB value>, 'label': <string>}. Accepts a single value on write.
@ -86,6 +89,7 @@ class ChoiceField(serializers.Field):
return self._choices return self._choices
@extend_schema_field(OpenApiTypes.STR)
class ContentTypeField(RelatedField): class ContentTypeField(RelatedField):
""" """
Represent a ContentType as '<app_label>.<model>' Represent a ContentType as '<app_label>.<model>'

View File

@ -578,6 +578,7 @@ SPECTACULAR_SETTINGS = {
"DESCRIPTION": "API to access NetBox", "DESCRIPTION": "API to access NetBox",
"LICENSE": {"name": "Apache v2 License"}, "LICENSE": {"name": "Apache v2 License"},
"VERSION": VERSION, "VERSION": VERSION,
'COMPONENT_SPLIT_REQUEST': True,
} }
# #