nested_serializers.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import warnings
  2. from drf_spectacular.utils import extend_schema_serializer
  3. from netbox.api.fields import RelatedObjectCountField
  4. from netbox.api.serializers import WritableNestedSerializer
  5. from vpn import models
  6. __all__ = (
  7. 'NestedIKEPolicySerializer',
  8. 'NestedIKEProposalSerializer',
  9. 'NestedIPSecPolicySerializer',
  10. 'NestedIPSecProfileSerializer',
  11. 'NestedIPSecProposalSerializer',
  12. 'NestedL2VPNSerializer',
  13. 'NestedL2VPNTerminationSerializer',
  14. 'NestedTunnelGroupSerializer',
  15. 'NestedTunnelSerializer',
  16. 'NestedTunnelTerminationSerializer',
  17. )
  18. # TODO: Remove in v4.2
  19. warnings.warn(
  20. "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
  21. DeprecationWarning
  22. )
  23. @extend_schema_serializer(
  24. exclude_fields=('tunnel_count',),
  25. )
  26. class NestedTunnelGroupSerializer(WritableNestedSerializer):
  27. tunnel_count = RelatedObjectCountField('tunnels')
  28. class Meta:
  29. model = models.TunnelGroup
  30. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'tunnel_count']
  31. class NestedTunnelSerializer(WritableNestedSerializer):
  32. class Meta:
  33. model = models.Tunnel
  34. fields = ('id', 'url', 'display_url', 'display', 'name')
  35. class NestedTunnelTerminationSerializer(WritableNestedSerializer):
  36. class Meta:
  37. model = models.TunnelTermination
  38. fields = ('id', 'url', 'display_url', 'display')
  39. class NestedIKEProposalSerializer(WritableNestedSerializer):
  40. class Meta:
  41. model = models.IKEProposal
  42. fields = ('id', 'url', 'display_url', 'display', 'name')
  43. class NestedIKEPolicySerializer(WritableNestedSerializer):
  44. class Meta:
  45. model = models.IKEPolicy
  46. fields = ('id', 'url', 'display_url', 'display', 'name')
  47. class NestedIPSecProposalSerializer(WritableNestedSerializer):
  48. class Meta:
  49. model = models.IPSecProposal
  50. fields = ('id', 'url', 'display_url', 'display', 'name')
  51. class NestedIPSecPolicySerializer(WritableNestedSerializer):
  52. class Meta:
  53. model = models.IPSecPolicy
  54. fields = ('id', 'url', 'display_url', 'display', 'name')
  55. class NestedIPSecProfileSerializer(WritableNestedSerializer):
  56. class Meta:
  57. model = models.IPSecProfile
  58. fields = ('id', 'url', 'display_url', 'display', 'name')
  59. #
  60. # L2VPN
  61. #
  62. class NestedL2VPNSerializer(WritableNestedSerializer):
  63. class Meta:
  64. model = models.L2VPN
  65. fields = [
  66. 'id', 'url', 'display', 'display_url', 'identifier', 'name', 'slug', 'type'
  67. ]
  68. class NestedL2VPNTerminationSerializer(WritableNestedSerializer):
  69. l2vpn = NestedL2VPNSerializer()
  70. class Meta:
  71. model = models.L2VPNTermination
  72. fields = [
  73. 'id', 'url', 'display_url', 'display', 'l2vpn'
  74. ]