mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Adds mask length filters on ipaddress (#14218)
* adds mask length filters on ipaddress #14101 * Change IPaddress mask_length filter to multi-value; extend tests --------- Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
parent
d2c727c0a2
commit
1203d761f4
@ -266,7 +266,8 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
|||||||
)
|
)
|
||||||
mask_length = MultiValueNumberFilter(
|
mask_length = MultiValueNumberFilter(
|
||||||
field_name='prefix',
|
field_name='prefix',
|
||||||
lookup_expr='net_mask_length'
|
lookup_expr='net_mask_length',
|
||||||
|
label=_('Mask length')
|
||||||
)
|
)
|
||||||
mask_length__gte = django_filters.NumberFilter(
|
mask_length__gte = django_filters.NumberFilter(
|
||||||
field_name='prefix',
|
field_name='prefix',
|
||||||
@ -531,9 +532,18 @@ class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
|||||||
method='filter_address',
|
method='filter_address',
|
||||||
label=_('Address'),
|
label=_('Address'),
|
||||||
)
|
)
|
||||||
mask_length = django_filters.NumberFilter(
|
mask_length = MultiValueNumberFilter(
|
||||||
method='filter_mask_length',
|
field_name='address',
|
||||||
label=_('Mask length'),
|
lookup_expr='net_mask_length',
|
||||||
|
label=_('Mask length')
|
||||||
|
)
|
||||||
|
mask_length__gte = django_filters.NumberFilter(
|
||||||
|
field_name='address',
|
||||||
|
lookup_expr='net_mask_length__gte'
|
||||||
|
)
|
||||||
|
mask_length__lte = django_filters.NumberFilter(
|
||||||
|
field_name='address',
|
||||||
|
lookup_expr='net_mask_length__lte'
|
||||||
)
|
)
|
||||||
vrf_id = django_filters.ModelMultipleChoiceFilter(
|
vrf_id = django_filters.ModelMultipleChoiceFilter(
|
||||||
queryset=VRF.objects.all(),
|
queryset=VRF.objects.all(),
|
||||||
@ -677,11 +687,6 @@ class IPAddressFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
|
|||||||
except ValidationError:
|
except ValidationError:
|
||||||
return queryset.none()
|
return queryset.none()
|
||||||
|
|
||||||
def filter_mask_length(self, queryset, name, value):
|
|
||||||
if not value:
|
|
||||||
return queryset
|
|
||||||
return queryset.filter(address__net_mask_length=value)
|
|
||||||
|
|
||||||
@extend_schema_field(OpenApiTypes.STR)
|
@extend_schema_field(OpenApiTypes.STR)
|
||||||
def filter_present_in_vrf(self, queryset, name, vrf):
|
def filter_present_in_vrf(self, queryset, name, vrf):
|
||||||
if vrf is None:
|
if vrf is None:
|
||||||
|
@ -627,8 +627,12 @@ class PrefixTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_mask_length(self):
|
def test_mask_length(self):
|
||||||
params = {'mask_length': ['24']}
|
params = {'mask_length': [24]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
||||||
|
params = {'mask_length__gte': 32}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
|
||||||
|
params = {'mask_length__lte': 24}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
|
||||||
|
|
||||||
def test_vrf(self):
|
def test_vrf(self):
|
||||||
vrfs = VRF.objects.all()[:2]
|
vrfs = VRF.objects.all()[:2]
|
||||||
@ -954,8 +958,12 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||||
|
|
||||||
def test_mask_length(self):
|
def test_mask_length(self):
|
||||||
params = {'mask_length': '24'}
|
params = {'mask_length': [24]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5)
|
||||||
|
params = {'mask_length__gte': 64}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
||||||
|
params = {'mask_length__lte': 25}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
||||||
|
|
||||||
def test_vrf(self):
|
def test_vrf(self):
|
||||||
vrfs = VRF.objects.all()[:2]
|
vrfs = VRF.objects.all()[:2]
|
||||||
|
Loading…
Reference in New Issue
Block a user