diff --git a/docs/plugins/development/migration-v4.md b/docs/plugins/development/migration-v4.md index 4fa5ea752..ee84950d2 100644 --- a/docs/plugins/development/migration-v4.md +++ b/docs/plugins/development/migration-v4.md @@ -325,14 +325,14 @@ class CircuitTypeType(OrganizationalObjectType): ### Change filters.py -Strawberry currently doesn't directly support django-filter, so an explicit filters.py file will need to be created. NetBox includes a new `autotype_decorator` used to automatically wrap FilterSets to reduce the required code to a minimum. +Filter classes should inherit from `netbox.graphql.filters.BaseModelFilter`. ```python title="New" import strawberry import strawberry_django from circuits import filtersets, models -from netbox.graphql.filter_mixins import autotype_decorator, BaseFilter +from netbox.graphql.filters import BaseModelFilter __all__ = ( 'CircuitFilter', @@ -340,8 +340,7 @@ __all__ = ( @strawberry_django.filter(models.Circuit, lookups=True) -@autotype_decorator(filtersets.CircuitFilterSet) -class CircuitFilter(BaseFilter): +class CircuitFilter(BaseModelFilter): pass ``` diff --git a/netbox/circuits/graphql/filters.py b/netbox/circuits/graphql/filters.py index 933fd1c60..25e267a5f 100644 --- a/netbox/circuits/graphql/filters.py +++ b/netbox/circuits/graphql/filters.py @@ -7,7 +7,6 @@ from strawberry.scalars import ID from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup from circuits import models -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin from dcim.graphql.filter_mixins import CabledObjectModelFilterMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin from netbox.graphql.filter_mixins import DistanceFilterMixin, ImageAttachmentFilterMixin @@ -39,7 +38,6 @@ __all__ = ( @strawberry_django.filter_type(models.CircuitTermination, lookups=True) class CircuitTerminationFilter( - BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter, @@ -130,9 +128,7 @@ class CircuitGroupFilter(TenancyFilterMixin, OrganizationalModelFilter): @strawberry_django.filter_type(models.CircuitGroupAssignment, lookups=True) -class CircuitGroupAssignmentFilter( - BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter -): +class CircuitGroupAssignmentFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): member_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -205,9 +201,7 @@ class VirtualCircuitFilter(TenancyFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.VirtualCircuitTermination, lookups=True) -class VirtualCircuitTerminationFilter( - BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter -): +class VirtualCircuitTerminationFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): virtual_circuit: Annotated['VirtualCircuitFilter', strawberry.lazy('circuits.graphql.filters')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/core/graphql/filter_mixins.py b/netbox/core/graphql/filter_mixins.py deleted file mode 100644 index ed1410826..000000000 --- a/netbox/core/graphql/filter_mixins.py +++ /dev/null @@ -1,19 +0,0 @@ -from dataclasses import dataclass - -import strawberry_django -from strawberry import ID -from strawberry_django import FilterLookup - -__all__ = ( - 'BaseFilter', - 'BaseObjectTypeFilterMixin', -) - - -# @strawberry.input -class BaseFilter: ... - - -@dataclass -class BaseObjectTypeFilterMixin(BaseFilter): - id: FilterLookup[ID] | None = strawberry_django.filter_field() diff --git a/netbox/core/graphql/filters.py b/netbox/core/graphql/filters.py index aa908cc65..2e78b878b 100644 --- a/netbox/core/graphql/filters.py +++ b/netbox/core/graphql/filters.py @@ -8,8 +8,7 @@ from strawberry.scalars import ID from strawberry_django import BaseFilterLookup, DatetimeFilterLookup, FilterLookup from core import models -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin -from netbox.graphql.filters import PrimaryModelFilter +from netbox.graphql.filters import BaseModelFilter, PrimaryModelFilter from .enums import * if TYPE_CHECKING: @@ -25,7 +24,7 @@ __all__ = ( @strawberry_django.filter_type(models.DataFile, lookups=True) -class DataFileFilter(BaseObjectTypeFilterMixin): +class DataFileFilter(BaseModelFilter): created: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() last_updated: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() source: Annotated['DataSourceFilter', strawberry.lazy('core.graphql.filters')] | None = ( @@ -59,7 +58,7 @@ class DataSourceFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.ObjectChange, lookups=True) -class ObjectChangeFilter(BaseObjectTypeFilterMixin): +class ObjectChangeFilter(BaseModelFilter): time: DatetimeFilterLookup[datetime] | None = strawberry_django.filter_field() user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() user_name: FilterLookup[str] | None = strawberry_django.filter_field() @@ -86,6 +85,6 @@ class ObjectChangeFilter(BaseObjectTypeFilterMixin): @strawberry_django.filter_type(DjangoContentType, lookups=True) -class ContentTypeFilter(BaseObjectTypeFilterMixin): +class ContentTypeFilter(BaseModelFilter): app_label: FilterLookup[str] | None = strawberry_django.filter_field() model: FilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/dcim/graphql/filter_mixins.py b/netbox/dcim/graphql/filter_mixins.py index a0a535550..2f5f6016c 100644 --- a/netbox/dcim/graphql/filter_mixins.py +++ b/netbox/dcim/graphql/filter_mixins.py @@ -6,7 +6,6 @@ import strawberry_django from strawberry import ID from strawberry_django import BaseFilterLookup, FilterLookup -from core.graphql.filter_mixins import BaseFilter from core.graphql.filters import ContentTypeFilter from netbox.graphql.filter_mixins import WeightFilterMixin from netbox.graphql.filters import ChangeLoggedModelFilter, NetBoxModelFilter, PrimaryModelFilter @@ -32,7 +31,7 @@ __all__ = ( @dataclass -class ScopedFilterMixin(BaseFilter): +class ScopedFilterMixin: scope_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -58,7 +57,7 @@ class ModularComponentModelFilter(ComponentModelFilter): @dataclass -class CabledObjectModelFilterMixin(BaseFilter): +class CabledObjectModelFilterMixin: cable: Annotated['CableFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field() cable_id: ID | None = strawberry_django.filter_field() cable_end: ( @@ -86,7 +85,7 @@ class ModularComponentTemplateFilter(ComponentTemplateFilter): @dataclass -class RenderConfigFilterMixin(BaseFilter): +class RenderConfigFilterMixin: config_template: Annotated['ConfigTemplateFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -94,7 +93,7 @@ class RenderConfigFilterMixin(BaseFilter): @dataclass -class InterfaceBaseFilterMixin(BaseFilter): +class InterfaceBaseFilterMixin: enabled: FilterLookup[bool] | None = strawberry_django.filter_field() mtu: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() diff --git a/netbox/extras/graphql/filter_mixins.py b/netbox/extras/graphql/filter_mixins.py index 75a4c548c..f990300ad 100644 --- a/netbox/extras/graphql/filter_mixins.py +++ b/netbox/extras/graphql/filter_mixins.py @@ -5,8 +5,6 @@ import strawberry import strawberry_django from strawberry_django import FilterLookup -from core.graphql.filter_mixins import BaseFilter - if TYPE_CHECKING: from netbox.graphql.filter_lookups import JSONFilter from .filters import * @@ -21,32 +19,32 @@ __all__ = ( @dataclass -class CustomFieldsFilterMixin(BaseFilter): +class CustomFieldsFilterMixin: custom_field_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @dataclass -class JournalEntriesFilterMixin(BaseFilter): +class JournalEntriesFilterMixin: journal_entries: Annotated['JournalEntryFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) @dataclass -class TagsFilterMixin(BaseFilter): +class TagsFilterMixin: tags: Annotated['TagFilter', strawberry.lazy('extras.graphql.filters')] | None = strawberry_django.filter_field() @dataclass -class ConfigContextFilterMixin(BaseFilter): +class ConfigContextFilterMixin: local_context_data: Annotated['JSONFilter', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() ) @dataclass -class TagBaseFilter(BaseFilter): +class TagBaseFilter: name: FilterLookup[str] | None = strawberry_django.filter_field() slug: FilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/extras/graphql/filters.py b/netbox/extras/graphql/filters.py index a21319b29..01080c290 100644 --- a/netbox/extras/graphql/filters.py +++ b/netbox/extras/graphql/filters.py @@ -5,7 +5,6 @@ import strawberry_django from strawberry.scalars import ID from strawberry_django import BaseFilterLookup, FilterLookup -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin from extras import models from extras.graphql.filter_mixins import TagBaseFilter, CustomFieldsFilterMixin, TagsFilterMixin from netbox.graphql.filter_mixins import SyncedDataFilterMixin @@ -43,7 +42,7 @@ __all__ = ( @strawberry_django.filter_type(models.ConfigContext, lookups=True) -class ConfigContextFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLoggedModelFilter): +class ConfigContextFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() weight: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( strawberry_django.filter_field() @@ -107,7 +106,7 @@ class ConfigContextProfileFilter(SyncedDataFilterMixin, PrimaryModelFilter): @strawberry_django.filter_type(models.ConfigTemplate, lookups=True) -class ConfigTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLoggedModelFilter): +class ConfigTemplateFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() template_code: FilterLookup[str] | None = strawberry_django.filter_field() @@ -121,7 +120,7 @@ class ConfigTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, Cha @strawberry_django.filter_type(models.CustomField, lookups=True) -class CustomFieldFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class CustomFieldFilter(ChangeLoggedModelFilter): type: BaseFilterLookup[Annotated['CustomFieldTypeEnum', strawberry.lazy('extras.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -180,7 +179,7 @@ class CustomFieldFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.CustomFieldChoiceSet, lookups=True) -class CustomFieldChoiceSetFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class CustomFieldChoiceSetFilter(ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() base_choices: ( @@ -195,7 +194,7 @@ class CustomFieldChoiceSetFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFil @strawberry_django.filter_type(models.CustomLink, lookups=True) -class CustomLinkFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class CustomLinkFilter(ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() enabled: FilterLookup[bool] | None = strawberry_django.filter_field() link_text: FilterLookup[str] | None = strawberry_django.filter_field() @@ -213,7 +212,7 @@ class CustomLinkFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.ExportTemplate, lookups=True) -class ExportTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, ChangeLoggedModelFilter): +class ExportTemplateFilter(SyncedDataFilterMixin, ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() template_code: FilterLookup[str] | None = strawberry_django.filter_field() @@ -227,7 +226,7 @@ class ExportTemplateFilter(BaseObjectTypeFilterMixin, SyncedDataFilterMixin, Cha @strawberry_django.filter_type(models.ImageAttachment, lookups=True) -class ImageAttachmentFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class ImageAttachmentFilter(ChangeLoggedModelFilter): object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -242,7 +241,7 @@ class ImageAttachmentFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.JournalEntry, lookups=True) -class JournalEntryFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): +class JournalEntryFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): assigned_object_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -258,7 +257,7 @@ class JournalEntryFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, Tag @strawberry_django.filter_type(models.NotificationGroup, lookups=True) -class NotificationGroupFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class NotificationGroupFilter(ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() groups: Annotated['GroupFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() @@ -266,7 +265,7 @@ class NotificationGroupFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter @strawberry_django.filter_type(models.SavedFilter, lookups=True) -class SavedFilterFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class SavedFilterFilter(ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() slug: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() @@ -283,7 +282,7 @@ class SavedFilterFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.TableConfig, lookups=True) -class TableConfigFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class TableConfigFilter(ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() user: Annotated['UserFilter', strawberry.lazy('users.graphql.filters')] | None = strawberry_django.filter_field() @@ -296,7 +295,7 @@ class TableConfigFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): @strawberry_django.filter_type(models.Tag, lookups=True) -class TagFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter, TagBaseFilter): +class TagFilter(ChangeLoggedModelFilter, TagBaseFilter): color: BaseFilterLookup[Annotated['ColorEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( strawberry_django.filter_field() ) @@ -304,7 +303,7 @@ class TagFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter, TagBaseFilte @strawberry_django.filter_type(models.Webhook, lookups=True) -class WebhookFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): +class WebhookFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() payload_url: FilterLookup[str] | None = strawberry_django.filter_field() @@ -325,7 +324,7 @@ class WebhookFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilt @strawberry_django.filter_type(models.EventRule, lookups=True) -class EventRuleFilter(BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): +class EventRuleFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() event_types: Annotated['StringArrayLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = ( diff --git a/netbox/ipam/graphql/filter_mixins.py b/netbox/ipam/graphql/filter_mixins.py index 07589cdf5..817f72100 100644 --- a/netbox/ipam/graphql/filter_mixins.py +++ b/netbox/ipam/graphql/filter_mixins.py @@ -4,8 +4,6 @@ from typing import Annotated, TYPE_CHECKING import strawberry import strawberry_django -from core.graphql.filter_mixins import BaseFilter - if TYPE_CHECKING: from netbox.graphql.filter_lookups import IntegerLookup from .enums import * @@ -16,7 +14,7 @@ __all__ = ( @dataclass -class ServiceBaseFilterMixin(BaseFilter): +class ServiceBaseFilterMixin: protocol: Annotated['ServiceProtocolEnum', strawberry.lazy('ipam.graphql.enums')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py index b41a0dab8..7d0e22558 100644 --- a/netbox/ipam/graphql/filters.py +++ b/netbox/ipam/graphql/filters.py @@ -9,7 +9,6 @@ from netaddr.core import AddrFormatError from strawberry.scalars import ID from strawberry_django import BaseFilterLookup, FilterLookup, DateFilterLookup -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin from dcim.graphql.filter_mixins import ScopedFilterMixin from dcim.models import Device from ipam import models @@ -131,7 +130,7 @@ class FHRPGroupFilter(PrimaryModelFilter): @strawberry_django.filter_type(models.FHRPGroupAssignment, lookups=True) -class FHRPGroupAssignmentFilter(BaseObjectTypeFilterMixin, ChangeLoggedModelFilter): +class FHRPGroupAssignmentFilter(ChangeLoggedModelFilter): interface_type: Annotated['ContentTypeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/netbox/graphql/filter_mixins.py b/netbox/netbox/graphql/filter_mixins.py index 19340e63f..3bb818907 100644 --- a/netbox/netbox/graphql/filter_mixins.py +++ b/netbox/netbox/graphql/filter_mixins.py @@ -6,8 +6,6 @@ import strawberry import strawberry_django from strawberry_django import BaseFilterLookup, FilterLookup, DatetimeFilterLookup -from core.graphql.filter_mixins import BaseFilter - __all__ = ( 'DistanceFilterMixin', 'ImageAttachmentFilterMixin', @@ -25,14 +23,14 @@ if TYPE_CHECKING: @dataclass -class ImageAttachmentFilterMixin(BaseFilter): +class ImageAttachmentFilterMixin: images: Annotated['ImageAttachmentFilter', strawberry.lazy('extras.graphql.filters')] | None = ( strawberry_django.filter_field() ) @dataclass -class WeightFilterMixin(BaseFilter): +class WeightFilterMixin: weight: FilterLookup[float] | None = strawberry_django.filter_field() weight_unit: BaseFilterLookup[Annotated['WeightUnitEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( strawberry_django.filter_field() @@ -40,7 +38,7 @@ class WeightFilterMixin(BaseFilter): @dataclass -class SyncedDataFilterMixin(BaseFilter): +class SyncedDataFilterMixin: data_source: Annotated['DataSourceFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() ) @@ -55,7 +53,7 @@ class SyncedDataFilterMixin(BaseFilter): @dataclass -class DistanceFilterMixin(BaseFilter): +class DistanceFilterMixin: distance: FilterLookup[float] | None = strawberry_django.filter_field() distance_unit: BaseFilterLookup[Annotated['DistanceUnitEnum', strawberry.lazy('netbox.graphql.enums')]] | None = ( strawberry_django.filter_field() diff --git a/netbox/netbox/graphql/filters.py b/netbox/netbox/graphql/filters.py index 4b48b56a3..dc8b40d2b 100644 --- a/netbox/netbox/graphql/filters.py +++ b/netbox/netbox/graphql/filters.py @@ -7,13 +7,13 @@ import strawberry_django from strawberry import ID from strawberry_django import FilterLookup, DatetimeFilterLookup -from core.graphql.filter_mixins import BaseFilter from extras.graphql.filter_mixins import CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin if TYPE_CHECKING: from .filters import * __all__ = ( + 'BaseModelFilter', 'ChangeLoggedModelFilter', 'NestedGroupModelFilter', 'NetBoxModelFilter', @@ -22,9 +22,12 @@ __all__ = ( ) -@dataclass -class ChangeLoggedModelFilter(BaseFilter): +class BaseModelFilter: id: FilterLookup[ID] | None = strawberry_django.filter_field() + + +@dataclass +class ChangeLoggedModelFilter(BaseModelFilter): # TODO: "changelog" is not a valid field name; needs to be updated for ObjectChange changelog: Annotated['ObjectChangeFilter', strawberry.lazy('core.graphql.filters')] | None = ( strawberry_django.filter_field() @@ -34,11 +37,10 @@ class ChangeLoggedModelFilter(BaseFilter): class NetBoxModelFilter( - ChangeLoggedModelFilter, CustomFieldsFilterMixin, JournalEntriesFilterMixin, TagsFilterMixin, - BaseFilter, + ChangeLoggedModelFilter, ): pass diff --git a/netbox/tenancy/graphql/filter_mixins.py b/netbox/tenancy/graphql/filter_mixins.py index 698b031e1..1e924ac2d 100644 --- a/netbox/tenancy/graphql/filter_mixins.py +++ b/netbox/tenancy/graphql/filter_mixins.py @@ -5,8 +5,6 @@ import strawberry import strawberry_django from strawberry import ID -from core.graphql.filter_mixins import BaseFilter - if TYPE_CHECKING: from netbox.graphql.filter_lookups import TreeNodeFilter from .filters import ContactAssignmentFilter, TenantFilter, TenantGroupFilter @@ -18,14 +16,14 @@ __all__ = ( @dataclass -class ContactFilterMixin(BaseFilter): +class ContactFilterMixin: contacts: Annotated['ContactAssignmentFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( strawberry_django.filter_field() ) @dataclass -class TenancyFilterMixin(BaseFilter): +class TenancyFilterMixin: tenant: Annotated['TenantFilter', strawberry.lazy('tenancy.graphql.filters')] | None = ( strawberry_django.filter_field() ) diff --git a/netbox/users/graphql/filters.py b/netbox/users/graphql/filters.py index 52a768b85..63728c46b 100644 --- a/netbox/users/graphql/filters.py +++ b/netbox/users/graphql/filters.py @@ -5,7 +5,7 @@ import strawberry import strawberry_django from strawberry_django import DatetimeFilterLookup, FilterLookup -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin +from netbox.graphql.filters import BaseModelFilter from users import models __all__ = ( @@ -17,13 +17,13 @@ __all__ = ( @strawberry_django.filter_type(models.Group, lookups=True) -class GroupFilter(BaseObjectTypeFilterMixin): +class GroupFilter(BaseModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() @strawberry_django.filter_type(models.User, lookups=True) -class UserFilter(BaseObjectTypeFilterMixin): +class UserFilter(BaseModelFilter): username: FilterLookup[str] | None = strawberry_django.filter_field() first_name: FilterLookup[str] | None = strawberry_django.filter_field() last_name: FilterLookup[str] | None = strawberry_django.filter_field() @@ -36,7 +36,7 @@ class UserFilter(BaseObjectTypeFilterMixin): @strawberry_django.filter_type(models.Owner, lookups=True) -class OwnerFilter(BaseObjectTypeFilterMixin): +class OwnerFilter(BaseModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() group: Annotated['OwnerGroupFilter', strawberry.lazy('users.graphql.filters')] | None = ( @@ -49,6 +49,6 @@ class OwnerFilter(BaseObjectTypeFilterMixin): @strawberry_django.filter_type(models.OwnerGroup, lookups=True) -class OwnerGroupFilter(BaseObjectTypeFilterMixin): +class OwnerGroupFilter(BaseModelFilter): name: FilterLookup[str] | None = strawberry_django.filter_field() description: FilterLookup[str] | None = strawberry_django.filter_field() diff --git a/netbox/vpn/graphql/filters.py b/netbox/vpn/graphql/filters.py index 83963b666..bd5471ace 100644 --- a/netbox/vpn/graphql/filters.py +++ b/netbox/vpn/graphql/filters.py @@ -5,7 +5,6 @@ import strawberry_django from strawberry.scalars import ID from strawberry_django import BaseFilterLookup, FilterLookup -from core.graphql.filter_mixins import BaseObjectTypeFilterMixin from extras.graphql.filter_mixins import CustomFieldsFilterMixin, TagsFilterMixin from netbox.graphql.filters import ( ChangeLoggedModelFilter, NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter, @@ -39,9 +38,7 @@ class TunnelGroupFilter(OrganizationalModelFilter): @strawberry_django.filter_type(models.TunnelTermination, lookups=True) -class TunnelTerminationFilter( - BaseObjectTypeFilterMixin, CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter -): +class TunnelTerminationFilter(CustomFieldsFilterMixin, TagsFilterMixin, ChangeLoggedModelFilter): tunnel: Annotated['TunnelFilter', strawberry.lazy('vpn.graphql.filters')] | None = strawberry_django.filter_field() tunnel_id: ID | None = strawberry_django.filter_field() role: BaseFilterLookup[Annotated['TunnelTerminationRoleEnum', strawberry.lazy('vpn.graphql.enums')]] | None = ( diff --git a/netbox/wireless/graphql/filter_mixins.py b/netbox/wireless/graphql/filter_mixins.py index 966255aff..d795209cf 100644 --- a/netbox/wireless/graphql/filter_mixins.py +++ b/netbox/wireless/graphql/filter_mixins.py @@ -5,8 +5,6 @@ import strawberry import strawberry_django from strawberry_django import FilterLookup -from core.graphql.filter_mixins import BaseFilter - if TYPE_CHECKING: from .enums import * @@ -16,7 +14,7 @@ __all__ = ( @dataclass -class WirelessAuthenticationBaseFilterMixin(BaseFilter): +class WirelessAuthenticationBaseFilterMixin: auth_type: Annotated['WirelessAuthTypeEnum', strawberry.lazy('wireless.graphql.enums')] | None = ( strawberry_django.filter_field() )