nested_serializers.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. from rest_framework import serializers
  2. from ipam import models
  3. from utilities.api import WritableNestedSerializer
  4. __all__ = [
  5. 'NestedAggregateSerializer',
  6. 'NestedIPAddressSerializer',
  7. 'NestedPrefixSerializer',
  8. 'NestedRIRSerializer',
  9. 'NestedRoleSerializer',
  10. 'NestedServiceSerializer',
  11. 'NestedVLANGroupSerializer',
  12. 'NestedVLANSerializer',
  13. 'NestedVRFSerializer',
  14. ]
  15. #
  16. # VRFs
  17. #
  18. class NestedVRFSerializer(WritableNestedSerializer):
  19. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
  20. prefix_count = serializers.IntegerField(read_only=True)
  21. class Meta:
  22. model = models.VRF
  23. fields = ['id', 'url', 'name', 'rd', 'prefix_count']
  24. #
  25. # RIRs/aggregates
  26. #
  27. class NestedRIRSerializer(WritableNestedSerializer):
  28. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
  29. aggregate_count = serializers.IntegerField(read_only=True)
  30. class Meta:
  31. model = models.RIR
  32. fields = ['id', 'url', 'name', 'slug', 'aggregate_count']
  33. class NestedAggregateSerializer(WritableNestedSerializer):
  34. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
  35. class Meta:
  36. model = models.Aggregate
  37. fields = ['id', 'url', 'family', 'prefix']
  38. #
  39. # VLANs
  40. #
  41. class NestedRoleSerializer(WritableNestedSerializer):
  42. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
  43. prefix_count = serializers.IntegerField(read_only=True)
  44. vlan_count = serializers.IntegerField(read_only=True)
  45. class Meta:
  46. model = models.Role
  47. fields = ['id', 'url', 'name', 'slug', 'prefix_count', 'vlan_count']
  48. class NestedVLANGroupSerializer(WritableNestedSerializer):
  49. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
  50. vlan_count = serializers.IntegerField(read_only=True)
  51. class Meta:
  52. model = models.VLANGroup
  53. fields = ['id', 'url', 'name', 'slug', 'vlan_count']
  54. class NestedVLANSerializer(WritableNestedSerializer):
  55. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
  56. class Meta:
  57. model = models.VLAN
  58. fields = ['id', 'url', 'vid', 'name', 'display_name']
  59. #
  60. # Prefixes
  61. #
  62. class NestedPrefixSerializer(WritableNestedSerializer):
  63. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
  64. class Meta:
  65. model = models.Prefix
  66. fields = ['id', 'url', 'family', 'prefix']
  67. #
  68. # IP addresses
  69. #
  70. class NestedIPAddressSerializer(WritableNestedSerializer):
  71. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
  72. class Meta:
  73. model = models.IPAddress
  74. fields = ['id', 'url', 'family', 'address']
  75. #
  76. # Services
  77. #
  78. class NestedServiceSerializer(WritableNestedSerializer):
  79. url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
  80. class Meta:
  81. model = models.Service
  82. fields = ['id', 'url', 'name', 'protocol', 'port']