Refactor filter mixins

This commit is contained in:
Jeremy Stretch 2025-12-05 16:31:31 -05:00
parent bfab461e43
commit 69057dd02c
12 changed files with 82 additions and 77 deletions

View File

@ -3,17 +3,18 @@ from typing import Annotated, TYPE_CHECKING
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry_django import BaseFilterLookup
from netbox.graphql.filters import OrganizationalModelFilter
if TYPE_CHECKING: if TYPE_CHECKING:
from netbox.graphql.enums import ColorEnum from netbox.graphql.enums import ColorEnum
__all__ = ( __all__ = (
'BaseCircuitTypeFilter', 'CircuitTypeFilterMixin',
) )
@dataclass @dataclass
class BaseCircuitTypeFilter(OrganizationalModelFilter): class CircuitTypeFilterMixin:
color: Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')] | None = strawberry_django.filter_field() color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
strawberry_django.filter_field()
)

View File

@ -7,12 +7,12 @@ from strawberry.scalars import ID
from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup
from circuits import models from circuits import models
from circuits.graphql.filter_mixins import CircuitTypeFilterMixin
from dcim.graphql.filter_mixins import CabledObjectModelFilterMixin from dcim.graphql.filter_mixins import CabledObjectModelFilterMixin
from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin
from netbox.graphql.filter_mixins import DistanceFilterMixin, ImageAttachmentFilterMixin from netbox.graphql.filter_mixins import DistanceFilterMixin, ImageAttachmentFilterMixin
from netbox.graphql.filters import ChangeLoggedModelFilter, OrganizationalModelFilter, PrimaryModelFilter from netbox.graphql.filters import ChangeLoggedModelFilter, OrganizationalModelFilter, PrimaryModelFilter
from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
from .filter_mixins import BaseCircuitTypeFilter
if TYPE_CHECKING: if TYPE_CHECKING:
from core.graphql.filters import ContentTypeFilter from core.graphql.filters import ContentTypeFilter
@ -118,7 +118,7 @@ class CircuitFilter(
@strawberry_django.filter_type(models.CircuitType, lookups=True) @strawberry_django.filter_type(models.CircuitType, lookups=True)
class CircuitTypeFilter(BaseCircuitTypeFilter): class CircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter):
pass pass
@ -173,7 +173,7 @@ class ProviderNetworkFilter(PrimaryModelFilter):
@strawberry_django.filter_type(models.VirtualCircuitType, lookups=True) @strawberry_django.filter_type(models.VirtualCircuitType, lookups=True)
class VirtualCircuitTypeFilter(BaseCircuitTypeFilter): class VirtualCircuitTypeFilter(CircuitTypeFilterMixin, OrganizationalModelFilter):
pass pass

View File

