diff --git a/netbox/dcim/graphql/filter_mixins.py b/netbox/dcim/graphql/filter_mixins.py index dbe0fba00..41e3e5d44 100644 --- a/netbox/dcim/graphql/filter_mixins.py +++ b/netbox/dcim/graphql/filter_mixins.py @@ -14,16 +14,25 @@ if TYPE_CHECKING: from extras.graphql.filters import * from ipam.graphql.filters import * -__all__ = [ - 'ComponentModelFilterMixin', - 'ModularComponentModelFilterMixin', +__all__ = ( 'CabledObjectModelFilterMixin', + 'ComponentModelFilterMixin', 'ComponentTemplateFilterMixin', - 'ModularComponentTemplateFilterMixin', - 'RenderConfigFilterMixin', 'InterfaceBaseFilterMixin', + 'ModularComponentModelFilterMixin', + 'ModularComponentTemplateFilterMixin', 'RackBaseFilterMixin', -] + 'RenderConfigFilterMixin', + 'ScopedFilterMixin', +) + + +@dataclass +class ScopedFilterMixin(BaseFilterMixin): + scope_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( + strawberry_django.filter_field() + ) + scope_id: ID | None = strawberry_django.filter_field() @dataclass diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py index a257e37d8..385f48cce 100644 --- a/netbox/ipam/graphql/filters.py +++ b/netbox/ipam/graphql/filters.py @@ -11,9 +11,9 @@ from strawberry_django import ( DateFilterLookup, ) from core.graphql.filter_mixins import * +from dcim.graphql.filter_mixins import ScopedFilterMixin from netbox.graphql.filter_mixins import * from tenancy.graphql.filter_mixins import * - from ipam import models from ipam.graphql.filter_mixins import * @@ -191,7 +191,7 @@ class IPRangeFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMi @strawberry_django.filter(models.Prefix, lookups=True) -class PrefixFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin): +class PrefixFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin): prefix: FilterLookup[str] | None = strawberry_django.filter_field() vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field() vrf_id: ID | None = strawberry_django.filter_field() @@ -204,10 +204,6 @@ class PrefixFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMix role_id: ID | None = strawberry_django.filter_field() is_pool: FilterLookup[bool] | None = strawberry_django.filter_field() mark_utilized: FilterLookup[bool] | None = strawberry_django.filter_field() - scope_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( - strawberry_django.filter_field() - ) - scope_id: ID | None = strawberry_django.filter_field() @strawberry_django.filter(models.RIR, lookups=True) @@ -278,12 +274,7 @@ class VLANFilter(TenancyFilterMixin, PrimaryModelFilterMixin): @strawberry_django.filter(models.VLANGroup, lookups=True) -class VLANGroupFilter(OrganizationalModelFilterMixin): - scope_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( - strawberry_django.filter_field() - ) - scope_type_id: ID | None = strawberry_django.filter_field() - scope_id: ID | None = strawberry_django.filter_field() +class VLANGroupFilter(ScopedFilterMixin, OrganizationalModelFilterMixin): vid_ranges: Annotated['IntegerArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/virtualization/graphql/filters.py b/netbox/virtualization/graphql/filters.py index 282cbb196..c9bd96418 100644 --- a/netbox/virtualization/graphql/filters.py +++ b/netbox/virtualization/graphql/filters.py @@ -40,7 +40,7 @@ __all__ = ( @strawberry_django.filter(models.Cluster, lookups=True) -class ClusterFilter(ContactFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin): +class ClusterFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin): name: FilterLookup[str] | None = strawberry_django.filter_field() type: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( strawberry_django.filter_field() diff --git a/netbox/wireless/graphql/filters.py b/netbox/wireless/graphql/filters.py index 73e1f729a..198f0862a 100644 --- a/netbox/wireless/graphql/filters.py +++ b/netbox/wireless/graphql/filters.py @@ -5,6 +5,7 @@ import strawberry_django from strawberry_django import ( FilterLookup, ) +from dcim.graphql.filter_mixins import ScopedFilterMixin from extras.graphql.filter_mixins import * from netbox.graphql.filter_mixins import * from core.graphql.filter_mixins import * @@ -41,7 +42,12 @@ class WirelessLANGroupFilter(NestedGroupModelFilterMixin): @strawberry_django.filter(models.WirelessLAN, lookups=True) -class WirelessLANFilter(WirelessAuthenticationBaseFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin): +class WirelessLANFilter( + WirelessAuthenticationBaseFilterMixin, + ScopedFilterMixin, + TenancyFilterMixin, + PrimaryModelFilterMixin +): ssid: FilterLookup[str] | None = strawberry_django.filter_field() group: Annotated['WirelessLANGroupFilter', strawberry.lazy('wireless.graphql.filters')] | None = ( strawberry_django.filter_field()