mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-28 10:16:10 -06:00
Merge pull request #20015 from mraerino/graphql-contains-prefix
Some checks failed
CodeQL / Analyze (${{ matrix.language }}) (none, actions) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, python) (push) Waiting to run
CI / build (20.x, 3.10) (push) Has been cancelled
CI / build (20.x, 3.11) (push) Has been cancelled
CI / build (20.x, 3.12) (push) Has been cancelled
Some checks failed
CodeQL / Analyze (${{ matrix.language }}) (none, actions) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Waiting to run
CodeQL / Analyze (${{ matrix.language }}) (none, python) (push) Waiting to run
CI / build (20.x, 3.10) (push) Has been cancelled
CI / build (20.x, 3.11) (push) Has been cancelled
CI / build (20.x, 3.12) (push) Has been cancelled
Implement `contains` filter for IPAM prefixes and IP ranges
This commit is contained in:
commit
fec6cf705f
@ -222,6 +222,19 @@ class IPRangeFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMi
|
|||||||
return Q()
|
return Q()
|
||||||
return q
|
return q
|
||||||
|
|
||||||
|
@strawberry_django.filter_field()
|
||||||
|
def contains(self, value: list[str], prefix) -> Q:
|
||||||
|
if not value:
|
||||||
|
return Q()
|
||||||
|
q = Q()
|
||||||
|
for subnet in value:
|
||||||
|
net = netaddr.IPNetwork(subnet.strip())
|
||||||
|
q |= Q(
|
||||||
|
start_address__host__inet__lte=str(netaddr.IPAddress(net.first)),
|
||||||
|
end_address__host__inet__gte=str(netaddr.IPAddress(net.last)),
|
||||||
|
)
|
||||||
|
return q
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.filter_type(models.Prefix, lookups=True)
|
@strawberry_django.filter_type(models.Prefix, lookups=True)
|
||||||
class PrefixFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
|
class PrefixFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
|
||||||
@ -238,6 +251,16 @@ class PrefixFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, Pr
|
|||||||
is_pool: FilterLookup[bool] | None = strawberry_django.filter_field()
|
is_pool: FilterLookup[bool] | None = strawberry_django.filter_field()
|
||||||
mark_utilized: FilterLookup[bool] | None = strawberry_django.filter_field()
|
mark_utilized: FilterLookup[bool] | None = strawberry_django.filter_field()
|
||||||
|
|
||||||
|
@strawberry_django.filter_field()
|
||||||
|
def contains(self, value: list[str], prefix) -> Q:
|
||||||
|
if not value:
|
||||||
|
return Q()
|
||||||
|
q = Q()
|
||||||
|
for subnet in value:
|
||||||
|
query = str(netaddr.IPNetwork(subnet.strip()).cidr)
|
||||||
|
q |= Q(prefix__net_contains=query)
|
||||||
|
return q
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.filter_type(models.RIR, lookups=True)
|
@strawberry_django.filter_type(models.RIR, lookups=True)
|
||||||
class RIRFilter(OrganizationalModelFilterMixin):
|
class RIRFilter(OrganizationalModelFilterMixin):
|
||||||
|
Loading…
Reference in New Issue
Block a user