@ -7,8 +7,6 @@ from strawberry import ID
from strawberry_django import BaseFilterLookup, FilterLookup from strawberry_django import BaseFilterLookup, FilterLookup
from core.graphql.filters import ContentTypeFilter from core.graphql.filters import ContentTypeFilter
from netbox.graphql.filter_mixins import WeightFilterMixin
from netbox.graphql.filters import ChangeLoggedModelFilter, NetBoxModelFilter, PrimaryModelFilter
from .enums import * from .enums import *
if TYPE_CHECKING: if TYPE_CHECKING:
@ -19,12 +17,12 @@ if TYPE_CHECKING:
__all__ = ( __all__ = (
'CabledObjectModelFilterMixin', 'CabledObjectModelFilterMixin',
'ComponentModelFilter', 'ComponentModelFilterMixin',
'ComponentTemplateFilter', 'ComponentTemplateFilterMixin',
'InterfaceBaseFilterMixin', 'InterfaceBaseFilterMixin',
'ModularComponentModelFilter', 'ModularComponentModelFilterMixin',
'ModularComponentTemplateFilter', 'ModularComponentTemplateFilterMixin',
'RackBaseFilter', 'RackFilterMixin',
'RenderConfigFilterMixin', 'RenderConfigFilterMixin',
'ScopedFilterMixin', 'ScopedFilterMixin',
) )
@ -39,7 +37,7 @@ class ScopedFilterMixin:
@dataclass @dataclass
class ComponentModelFilter(NetBoxModelFilter): class ComponentModelFilterMixin:
device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
device_id: ID | None = strawberry_django.filter_field() device_id: ID | None = strawberry_django.filter_field()
name: FilterLookup[str] | None = strawberry_django.filter_field() name: FilterLookup[str] | None = strawberry_django.filter_field()
@ -48,7 +46,7 @@ class ComponentModelFilter(NetBoxModelFilter):
@dataclass @dataclass
class ModularComponentModelFilter(ComponentModelFilter): class ModularComponentModelFilterMixin(ComponentModelFilterMixin):
module: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() module: Annotated['ModuleFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
module_id: ID | None = strawberry_django.filter_field() module_id: ID | None = strawberry_django.filter_field()
inventory_items: Annotated['InventoryItemFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( inventory_items: Annotated['InventoryItemFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
@ -67,7 +65,7 @@ class CabledObjectModelFilterMixin:
@dataclass @dataclass
class ComponentTemplateFilter(ChangeLoggedModelFilter): class ComponentTemplateFilterMixin:
device_type: Annotated['DeviceTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( device_type: Annotated['DeviceTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -78,7 +76,7 @@ class ComponentTemplateFilter(ChangeLoggedModelFilter):
@dataclass @dataclass
class ModularComponentTemplateFilter(ComponentTemplateFilter): class ModularComponentTemplateFilterMixin(ComponentTemplateFilterMixin):
module_type: Annotated['ModuleTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( module_type: Annotated['ModuleTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -124,7 +122,7 @@ class InterfaceBaseFilterMixin:
@dataclass @dataclass
class RackBaseFilter(WeightFilterMixin, PrimaryModelFilter): class RackFilterMixin:
width: BaseFilterLookup[Annotated['RackWidthEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( width: BaseFilterLookup[Annotated['RackWidthEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -9,22 +9,21 @@ from strawberry_django import BaseFilterLookup, ComparisonFilterLookup, FilterLo
from dcim import models from dcim import models
from dcim.constants import * from dcim.constants import *
from dcim.graphql.enums import InterfaceKindEnum from dcim.graphql.enums import InterfaceKindEnum
from dcim.graphql.filter_mixins import (
ComponentModelFilterMixin, ComponentTemplateFilterMixin, ModularComponentModelFilterMixin,
ModularComponentTemplateFilterMixin, RackFilterMixin,
)
from extras.graphql.filter_mixins import ConfigContextFilterMixin from extras.graphql.filter_mixins import ConfigContextFilterMixin
from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin, WeightFilterMixin from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin, WeightFilterMixin
from netbox.graphql.filters import ( from netbox.graphql.filters import (
ChangeLoggedModelFilter, NestedGroupModelFilter, OrganizationalModelFilter, PrimaryModelFilter, ChangeLoggedModelFilter, NestedGroupModelFilter, OrganizationalModelFilter, PrimaryModelFilter, NetBoxModelFilter,
) )
from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
from virtualization.models import VMInterface from virtualization.models import VMInterface
from .filter_mixins import ( from .filter_mixins import (
CabledObjectModelFilterMixin, CabledObjectModelFilterMixin,
ComponentModelFilter,
ComponentTemplateFilter,
InterfaceBaseFilterMixin, InterfaceBaseFilterMixin,
ModularComponentModelFilter,
ModularComponentTemplateFilter,
RackBaseFilter,
RenderConfigFilterMixin, RenderConfigFilterMixin,
) )
@ -128,7 +127,7 @@ class CableTerminationFilter(ChangeLoggedModelFilter):
@strawberry_django.filter_type(models.ConsolePort, lookups=True) @strawberry_django.filter_type(models.ConsolePort, lookups=True)
class ConsolePortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class ConsolePortFilter(ModularComponentTemplateFilterMixin, CabledObjectModelFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -138,14 +137,18 @@ class ConsolePortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixi
@strawberry_django.filter_type(models.ConsolePortTemplate, lookups=True) @strawberry_django.filter_type(models.ConsolePortTemplate, lookups=True)
class ConsolePortTemplateFilter(ModularComponentTemplateFilter): class ConsolePortTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@strawberry_django.filter_type(models.ConsoleServerPort, lookups=True) @strawberry_django.filter_type(models.ConsoleServerPort, lookups=True)
class ConsoleServerPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class ConsoleServerPortFilter(
ModularComponentTemplateFilterMixin,
CabledObjectModelFilterMixin,
ChangeLoggedModelFilter
):
type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -155,7 +158,7 @@ class ConsoleServerPortFilter(ModularComponentModelFilter, CabledObjectModelFilt
@strawberry_django.filter_type(models.ConsoleServerPortTemplate, lookups=True) @strawberry_django.filter_type(models.ConsoleServerPortTemplate, lookups=True)
class ConsoleServerPortTemplateFilter(ModularComponentTemplateFilter): class ConsoleServerPortTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['ConsolePortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -281,7 +284,7 @@ class DeviceFilter(
@strawberry_django.filter_type(models.DeviceBay, lookups=True) @strawberry_django.filter_type(models.DeviceBay, lookups=True)
class DeviceBayFilter(ComponentModelFilter): class DeviceBayFilter(ComponentModelFilterMixin, NetBoxModelFilter):
installed_device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( installed_device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -289,12 +292,12 @@ class DeviceBayFilter(ComponentModelFilter):
@strawberry_django.filter_type(models.DeviceBayTemplate, lookups=True) @strawberry_django.filter_type(models.DeviceBayTemplate, lookups=True)
class DeviceBayTemplateFilter(ComponentTemplateFilter): class DeviceBayTemplateFilter(ComponentTemplateFilterMixin, ChangeLoggedModelFilter):
pass pass
@strawberry_django.filter_type(models.InventoryItemTemplate, lookups=True) @strawberry_django.filter_type(models.InventoryItemTemplate, lookups=True)
class InventoryItemTemplateFilter(ComponentTemplateFilter): class InventoryItemTemplateFilter(ComponentTemplateFilterMixin, ChangeLoggedModelFilter):
parent: Annotated['InventoryItemTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( parent: Annotated['InventoryItemTemplateFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -398,7 +401,7 @@ class DeviceTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilter, WeightFil
@strawberry_django.filter_type(models.FrontPort, lookups=True) @strawberry_django.filter_type(models.FrontPort, lookups=True)
class FrontPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class FrontPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin, NetBoxModelFilter):
type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -415,7 +418,7 @@ class FrontPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin)
@strawberry_django.filter_type(models.FrontPortTemplate, lookups=True) @strawberry_django.filter_type(models.FrontPortTemplate, lookups=True)
class FrontPortTemplateFilter(ModularComponentTemplateFilter): class FrontPortTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -459,7 +462,12 @@ class MACAddressFilter(PrimaryModelFilter):
@strawberry_django.filter_type(models.Interface, lookups=True) @strawberry_django.filter_type(models.Interface, lookups=True)
class InterfaceFilter(ModularComponentModelFilter, InterfaceBaseFilterMixin, CabledObjectModelFilterMixin): class InterfaceFilter(
ModularComponentModelFilterMixin,
InterfaceBaseFilterMixin,
CabledObjectModelFilterMixin,
NetBoxModelFilter
):
vcdcs: Annotated['VirtualDeviceContextFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( vcdcs: Annotated['VirtualDeviceContextFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -549,7 +557,7 @@ class InterfaceFilter(ModularComponentModelFilter, InterfaceBaseFilterMixin, Cab
@strawberry_django.filter_type(models.InterfaceTemplate, lookups=True) @strawberry_django.filter_type(models.InterfaceTemplate, lookups=True)
class InterfaceTemplateFilter(ModularComponentTemplateFilter): class InterfaceTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['InterfaceTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['InterfaceTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -571,7 +579,7 @@ class InterfaceTemplateFilter(ModularComponentTemplateFilter):
@strawberry_django.filter_type(models.InventoryItem, lookups=True) @strawberry_django.filter_type(models.InventoryItem, lookups=True)
class InventoryItemFilter(ComponentModelFilter): class InventoryItemFilter(ComponentModelFilterMixin, NetBoxModelFilter):
parent: Annotated['InventoryItemFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( parent: Annotated['InventoryItemFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -675,7 +683,7 @@ class ModuleFilter(PrimaryModelFilter, ConfigContextFilterMixin):
@strawberry_django.filter_type(models.ModuleBay, lookups=True) @strawberry_django.filter_type(models.ModuleBay, lookups=True)
class ModuleBayFilter(ModularComponentModelFilter): class ModuleBayFilter(ModularComponentModelFilterMixin, NetBoxModelFilter):
parent: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = ( parent: Annotated['ModuleBayFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -684,7 +692,7 @@ class ModuleBayFilter(ModularComponentModelFilter):
@strawberry_django.filter_type(models.ModuleBayTemplate, lookups=True) @strawberry_django.filter_type(models.ModuleBayTemplate, lookups=True)
class ModuleBayTemplateFilter(ModularComponentTemplateFilter): class ModuleBayTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
position: FilterLookup[str] | None = strawberry_django.filter_field() position: FilterLookup[str] | None = strawberry_django.filter_field()
@ -792,7 +800,7 @@ class PowerFeedFilter(CabledObjectModelFilterMixin, TenancyFilterMixin, PrimaryM
@strawberry_django.filter_type(models.PowerOutlet, lookups=True) @strawberry_django.filter_type(models.PowerOutlet, lookups=True)
class PowerOutletFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class PowerOutletFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin, NetBoxModelFilter):
type: BaseFilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -812,7 +820,7 @@ class PowerOutletFilter(ModularComponentModelFilter, CabledObjectModelFilterMixi
@strawberry_django.filter_type(models.PowerOutletTemplate, lookups=True) @strawberry_django.filter_type(models.PowerOutletTemplate, lookups=True)
class PowerOutletTemplateFilter(ModularComponentModelFilter): class PowerOutletTemplateFilter(ModularComponentModelFilterMixin, NetBoxModelFilter):
type: BaseFilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PowerOutletTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -839,7 +847,7 @@ class PowerPanelFilter(ContactFilterMixin, ImageAttachmentFilterMixin, PrimaryMo
@strawberry_django.filter_type(models.PowerPort, lookups=True) @strawberry_django.filter_type(models.PowerPort, lookups=True)
class PowerPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class PowerPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin, NetBoxModelFilter):
type: BaseFilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -852,7 +860,7 @@ class PowerPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin)
@strawberry_django.filter_type(models.PowerPortTemplate, lookups=True) @strawberry_django.filter_type(models.PowerPortTemplate, lookups=True)
class PowerPortTemplateFilter(ModularComponentTemplateFilter): class PowerPortTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PowerPortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -865,7 +873,7 @@ class PowerPortTemplateFilter(ModularComponentTemplateFilter):
@strawberry_django.filter_type(models.RackType, lookups=True) @strawberry_django.filter_type(models.RackType, lookups=True)
class RackTypeFilter(RackBaseFilter): class RackTypeFilter(RackFilterMixin, WeightFilterMixin, PrimaryModelFilter):
form_factor: BaseFilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( form_factor: BaseFilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -880,7 +888,13 @@ class RackTypeFilter(RackBaseFilter):
@strawberry_django.filter_type(models.Rack, lookups=True) @strawberry_django.filter_type(models.Rack, lookups=True)
class RackFilter(ContactFilterMixin, ImageAttachmentFilterMixin, TenancyFilterMixin, RackBaseFilter): class RackFilter(
ContactFilterMixin,
ImageAttachmentFilterMixin,
TenancyFilterMixin,
RackFilterMixin,
PrimaryModelFilter
):
form_factor: BaseFilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( form_factor: BaseFilterLookup[Annotated['RackFormFactorEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -936,7 +950,7 @@ class RackRoleFilter(OrganizationalModelFilter):
@strawberry_django.filter_type(models.RearPort, lookups=True) @strawberry_django.filter_type(models.RearPort, lookups=True)
class RearPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin): class RearPortFilter(ModularComponentModelFilterMixin, CabledObjectModelFilterMixin, NetBoxModelFilter):
type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -949,7 +963,7 @@ class RearPortFilter(ModularComponentModelFilter, CabledObjectModelFilterMixin):
@strawberry_django.filter_type(models.RearPortTemplate, lookups=True) @strawberry_django.filter_type(models.RearPortTemplate, lookups=True)
class RearPortTemplateFilter(ModularComponentTemplateFilter): class RearPortTemplateFilter(ModularComponentTemplateFilterMixin, ChangeLoggedModelFilter):
type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = ( type: BaseFilterLookup[Annotated['PortTypeEnum', strawberry.lazy('dcim.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -3,7 +3,6 @@ from typing import Annotated, TYPE_CHECKING
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry_django import FilterLookup
if TYPE_CHECKING: if TYPE_CHECKING:
from netbox.graphql.filter_lookups import JSONFilter from netbox.graphql.filter_lookups import JSONFilter
@ -14,7 +13,6 @@ __all__ = (
'JournalEntriesFilterMixin', 'JournalEntriesFilterMixin',
'TagsFilterMixin', 'TagsFilterMixin',
'ConfigContextFilterMixin', 'ConfigContextFilterMixin',
'TagBaseFilter',
) )
@ -42,9 +40,3 @@ class ConfigContextFilterMixin:
local_context_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( local_context_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@dataclass
class TagBaseFilter:
name: FilterLookup[str] | None = strawberry_django.filter_field()
slug: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@ -6,7 +6,7 @@ from strawberry.scalars import ID
from strawberry_django import BaseFilterLookup, FilterLookup from strawberry_django import BaseFilterLookup, FilterLookup
from extras import models from extras import models
from extras.graphql.filter_mixins import TagBaseFilter, CustomFieldsFilterMixin, TagsFilterMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin
from netbox.graphql.filter_mixins import SyncedDataFilterMixin from netbox.graphql.filter_mixins import SyncedDataFilterMixin
from netbox.graphql.filters import ChangeLoggedModelFilter, PrimaryModelFilter from netbox.graphql.filters import ChangeLoggedModelFilter, PrimaryModelFilter
@ -295,7 +295,9 @@ class TableConfigFilter(ChangeLoggedModelFilter):
@strawberry_django.filter_type(models.Tag, lookups=True) @strawberry_django.filter_type(models.Tag, lookups=True)
class TagFilter(ChangeLoggedModelFilter, TagBaseFilter): class TagFilter(ChangeLoggedModelFilter):
name: FilterLookup[str] | None = strawberry_django.filter_field()
slug: FilterLookup[str] | None = strawberry_django.filter_field()
color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -9,12 +9,12 @@ if TYPE_CHECKING:
from .enums import * from .enums import *
__all__ = ( __all__ = (
'ServiceBaseFilterMixin', 'ServiceFilterMixin',
) )
@dataclass @dataclass
class ServiceBaseFilterMixin: class ServiceFilterMixin:
protocol: Annotated['ServiceProtocolEnum', strawberry.lazy('ipam.graphql.enums')] | None = ( protocol: Annotated['ServiceProtocolEnum', strawberry.lazy('ipam.graphql.enums')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -12,7 +12,7 @@ from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup
from dcim.graphql.filter_mixins import ScopedFilterMixin from dcim.graphql.filter_mixins import ScopedFilterMixin
from dcim.models import Device from dcim.models import Device
from ipam import models from ipam import models
from ipam.graphql.filter_mixins import ServiceBaseFilterMixin from ipam.graphql.filter_mixins import ServiceFilterMixin
from netbox.graphql.filters import ( from netbox.graphql.filters import (
ChangeLoggedModelFilter, NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter, ChangeLoggedModelFilter, NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter,
) )
@ -340,7 +340,7 @@ class RouteTargetFilter(TenancyFilterMixin, PrimaryModelFilter):
@strawberry_django.filter_type(models.Service, lookups=True) @strawberry_django.filter_type(models.Service, lookups=True)
class ServiceFilter(ContactFilterMixin, ServiceBaseFilterMixin, PrimaryModelFilter): class ServiceFilter(ContactFilterMixin, ServiceFilterMixin, PrimaryModelFilter):
name: FilterLookup[str] | None = strawberry_django.filter_field() name: FilterLookup[str] | None = strawberry_django.filter_field()
ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
@ -352,7 +352,7 @@ class ServiceFilter(ContactFilterMixin, ServiceBaseFilterMixin, PrimaryModelFilt
@strawberry_django.filter_type(models.ServiceTemplate, lookups=True) @strawberry_django.filter_type(models.ServiceTemplate, lookups=True)
class ServiceTemplateFilter(ServiceBaseFilterMixin, PrimaryModelFilter): class ServiceTemplateFilter(ServiceFilterMixin, PrimaryModelFilter):
name: FilterLookup[str] | None = strawberry_django.filter_field() name: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@ -3,21 +3,19 @@ from typing import Annotated, TYPE_CHECKING
import strawberry import strawberry
import strawberry_django import strawberry_django
from strawberry import ID from strawberry.scalars import ID
from strawberry_django import FilterLookup from strawberry_django import FilterLookup
from netbox.graphql.filters import NetBoxModelFilter
if TYPE_CHECKING: if TYPE_CHECKING:
from .filters import VirtualMachineFilter from .filters import VirtualMachineFilter
__all__ = ( __all__ = (
'VMComponentFilter', 'VMComponentFilterMixin',
) )
@dataclass @dataclass
class VMComponentFilter(NetBoxModelFilter): class VMComponentFilterMixin:
virtual_machine: Annotated['VirtualMachineFilter', strawberry.lazy('virtualization.graphql.filters')] | None = ( virtual_machine: Annotated['VirtualMachineFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -8,10 +8,10 @@ from strawberry_django import BaseFilterLookup, FilterLookup
from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin
from extras.graphql.filter_mixins import ConfigContextFilterMixin from extras.graphql.filter_mixins import ConfigContextFilterMixin
from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin
from netbox.graphql.filters import OrganizationalModelFilter, PrimaryModelFilter from netbox.graphql.filters import NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter
from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
from virtualization import models from virtualization import models
from virtualization.graphql.filter_mixins import VMComponentFilter from virtualization.graphql.filter_mixins import VMComponentFilterMixin
if TYPE_CHECKING: if TYPE_CHECKING:
from .enums import * from .enums import *
@ -135,7 +135,7 @@ class VirtualMachineFilter(
@strawberry_django.filter_type(models.VMInterface, lookups=True) @strawberry_django.filter_type(models.VMInterface, lookups=True)
class VMInterfaceFilter(VMComponentFilter, InterfaceBaseFilterMixin): class VMInterfaceFilter(InterfaceBaseFilterMixin, VMComponentFilterMixin, NetBoxModelFilter):
ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = ( ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )
@ -160,7 +160,7 @@ class VMInterfaceFilter(VMComponentFilter, InterfaceBaseFilterMixin):
@strawberry_django.filter_type(models.VirtualDisk, lookups=True) @strawberry_django.filter_type(models.VirtualDisk, lookups=True)
class VirtualDiskFilter(VMComponentFilter): class VirtualDiskFilter(VMComponentFilterMixin, NetBoxModelFilter):
size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -9,12 +9,12 @@ if TYPE_CHECKING:
from .enums import * from .enums import *
__all__ = ( __all__ = (
'WirelessAuthenticationBaseFilterMixin', 'WirelessAuthenticationFilterMixin',
) )
@dataclass @dataclass
class WirelessAuthenticationBaseFilterMixin: class WirelessAuthenticationFilterMixin:
auth_type: Annotated['WirelessAuthTypeEnum', strawberry.lazy('wireless.graphql.enums')] | None = ( auth_type: Annotated['WirelessAuthTypeEnum', strawberry.lazy('wireless.graphql.enums')] | None = (
strawberry_django.filter_field() strawberry_django.filter_field()
) )

View File

@ -10,7 +10,7 @@ from netbox.graphql.filter_mixins import DistanceFilterMixin
from netbox.graphql.filters import PrimaryModelFilter, NestedGroupModelFilter from netbox.graphql.filters import PrimaryModelFilter, NestedGroupModelFilter
from tenancy.graphql.filter_mixins import TenancyFilterMixin from tenancy.graphql.filter_mixins import TenancyFilterMixin
from wireless import models from wireless import models
from .filter_mixins import WirelessAuthenticationBaseFilterMixin from .filter_mixins import WirelessAuthenticationFilterMixin
if TYPE_CHECKING: if TYPE_CHECKING:
from dcim.graphql.filters import InterfaceFilter from dcim.graphql.filters import InterfaceFilter
@ -31,7 +31,7 @@ class WirelessLANGroupFilter(NestedGroupModelFilter):
@strawberry_django.filter_type(models.WirelessLAN, lookups=True) @strawberry_django.filter_type(models.WirelessLAN, lookups=True)
class WirelessLANFilter( class WirelessLANFilter(
WirelessAuthenticationBaseFilterMixin, WirelessAuthenticationFilterMixin,
ScopedFilterMixin, ScopedFilterMixin,
TenancyFilterMixin, TenancyFilterMixin,
PrimaryModelFilter PrimaryModelFilter
@ -50,7 +50,7 @@ class WirelessLANFilter(
@strawberry_django.filter_type(models.WirelessLink, lookups=True) @strawberry_django.filter_type(models.WirelessLink, lookups=True)
class WirelessLinkFilter( class WirelessLinkFilter(
WirelessAuthenticationBaseFilterMixin, WirelessAuthenticationFilterMixin,
DistanceFilterMixin, DistanceFilterMixin,
TenancyFilterMixin, TenancyFilterMixin,
PrimaryModelFilter PrimaryModelFilter