nested_serializers.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import warnings
  2. from drf_spectacular.utils import extend_schema_serializer
  3. from circuits.models import *
  4. from netbox.api.fields import RelatedObjectCountField
  5. from netbox.api.serializers import WritableNestedSerializer
  6. from .serializers_.nested import NestedProviderAccountSerializer
  7. __all__ = [
  8. 'NestedCircuitSerializer',
  9. 'NestedCircuitTerminationSerializer',
  10. 'NestedCircuitTypeSerializer',
  11. 'NestedProviderNetworkSerializer',
  12. 'NestedProviderSerializer',
  13. 'NestedProviderAccountSerializer',
  14. ]
  15. # TODO: Remove in v4.2
  16. warnings.warn(
  17. "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
  18. DeprecationWarning
  19. )
  20. #
  21. # Provider networks
  22. #
  23. class NestedProviderNetworkSerializer(WritableNestedSerializer):
  24. class Meta:
  25. model = ProviderNetwork
  26. fields = ['id', 'url', 'display_url', 'display', 'name']
  27. #
  28. # Providers
  29. #
  30. @extend_schema_serializer(
  31. exclude_fields=('circuit_count',),
  32. )
  33. class NestedProviderSerializer(WritableNestedSerializer):
  34. circuit_count = RelatedObjectCountField('circuits')
  35. class Meta:
  36. model = Provider
  37. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count']
  38. #
  39. # Circuits
  40. #
  41. @extend_schema_serializer(
  42. exclude_fields=('circuit_count',),
  43. )
  44. class NestedCircuitTypeSerializer(WritableNestedSerializer):
  45. circuit_count = RelatedObjectCountField('circuits')
  46. class Meta:
  47. model = CircuitType
  48. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count']
  49. class NestedCircuitSerializer(WritableNestedSerializer):
  50. class Meta:
  51. model = Circuit
  52. fields = ['id', 'url', 'display_url', 'display', 'cid']
  53. class NestedCircuitTerminationSerializer(WritableNestedSerializer):
  54. circuit = NestedCircuitSerializer()
  55. class Meta:
  56. model = CircuitTermination
  57. fields = ['id', 'url', 'display_url', 'display', 'circuit', 'term_side', 'cable', '_occupied']