asns.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from rest_framework import serializers
  2. from ipam.models import ASN, ASNRange, RIR
  3. from netbox.api.fields import RelatedObjectCountField
  4. from netbox.api.serializers import NetBoxModelSerializer
  5. from tenancy.api.serializers_.tenants import TenantSerializer
  6. __all__ = (
  7. 'ASNRangeSerializer',
  8. 'ASNSerializer',
  9. 'AvailableASNSerializer',
  10. 'RIRSerializer',
  11. )
  12. class RIRSerializer(NetBoxModelSerializer):
  13. # Related object counts
  14. aggregate_count = RelatedObjectCountField('aggregates')
  15. class Meta:
  16. model = RIR
  17. fields = [
  18. 'id', 'url', 'display_url', 'display', 'name', 'slug', 'is_private', 'description', 'tags',
  19. 'custom_fields', 'created', 'last_updated', 'aggregate_count',
  20. ]
  21. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'aggregate_count')
  22. class ASNRangeSerializer(NetBoxModelSerializer):
  23. rir = RIRSerializer(nested=True)
  24. tenant = TenantSerializer(nested=True, required=False, allow_null=True)
  25. asn_count = serializers.IntegerField(read_only=True)
  26. class Meta:
  27. model = ASNRange
  28. fields = [
  29. 'id', 'url', 'display_url', 'display', 'name', 'slug', 'rir', 'start', 'end', 'tenant', 'description',
  30. 'tags', 'custom_fields', 'created', 'last_updated', 'asn_count',
  31. ]
  32. brief_fields = ('id', 'url', 'display', 'name', 'description')
  33. class ASNSerializer(NetBoxModelSerializer):
  34. rir = RIRSerializer(nested=True, required=False, allow_null=True)
  35. tenant = TenantSerializer(nested=True, required=False, allow_null=True)
  36. # Related object counts
  37. site_count = RelatedObjectCountField('sites')
  38. provider_count = RelatedObjectCountField('providers')
  39. class Meta:
  40. model = ASN
  41. fields = [
  42. 'id', 'url', 'display_url', 'display', 'asn', 'rir', 'tenant', 'description', 'comments', 'tags',
  43. 'custom_fields', 'created', 'last_updated', 'site_count', 'provider_count',
  44. ]
  45. brief_fields = ('id', 'url', 'display', 'asn', 'description')
  46. class AvailableASNSerializer(serializers.Serializer):
  47. """
  48. Representation of an ASN which does not exist in the database.
  49. """
  50. asn = serializers.IntegerField(read_only=True)
  51. description = serializers.CharField(required=False)
  52. def to_representation(self, asn):
  53. rir = RIRSerializer(self.context['range'].rir, nested=True, context={
  54. 'request': self.context['request']
  55. }).data
  56. return {
  57. 'rir': rir,
  58. 'asn': asn,
  59. }