mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 18:08:38 -06:00
Work on 11507
* Add `rir` property method to model * Add `aggregate` property method to model * Add `rir` attribute to serializer * Add `aggregate` attribute to serializer * Add test for both rir and aggregate fields on API
This commit is contained in:
parent
d4f8cb72aa
commit
1777d4228e
@ -44,6 +44,8 @@ class AggregateSerializer(NetBoxModelSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class PrefixSerializer(NetBoxModelSerializer):
|
class PrefixSerializer(NetBoxModelSerializer):
|
||||||
|
aggregate = AggregateSerializer(nested=True, read_only=True, allow_null=True)
|
||||||
|
rir = RIRSerializer(nested=True, read_only=True, allow_null=True)
|
||||||
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
|
family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True)
|
||||||
vrf = VRFSerializer(nested=True, required=False, allow_null=True)
|
vrf = VRFSerializer(nested=True, required=False, allow_null=True)
|
||||||
scope_type = ContentTypeField(
|
scope_type = ContentTypeField(
|
||||||
@ -67,9 +69,9 @@ class PrefixSerializer(NetBoxModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Prefix
|
model = Prefix
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'url', 'display_url', 'display', 'family', 'prefix', 'vrf', 'scope_type', 'scope_id', 'scope',
|
'id', 'url', 'display_url', 'display', 'aggregate', 'rir', 'family', 'prefix', 'vrf', 'scope_type',
|
||||||
'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'tags',
|
'scope_id', 'scope', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description',
|
||||||
'custom_fields', 'created', 'last_updated', 'children', '_depth',
|
'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'children', '_depth',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'family', 'prefix', 'description', '_depth')
|
brief_fields = ('id', 'url', 'display', 'family', 'prefix', 'description', '_depth')
|
||||||
|
|
||||||
|
@ -322,6 +322,15 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, CachedScopeMixin, Primary
|
|||||||
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def aggregate(self):
|
||||||
|
return Aggregate.objects.filter(prefix__net_contains_or_equals=self.prefix).first()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def rir(self):
|
||||||
|
aggregate = self.aggregate
|
||||||
|
return aggregate.rir if aggregate else None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def family(self):
|
def family(self):
|
||||||
return self.prefix.version if self.prefix else None
|
return self.prefix.version if self.prefix else None
|
||||||
|
@ -532,6 +532,33 @@ class PrefixTest(APIViewTestCases.APIViewTestCase):
|
|||||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||||
self.assertEqual(len(response.data), 8)
|
self.assertEqual(len(response.data), 8)
|
||||||
|
|
||||||
|
def test_get_prefix_with_aggregate_and_rir(self):
|
||||||
|
self.add_permissions('ipam.view_prefix')
|
||||||
|
rir = RIR.objects.create(name='RFC 1918', slug='rfc-1918')
|
||||||
|
aggregate = Aggregate.objects.create(prefix=IPNetwork('192.168.0.0/16'), rir=rir)
|
||||||
|
prefixes = [
|
||||||
|
Prefix.objects.filter(prefix=IPNetwork('192.168.2.0/24')).first(),
|
||||||
|
Prefix.objects.create(prefix=IPNetwork('10.0.0.0/24'))
|
||||||
|
]
|
||||||
|
|
||||||
|
self.assertIsNotNone(prefixes[0])
|
||||||
|
|
||||||
|
url = self._get_detail_url(prefixes[0])
|
||||||
|
response = self.client.get(url, **self.header)
|
||||||
|
self.assertIsNotNone(prefixes[0].aggregate)
|
||||||
|
self.assertHttpStatus(response, status.HTTP_200_OK)
|
||||||
|
self.assertIsNotNone(response.data.get('aggregate'))
|
||||||
|
self.assertIsNotNone(response.data.get('rir'))
|
||||||
|
self.assertEqual(response.data.get('aggregate').get('id', None), aggregate.pk)
|
||||||
|
self.assertEqual(response.data.get('rir').get('id', None), rir.pk)
|
||||||
|
|
||||||
|
url = self._get_detail_url(prefixes[1])
|
||||||
|
response = self.client.get(url, **self.header)
|
||||||
|
self.assertIsNone(prefixes[1].aggregate)
|
||||||
|
self.assertHttpStatus(response, status.HTTP_200_OK)
|
||||||
|
self.assertIsNone(response.data.get('aggregate'))
|
||||||
|
self.assertIsNone(response.data.get('rir'))
|
||||||
|
|
||||||
|
|
||||||
class IPRangeTest(APIViewTestCases.APIViewTestCase):
|
class IPRangeTest(APIViewTestCases.APIViewTestCase):
|
||||||
model = IPRange
|
model = IPRange
|
||||||
|
Loading…
Reference in New Issue
Block a user