nested_serializers.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. from drf_spectacular.utils import extend_schema_field, extend_schema_serializer
  2. from drf_spectacular.types import OpenApiTypes
  3. from rest_framework import serializers
  4. from circuits.models import *
  5. from netbox.api.serializers import WritableNestedSerializer
  6. __all__ = [
  7. 'NestedCircuitSerializer',
  8. 'NestedCircuitTerminationSerializer',
  9. 'NestedCircuitTypeSerializer',
  10. 'NestedProviderNetworkSerializer',
  11. 'NestedProviderSerializer',
  12. 'NestedProviderAccountSerializer',
  13. ]
  14. #
  15. # Provider networks
  16. #
  17. class NestedProviderNetworkSerializer(WritableNestedSerializer):
  18. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
  19. class Meta:
  20. model = ProviderNetwork
  21. fields = ['id', 'url', 'display', 'name']
  22. #
  23. # Providers
  24. #
  25. @extend_schema_serializer(
  26. exclude_fields=('circuit_count',),
  27. )
  28. class NestedProviderSerializer(WritableNestedSerializer):
  29. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
  30. circuit_count = serializers.IntegerField(read_only=True)
  31. class Meta:
  32. model = Provider
  33. fields = ['id', 'url', 'display', 'name', 'slug', 'circuit_count']
  34. #
  35. # Provider Accounts
  36. #
  37. class NestedProviderAccountSerializer(WritableNestedSerializer):
  38. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provideraccount-detail')
  39. class Meta:
  40. model = ProviderAccount
  41. fields = ['id', 'url', 'display', 'name', 'account']
  42. #
  43. # Circuits
  44. #
  45. @extend_schema_serializer(
  46. exclude_fields=('circuit_count',),
  47. )
  48. class NestedCircuitTypeSerializer(WritableNestedSerializer):
  49. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
  50. circuit_count = serializers.IntegerField(read_only=True)
  51. class Meta:
  52. model = CircuitType
  53. fields = ['id', 'url', 'display', 'name', 'slug', 'circuit_count']
  54. class NestedCircuitSerializer(WritableNestedSerializer):
  55. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
  56. class Meta:
  57. model = Circuit
  58. fields = ['id', 'url', 'display', 'cid']
  59. class NestedCircuitTerminationSerializer(WritableNestedSerializer):
  60. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
  61. circuit = NestedCircuitSerializer()
  62. class Meta:
  63. model = CircuitTermination
  64. fields = ['id', 'url', 'display', 'circuit', 'term_side', 'cable', '_occupied']