Arthur 2 лет назад
Родитель
Сommit
663af64ec1

+ 0 - 1
netbox/circuits/graphql/types.py

@@ -6,7 +6,6 @@ from dcim.graphql.mixins import CabledObjectMixin
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin, ContactsMixin
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin, ContactsMixin
 from netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType
 from .filters import *
 from .filters import *
-from typing import List
 
 
 __all__ = (
 __all__ = (
     'CircuitTerminationType',
     'CircuitTerminationType',

+ 0 - 0
netbox/core/graphql/filters.py


+ 17 - 9
netbox/core/graphql/types.py

@@ -1,5 +1,9 @@
-from core import filtersets, models
+import strawberry
+import strawberry_django
+
+from core import models
 from netbox.graphql.types import BaseObjectType, NetBoxObjectType
 from netbox.graphql.types import BaseObjectType, NetBoxObjectType
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'DataFileType',
     'DataFileType',
@@ -7,15 +11,19 @@ __all__ = (
 )
 )
 
 
 
 
+@strawberry_django.type(
+    models.DataFile,
+    fields='__all__',
+    filters=DataFileFilter
+)
 class DataFileType(BaseObjectType):
 class DataFileType(BaseObjectType):
-    class Meta:
-        model = models.DataFile
-        exclude = ('data',)
-        filterset_class = filtersets.DataFileFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.DataSource,
+    fields='__all__',
+    filters=DataSourceFilter
+)
 class DataSourceType(NetBoxObjectType):
 class DataSourceType(NetBoxObjectType):
-    class Meta:
-        model = models.DataSource
-        fields = '__all__'
-        filterset_class = filtersets.DataSourceFilterSet
+    pass

+ 0 - 0
netbox/dcim/graphql/filters.py


+ 231 - 202
netbox/dcim/graphql/types.py

@@ -1,12 +1,14 @@
-import graphene
+import strawberry
+import strawberry_django
 
 
-from dcim import filtersets, models
+from dcim import models
 from extras.graphql.mixins import (
 from extras.graphql.mixins import (
     ChangelogMixin, ConfigContextMixin, ContactsMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin,
     ChangelogMixin, ConfigContextMixin, ContactsMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin,
 )
 )
 from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
 from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
 from netbox.graphql.scalars import BigInt
 from netbox.graphql.scalars import BigInt
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
+from .filters import *
 from .mixins import CabledObjectMixin, PathEndpointMixin
 from .mixins import CabledObjectMixin, PathEndpointMixin
 
 
 __all__ = (
 __all__ = (
@@ -86,6 +88,11 @@ class ComponentTemplateObjectType(
 # Model types
 # Model types
 #
 #
 
 
+@strawberry_django.type(
+    models.Cable,
+    fields='__all__',
+    filters=CableFilter
+)
 class CableType(NetBoxObjectType):
 class CableType(NetBoxObjectType):
     a_terminations = graphene.List('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
     a_terminations = graphene.List('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
     b_terminations = graphene.List('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
     b_terminations = graphene.List('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
@@ -108,66 +115,66 @@ class CableType(NetBoxObjectType):
         return self.b_terminations
         return self.b_terminations
 
 
 
 
+@strawberry_django.type(
+    models.CableTermination,
+    exclude=('termination_type', 'termination_id'),
+    filters=CableTerminationFilter
+)
 class CableTerminationType(NetBoxObjectType):
 class CableTerminationType(NetBoxObjectType):
     termination = graphene.Field('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
     termination = graphene.Field('dcim.graphql.gfk_mixins.CableTerminationTerminationType')
 
 
-    class Meta:
-        model = models.CableTermination
-        exclude = ('termination_type', 'termination_id')
-        filterset_class = filtersets.CableTerminationFilterSet
-
 
 
+@strawberry_django.type(
+    models.ConsolePort,
+    exclude=('_path',),
+    filters=ConsolePortFilter
+)
 class ConsolePortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 class ConsolePortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 
 
-    class Meta:
-        model = models.ConsolePort
-        exclude = ('_path',)
-        filterset_class = filtersets.ConsolePortFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.ConsolePortTemplate,
+    fields='__all__',
+    filters=ConsolePortTemplateFilter
+)
 class ConsolePortTemplateType(ComponentTemplateObjectType):
 class ConsolePortTemplateType(ComponentTemplateObjectType):
 
 
-    class Meta:
-        model = models.ConsolePortTemplate
-        fields = '__all__'
-        filterset_class = filtersets.ConsolePortTemplateFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.ConsoleServerPort,
+    exclude=('_path',),
+    filters=ConsoleServerPortFilter
+)
 class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 
 
-    class Meta:
-        model = models.ConsoleServerPort
-        exclude = ('_path',)
-        filterset_class = filtersets.ConsoleServerPortFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.ConsoleServerPortTemplate,
+    fields='__all__',
+    filters=ConsoleServerPortTemplateFilter
+)
 class ConsoleServerPortTemplateType(ComponentTemplateObjectType):
 class ConsoleServerPortTemplateType(ComponentTemplateObjectType):
 
 
-    class Meta:
-        model = models.ConsoleServerPortTemplate
-        fields = '__all__'
-        filterset_class = filtersets.ConsoleServerPortTemplateFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.Device,
+    fields='__all__',
+    filters=DeviceFilter
+)
 class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
 class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
 
 
-    class Meta:
-        model = models.Device
-        fields = '__all__'
-        filterset_class = filtersets.DeviceFilterSet
-
     def resolve_face(self, info):
     def resolve_face(self, info):
         return self.face or None
         return self.face or None
 
 
@@ -175,46 +182,49 @@ class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBo
         return self.airflow or None
         return self.airflow or None
 
 
 
 
+@strawberry_django.type(
+    models.DeviceBay,
+    fields='__all__',
+    filters=DeviceBayFilter
+)
 class DeviceBayType(ComponentObjectType):
 class DeviceBayType(ComponentObjectType):
-
-    class Meta:
-        model = models.DeviceBay
-        fields = '__all__'
-        filterset_class = filtersets.DeviceBayFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.DeviceBayTemplate,
+    fields='__all__',
+    filters=DeviceBayTemplateFilter
+)
 class DeviceBayTemplateType(ComponentTemplateObjectType):
 class DeviceBayTemplateType(ComponentTemplateObjectType):
-
-    class Meta:
-        model = models.DeviceBayTemplate
-        fields = '__all__'
-        filterset_class = filtersets.DeviceBayTemplateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.InventoryItemTemplate,
+    exclude=('component_type', 'component_id'),
+    filters=InventoryItemTemplateFilter
+)
 class InventoryItemTemplateType(ComponentTemplateObjectType):
 class InventoryItemTemplateType(ComponentTemplateObjectType):
     component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemTemplateComponentType')
     component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemTemplateComponentType')
 
 
-    class Meta:
-        model = models.InventoryItemTemplate
-        exclude = ('component_type', 'component_id')
-        filterset_class = filtersets.InventoryItemTemplateFilterSet
-
 
 
+@strawberry_django.type(
+    models.DeviceRole,
+    fields='__all__',
+    filters=DeviceRoleFilter
+)
 class DeviceRoleType(OrganizationalObjectType):
 class DeviceRoleType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.DeviceRole
-        fields = '__all__'
-        filterset_class = filtersets.DeviceRoleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.DeviceType,
+    fields='__all__',
+    filters=DeviceTypeFilter
+)
 class DeviceTypeType(NetBoxObjectType):
 class DeviceTypeType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.DeviceType
-        fields = '__all__'
-        filterset_class = filtersets.DeviceTypeFilterSet
-
     def resolve_subdevice_role(self, info):
     def resolve_subdevice_role(self, info):
         return self.subdevice_role or None
         return self.subdevice_role or None
 
 
@@ -225,29 +235,31 @@ class DeviceTypeType(NetBoxObjectType):
         return self.weight_unit or None
         return self.weight_unit or None
 
 
 
 
+@strawberry_django.type(
+    models.FrontPort,
+    fields='__all__',
+    filters=FrontPortFilter
+)
 class FrontPortType(ComponentObjectType, CabledObjectMixin):
 class FrontPortType(ComponentObjectType, CabledObjectMixin):
-
-    class Meta:
-        model = models.FrontPort
-        fields = '__all__'
-        filterset_class = filtersets.FrontPortFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.FrontPortTemplate,
+    fields='__all__',
+    filters=FrontPortTemplateFilter
+)
 class FrontPortTemplateType(ComponentTemplateObjectType):
 class FrontPortTemplateType(ComponentTemplateObjectType):
-
-    class Meta:
-        model = models.FrontPortTemplate
-        fields = '__all__'
-        filterset_class = filtersets.FrontPortTemplateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Interface,
+    exclude=('_path',),
+    filters=InterfaceFilter
+)
 class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 
 
-    class Meta:
-        model = models.Interface
-        exclude = ('_path',)
-        filterset_class = filtersets.InterfaceFilterSet
-
     def resolve_poe_mode(self, info):
     def resolve_poe_mode(self, info):
         return self.poe_mode or None
         return self.poe_mode or None
 
 
@@ -264,13 +276,13 @@ class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, Pa
         return self.rf_channel or None
         return self.rf_channel or None
 
 
 
 
+@strawberry_django.type(
+    models.InterfaceTemplate,
+    fields='__all__',
+    filters=InterfaceTemplateFilter
+)
 class InterfaceTemplateType(ComponentTemplateObjectType):
 class InterfaceTemplateType(ComponentTemplateObjectType):
 
 
-    class Meta:
-        model = models.InterfaceTemplate
-        fields = '__all__'
-        filterset_class = filtersets.InterfaceTemplateFilterSet
-
     def resolve_poe_mode(self, info):
     def resolve_poe_mode(self, info):
         return self.poe_mode or None
         return self.poe_mode or None
 
 
@@ -281,97 +293,105 @@ class InterfaceTemplateType(ComponentTemplateObjectType):
         return self.rf_role or None
         return self.rf_role or None
 
 
 
 
+@strawberry_django.type(
+    models.InventoryItem,
+    exclude=('component_type', 'component_id'),
+    filters=InventoryItemFilter
+)
 class InventoryItemType(ComponentObjectType):
 class InventoryItemType(ComponentObjectType):
     component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemComponentType')
     component = graphene.Field('dcim.graphql.gfk_mixins.InventoryItemComponentType')
 
 
-    class Meta:
-        model = models.InventoryItem
-        exclude = ('component_type', 'component_id')
-        filterset_class = filtersets.InventoryItemFilterSet
-
 
 
+@strawberry_django.type(
+    models.InventoryItemRole,
+    fields='__all__',
+    filters=InventoryItemRoleFilter
+)
 class InventoryItemRoleType(OrganizationalObjectType):
 class InventoryItemRoleType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.InventoryItemRole
-        fields = '__all__'
-        filterset_class = filtersets.InventoryItemRoleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Location,
+    fields='__all__',
+    filters=LocationFilter
+)
 class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, OrganizationalObjectType):
 class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, OrganizationalObjectType):
-
-    class Meta:
-        model = models.Location
-        fields = '__all__'
-        filterset_class = filtersets.LocationFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Manufacturer,
+    fields='__all__',
+    filters=ManufacturerFilter
+)
 class ManufacturerType(OrganizationalObjectType, ContactsMixin):
 class ManufacturerType(OrganizationalObjectType, ContactsMixin):
-
-    class Meta:
-        model = models.Manufacturer
-        fields = '__all__'
-        filterset_class = filtersets.ManufacturerFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Module,
+    fields='__all__',
+    filters=ModuleFilter
+)
 class ModuleType(ComponentObjectType):
 class ModuleType(ComponentObjectType):
-
-    class Meta:
-        model = models.Module
-        fields = '__all__'
-        filterset_class = filtersets.ModuleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ModuleBay,
+    fields='__all__',
+    filters=ModuleBayFilter
+)
 class ModuleBayType(ComponentObjectType):
 class ModuleBayType(ComponentObjectType):
-
-    class Meta:
-        model = models.ModuleBay
-        fields = '__all__'
-        filterset_class = filtersets.ModuleBayFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ModuleBayTemplate,
+    fields='__all__',
+    filters=ModuleBayTemplateFilter
+)
 class ModuleBayTemplateType(ComponentTemplateObjectType):
 class ModuleBayTemplateType(ComponentTemplateObjectType):
-
-    class Meta:
-        model = models.ModuleBayTemplate
-        fields = '__all__'
-        filterset_class = filtersets.ModuleBayTemplateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ModuleType,
+    fields='__all__',
+    filters=ModuleTypeFilter
+)
 class ModuleTypeType(NetBoxObjectType):
 class ModuleTypeType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.ModuleType
-        fields = '__all__'
-        filterset_class = filtersets.ModuleTypeFilterSet
-
     def resolve_weight_unit(self, info):
     def resolve_weight_unit(self, info):
         return self.weight_unit or None
         return self.weight_unit or None
 
 
 
 
+@strawberry_django.type(
+    models.Platform,
+    fields='__all__',
+    filters=PlatformFilter
+)
 class PlatformType(OrganizationalObjectType):
 class PlatformType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.Platform
-        fields = '__all__'
-        filterset_class = filtersets.PlatformFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.PowerFeed,
+    exclude=('_path',),
+    filters=PowerFeedFilter
+)
 class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin):
 class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin):
-
-    class Meta:
-        model = models.PowerFeed
-        exclude = ('_path',)
-        filterset_class = filtersets.PowerFeedFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.PowerOutlet,
+    exclude=('_path',),
+    filters=PowerOutletFilter
+)
 class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 
 
-    class Meta:
-        model = models.PowerOutlet
-        exclude = ('_path',)
-        filterset_class = filtersets.PowerOutletFilterSet
-
     def resolve_feed_leg(self, info):
     def resolve_feed_leg(self, info):
         return self.feed_leg or None
         return self.feed_leg or None
 
 
@@ -379,13 +399,13 @@ class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin)
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.PowerOutletTemplate,
+    fields='__all__',
+    filters=PowerOutletTemplateFilter
+)
 class PowerOutletTemplateType(ComponentTemplateObjectType):
 class PowerOutletTemplateType(ComponentTemplateObjectType):
 
 
-    class Meta:
-        model = models.PowerOutletTemplate
-        fields = '__all__'
-        filterset_class = filtersets.PowerOutletTemplateFilterSet
-
     def resolve_feed_leg(self, info):
     def resolve_feed_leg(self, info):
         return self.feed_leg or None
         return self.feed_leg or None
 
 
@@ -393,43 +413,44 @@ class PowerOutletTemplateType(ComponentTemplateObjectType):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.PowerPanel,
+    fields='__all__',
+    filters=PowerPanelFilter
+)
 class PowerPanelType(NetBoxObjectType, ContactsMixin):
 class PowerPanelType(NetBoxObjectType, ContactsMixin):
-
-    class Meta:
-        model = models.PowerPanel
-        fields = '__all__'
-        filterset_class = filtersets.PowerPanelFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.PowerPort,
+    exclude=('_path',),
+    filters=PowerPortFilter
+)
 class PowerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 class PowerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin):
 
 
-    class Meta:
-        model = models.PowerPort
-        exclude = ('_path',)
-        filterset_class = filtersets.PowerPortFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.PowerPortTemplate,
+    fields='__all__',
+    filters=PowerPortTemplateFilter
+)
 class PowerPortTemplateType(ComponentTemplateObjectType):
 class PowerPortTemplateType(ComponentTemplateObjectType):
 
 
-    class Meta:
-        model = models.PowerPortTemplate
-        fields = '__all__'
-        filterset_class = filtersets.PowerPortTemplateFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
 
 
+@strawberry_django.type(
+    models.Rack,
+    fields='__all__',
+    filters=RackFilter
+)
 class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
 class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
 
 
-    class Meta:
-        model = models.Rack
-        fields = '__all__'
-        filterset_class = filtersets.RackFilterSet
-
     def resolve_type(self, info):
     def resolve_type(self, info):
         return self.type or None
         return self.type or None
 
 
@@ -440,74 +461,82 @@ class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje
         return self.weight_unit or None
         return self.weight_unit or None
 
 
 
 
+@strawberry_django.type(
+    models.RackReservation,
+    fields='__all__',
+    filters=RackReservationFilter
+)
 class RackReservationType(NetBoxObjectType):
 class RackReservationType(NetBoxObjectType):
-
-    class Meta:
-        model = models.RackReservation
-        fields = '__all__'
-        filterset_class = filtersets.RackReservationFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.RackRole,
+    fields='__all__',
+    filters=RackRoleFilter
+)
 class RackRoleType(OrganizationalObjectType):
 class RackRoleType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.RackRole
-        fields = '__all__'
-        filterset_class = filtersets.RackRoleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.RearPort,
+    fields='__all__',
+    filters=RearPortFilter
+)
 class RearPortType(ComponentObjectType, CabledObjectMixin):
 class RearPortType(ComponentObjectType, CabledObjectMixin):
-
-    class Meta:
-        model = models.RearPort
-        fields = '__all__'
-        filterset_class = filtersets.RearPortFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.RearPortTemplate,
+    fields='__all__',
+    filters=RearPortTemplateFilter
+)
 class RearPortTemplateType(ComponentTemplateObjectType):
 class RearPortTemplateType(ComponentTemplateObjectType):
-
-    class Meta:
-        model = models.RearPortTemplate
-        fields = '__all__'
-        filterset_class = filtersets.RearPortTemplateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Region,
+    fields='__all__',
+    filters=RegionFilter
+)
 class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
 class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
-
-    class Meta:
-        model = models.Region
-        fields = '__all__'
-        filterset_class = filtersets.RegionFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Site,
+    fields='__all__',
+    filters=SiteFilter
+)
 class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
 class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType):
     asn = graphene.Field(BigInt)
     asn = graphene.Field(BigInt)
 
 
-    class Meta:
-        model = models.Site
-        fields = '__all__'
-        filterset_class = filtersets.SiteFilterSet
-
 
 
+@strawberry_django.type(
+    models.SiteGroup,
+    fields='__all__',
+    filters=SiteGroupFilter
+)
 class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
 class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType):
-
-    class Meta:
-        model = models.SiteGroup
-        fields = '__all__'
-        filterset_class = filtersets.SiteGroupFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VirtualChassis,
+    fields='__all__',
+    filters=VirtualChassisFilter
+)
 class VirtualChassisType(NetBoxObjectType):
 class VirtualChassisType(NetBoxObjectType):
-
-    class Meta:
-        model = models.VirtualChassis
-        fields = '__all__'
-        filterset_class = filtersets.VirtualChassisFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VirtualDeviceContext,
+    fields='__all__',
+    filters=VirtualDeviceContextFilter
+)
 class VirtualDeviceContextType(NetBoxObjectType):
 class VirtualDeviceContextType(NetBoxObjectType):
-
-    class Meta:
-        model = models.VirtualDeviceContext
-        fields = '__all__'
-        filterset_class = filtersets.VirtualDeviceContextFilterSet
+    pass

+ 4 - 1
netbox/extras/graphql/types.py

@@ -1,8 +1,11 @@
+import strawberry
+import strawberry_django
+
 import strawberry
 import strawberry
 from strawberry import auto
 from strawberry import auto
 import strawberry_django
 import strawberry_django
 
 
-from extras import filtersets, models
+from extras import models
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
 from netbox.graphql.types import BaseObjectType, ObjectType, OrganizationalObjectType
 from netbox.graphql.types import BaseObjectType, ObjectType, OrganizationalObjectType
 from .filters import *
 from .filters import *

+ 0 - 0
netbox/ipam/graphql/filters.py


+ 94 - 82
netbox/ipam/graphql/types.py

@@ -1,8 +1,10 @@
-import graphene
+import strawberry
+import strawberry_django
 
 
-from ipam import filtersets, models
+from ipam import models
 from netbox.graphql.scalars import BigInt
 from netbox.graphql.scalars import BigInt
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'ASNType',
     'ASNType',
@@ -46,142 +48,152 @@ class BaseIPAddressFamilyType:
         return IPAddressFamilyType(self.family)
         return IPAddressFamilyType(self.family)
 
 
 
 
+@strawberry_django.type(
+    models.ASN,
+    fields='__all__',
+    filters=ProviderFilter
+)
 class ASNType(NetBoxObjectType):
 class ASNType(NetBoxObjectType):
     asn = graphene.Field(BigInt)
     asn = graphene.Field(BigInt)
 
 
-    class Meta:
-        model = models.ASN
-        fields = '__all__'
-        filterset_class = filtersets.ASNFilterSet
-
 
 
+@strawberry_django.type(
+    models.ASNRange,
+    fields='__all__',
+    filters=ASNRangeFilter
+)
 class ASNRangeType(NetBoxObjectType):
 class ASNRangeType(NetBoxObjectType):
-
-    class Meta:
-        model = models.ASNRange
-        fields = '__all__'
-        filterset_class = filtersets.ASNRangeFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Aggregate,
+    fields='__all__',
+    filters=AggregateFilter
+)
 class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
 class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
-
-    class Meta:
-        model = models.Aggregate
-        fields = '__all__'
-        filterset_class = filtersets.AggregateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.FHRPGroup,
+    fields='__all__',
+    filters=FHRPGroupFilter
+)
 class FHRPGroupType(NetBoxObjectType):
 class FHRPGroupType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.FHRPGroup
-        fields = '__all__'
-        filterset_class = filtersets.FHRPGroupFilterSet
-
     def resolve_auth_type(self, info):
     def resolve_auth_type(self, info):
         return self.auth_type or None
         return self.auth_type or None
 
 
 
 
+@strawberry_django.type(
+    models.FHRPGroupAssignment,
+    exclude=('interface_type', 'interface_id'),
+    filters=FHRPGroupAssignmentFilter
+)
 class FHRPGroupAssignmentType(BaseObjectType):
 class FHRPGroupAssignmentType(BaseObjectType):
     interface = graphene.Field('ipam.graphql.gfk_mixins.FHRPGroupInterfaceType')
     interface = graphene.Field('ipam.graphql.gfk_mixins.FHRPGroupInterfaceType')
 
 
-    class Meta:
-        model = models.FHRPGroupAssignment
-        exclude = ('interface_type', 'interface_id')
-        filterset_class = filtersets.FHRPGroupAssignmentFilterSet
-
 
 
+@strawberry_django.type(
+    models.IPAddress,
+    exclude=('assigned_object_type', 'assigned_object_id'),
+    filters=IPAddressFilter
+)
 class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
 class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
     assigned_object = graphene.Field('ipam.graphql.gfk_mixins.IPAddressAssignmentType')
     assigned_object = graphene.Field('ipam.graphql.gfk_mixins.IPAddressAssignmentType')
 
 
-    class Meta:
-        model = models.IPAddress
-        exclude = ('assigned_object_type', 'assigned_object_id')
-        filterset_class = filtersets.IPAddressFilterSet
-
     def resolve_role(self, info):
     def resolve_role(self, info):
         return self.role or None
         return self.role or None
 
 
 
 
+@strawberry_django.type(
+    models.IPRange,
+    fields='__all__',
+    filters=IPRangeFilter
+)
 class IPRangeType(NetBoxObjectType):
 class IPRangeType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.IPRange
-        fields = '__all__'
-        filterset_class = filtersets.IPRangeFilterSet
-
     def resolve_role(self, info):
     def resolve_role(self, info):
         return self.role or None
         return self.role or None
 
 
 
 
+@strawberry_django.type(
+    models.Prefix,
+    fields='__all__',
+    filters=PrefixFilter
+)
 class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
 class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
-
-    class Meta:
-        model = models.Prefix
-        fields = '__all__'
-        filterset_class = filtersets.PrefixFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.RIR,
+    fields='__all__',
+    filters=RIRFilter
+)
 class RIRType(OrganizationalObjectType):
 class RIRType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.RIR
-        fields = '__all__'
-        filterset_class = filtersets.RIRFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Role,
+    fields='__all__',
+    filters=RoleFilter
+)
 class RoleType(OrganizationalObjectType):
 class RoleType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.Role
-        fields = '__all__'
-        filterset_class = filtersets.RoleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.RouteTarget,
+    fields='__all__',
+    filters=RouteTargetFilter
+)
 class RouteTargetType(NetBoxObjectType):
 class RouteTargetType(NetBoxObjectType):
-
-    class Meta:
-        model = models.RouteTarget
-        fields = '__all__'
-        filterset_class = filtersets.RouteTargetFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Service,
+    fields='__all__',
+    filters=ServiceFilter
+)
 class ServiceType(NetBoxObjectType):
 class ServiceType(NetBoxObjectType):
-
-    class Meta:
-        model = models.Service
-        fields = '__all__'
-        filterset_class = filtersets.ServiceFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ServiceTemplate,
+    fields='__all__',
+    filters=ServiceTemplateFilter
+)
 class ServiceTemplateType(NetBoxObjectType):
 class ServiceTemplateType(NetBoxObjectType):
-
-    class Meta:
-        model = models.ServiceTemplate
-        fields = '__all__'
-        filterset_class = filtersets.ServiceTemplateFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VLAN,
+    fields='__all__',
+    filters=VLANFilter
+)
 class VLANType(NetBoxObjectType):
 class VLANType(NetBoxObjectType):
-
-    class Meta:
-        model = models.VLAN
-        fields = '__all__'
-        filterset_class = filtersets.VLANFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VLANGroup,
+    exclude=('scope_type', 'scope_id'),
+    filters=VLANGroupFilter
+)
 class VLANGroupType(OrganizationalObjectType):
 class VLANGroupType(OrganizationalObjectType):
     scope = graphene.Field('ipam.graphql.gfk_mixins.VLANGroupScopeType')
     scope = graphene.Field('ipam.graphql.gfk_mixins.VLANGroupScopeType')
 
 
-    class Meta:
-        model = models.VLANGroup
-        exclude = ('scope_type', 'scope_id')
-        filterset_class = filtersets.VLANGroupFilterSet
-
 
 
+@strawberry_django.type(
+    models.VRF,
+    fields='__all__',
+    filters=VRFFilter
+)
 class VRFType(NetBoxObjectType):
 class VRFType(NetBoxObjectType):
-
-    class Meta:
-        model = models.VRF
-        fields = '__all__'
-        filterset_class = filtersets.VRFFilterSet
+    pass

+ 21 - 0
netbox/netbox/graphql/filters.py

@@ -0,0 +1,21 @@
+import strawberry
+import strawberry_django
+from strawberry import auto
+
+
+class ChangeLoggedModelFilter:
+
+    def created_by_request(self, queryset):
+        return self.filter_by_request(queryset, "created_by_request", self.created_by_request)
+
+    def updated_by_request(self, queryset):
+        return self.filter_by_request(queryset, "updated_by_request", self.updated_by_request)
+
+    def modified_by_request(self, queryset):
+        return self.filter_by_request(queryset, "modified_by_request", self.modified_by_request)
+
+
+class NetBoxModelFilter(ChangeLoggedModelFilter):
+
+    def filter_q(self, queryset):
+        return self.search(queryset, None, self.q)

+ 14 - 17
netbox/netbox/graphql/schema.py

@@ -9,25 +9,22 @@ from users.graphql.schema import UsersQuery
 
 
 
 
 @strawberry.type
 @strawberry.type
-class Query(CircuitsQuery, UsersQuery):
+class Query(
+    UsersQuery,
+    # CircuitsQuery,
+    #     CoreQuery,
+    #     DCIMQuery,
+    #     ExtrasQuery,
+    #     IPAMQuery,
+    #     TenancyQuery,
+    #     VirtualizationQuery,
+    #     VPNQuery,
+    #     WirelessQuery,
+    #     *registry['plugins']['graphql_schemas'],  # Append plugin schemas
+    #     graphene.ObjectType
+):
     pass
     pass
 
 
-# class Query(
-#     UsersQuery,
-#     CircuitsQuery,
-#     CoreQuery,
-#     DCIMQuery,
-#     ExtrasQuery,
-#     IPAMQuery,
-#     TenancyQuery,
-#     VirtualizationQuery,
-#     VPNQuery,
-#     WirelessQuery,
-#     *registry['plugins']['graphql_schemas'],  # Append plugin schemas
-#     graphene.ObjectType
-# ):
-#     pass
-
 
 
 schema = strawberry.Schema(
 schema = strawberry.Schema(
     query=Query,
     query=Query,

+ 0 - 0
netbox/tenancy/graphql/filters.py


+ 40 - 32
netbox/tenancy/graphql/types.py

@@ -1,8 +1,10 @@
-import graphene
+import strawberry
+import strawberry_django
 
 
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
 from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
-from tenancy import filtersets, models
+from tenancy import models
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'ContactAssignmentType',
     'ContactAssignmentType',
@@ -25,53 +27,59 @@ class ContactAssignmentsMixin:
 # Tenants
 # Tenants
 #
 #
 
 
+@strawberry_django.type(
+    models.Tenant,
+    fields='__all__',
+    filters=TenantFilter
+)
 class TenantType(NetBoxObjectType):
 class TenantType(NetBoxObjectType):
-
-    class Meta:
-        model = models.Tenant
-        fields = '__all__'
-        filterset_class = filtersets.TenantFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.TenantGroup,
+    fields='__all__',
+    filters=TenantGroupFilter
+)
 class TenantGroupType(OrganizationalObjectType):
 class TenantGroupType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.TenantGroup
-        fields = '__all__'
-        filterset_class = filtersets.TenantGroupFilterSet
+    pass
 
 
 
 
 #
 #
 # Contacts
 # Contacts
 #
 #
 
 
+@strawberry_django.type(
+    models.Contact,
+    fields='__all__',
+    filters=ContactFilter
+)
 class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
 class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
-
-    class Meta:
-        model = models.Contact
-        fields = '__all__'
-        filterset_class = filtersets.ContactFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ContactRole,
+    fields='__all__',
+    filters=ContactRoleFilter
+)
 class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
 class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
-
-    class Meta:
-        model = models.ContactRole
-        fields = '__all__'
-        filterset_class = filtersets.ContactRoleFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ContactGroup,
+    fields='__all__',
+    filters=ContactGroupFilter
+)
 class ContactGroupType(OrganizationalObjectType):
 class ContactGroupType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.ContactGroup
-        fields = '__all__'
-        filterset_class = filtersets.ContactGroupFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ContactAssignment,
+    fields='__all__',
+    filters=ContactAssignmentFilter
+)
 class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
 class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
-
-    class Meta:
-        model = models.ContactAssignment
-        fields = '__all__'
-        filterset_class = filtersets.ContactAssignmentFilterSet
+    pass

+ 0 - 0
netbox/virtualization/graphql/filters.py


+ 39 - 31
netbox/virtualization/graphql/types.py

@@ -1,8 +1,12 @@
+import strawberry
+import strawberry_django
+
 from dcim.graphql.types import ComponentObjectType
 from dcim.graphql.types import ComponentObjectType
 from extras.graphql.mixins import ConfigContextMixin
 from extras.graphql.mixins import ConfigContextMixin
 from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
 from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin
 from netbox.graphql.types import OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import OrganizationalObjectType, NetBoxObjectType
-from virtualization import filtersets, models
+from virtualization import models
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'ClusterType',
     'ClusterType',
@@ -14,55 +18,59 @@ __all__ = (
 )
 )
 
 
 
 
+@strawberry_django.type(
+    models.Cluster,
+    fields='__all__',
+    filters=ClusterFilter
+)
 class ClusterType(VLANGroupsMixin, NetBoxObjectType):
 class ClusterType(VLANGroupsMixin, NetBoxObjectType):
-
-    class Meta:
-        model = models.Cluster
-        fields = '__all__'
-        filterset_class = filtersets.ClusterFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ClusterGroup,
+    fields='__all__',
+    filters=ClusterGroupFilter
+)
 class ClusterGroupType(VLANGroupsMixin, OrganizationalObjectType):
 class ClusterGroupType(VLANGroupsMixin, OrganizationalObjectType):
-
-    class Meta:
-        model = models.ClusterGroup
-        fields = '__all__'
-        filterset_class = filtersets.ClusterGroupFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.ClusterType,
+    fields='__all__',
+    filters=ClusterTypeFilter
+)
 class ClusterTypeType(OrganizationalObjectType):
 class ClusterTypeType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.ClusterType
-        fields = '__all__'
-        filterset_class = filtersets.ClusterTypeFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VirtualMachine,
+    fields='__all__',
+    filters=VirtualMachineFilter
+)
 class VirtualMachineType(ConfigContextMixin, NetBoxObjectType):
 class VirtualMachineType(ConfigContextMixin, NetBoxObjectType):
-
-    class Meta:
-        model = models.VirtualMachine
-        fields = '__all__'
-        filterset_class = filtersets.VirtualMachineFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.VMInterface,
+    fields='__all__',
+    filters=VMInterfaceFilter
+)
 class VMInterfaceType(IPAddressesMixin, ComponentObjectType):
 class VMInterfaceType(IPAddressesMixin, ComponentObjectType):
 
 
-    class Meta:
-        model = models.VMInterface
-        fields = '__all__'
-        filterset_class = filtersets.VMInterfaceFilterSet
-
     def resolve_mode(self, info):
     def resolve_mode(self, info):
         return self.mode or None
         return self.mode or None
 
 
 
 
+@strawberry_django.type(
+    models.VirtualDisk,
+    fields='__all__',
+    filters=VirtualDiskFilter
+)
 class VirtualDiskType(ComponentObjectType):
 class VirtualDiskType(ComponentObjectType):
 
 
-    class Meta:
-        model = models.VirtualDisk
-        fields = '__all__'
-        filterset_class = filtersets.VirtualDiskFilterSet
-
     def resolve_mode(self, info):
     def resolve_mode(self, info):
         return self.mode or None
         return self.mode or None

+ 0 - 0
netbox/vpn/graphql/filters.py


+ 63 - 51
netbox/vpn/graphql/types.py

@@ -1,8 +1,10 @@
-import graphene
+import strawberry
+import strawberry_django
 
 
 from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin
 from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin
 from netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType
-from vpn import filtersets, models
+from vpn import models
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'IKEPolicyType',
     'IKEPolicyType',
@@ -18,81 +20,91 @@ __all__ = (
 )
 )
 
 
 
 
+@strawberry_django.type(
+    models.TunnelGroup,
+    fields='__all__',
+    filters=TunnelGroupFilter
+)
 class TunnelGroupType(OrganizationalObjectType):
 class TunnelGroupType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.TunnelGroup
-        fields = '__all__'
-        filterset_class = filtersets.TunnelGroupFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.TunnelTermination,
+    fields='__all__',
+    filters=TunnelTerminationFilter
+)
 class TunnelTerminationType(CustomFieldsMixin, TagsMixin, ObjectType):
 class TunnelTerminationType(CustomFieldsMixin, TagsMixin, ObjectType):
-
-    class Meta:
-        model = models.TunnelTermination
-        fields = '__all__'
-        filterset_class = filtersets.TunnelTerminationFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.Tunnel,
+    fields='__all__',
+    filters=TunnelFilter
+)
 class TunnelType(NetBoxObjectType):
 class TunnelType(NetBoxObjectType):
-
-    class Meta:
-        model = models.Tunnel
-        fields = '__all__'
-        filterset_class = filtersets.TunnelFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.IKEProposal,
+    fields='__all__',
+    filters=IKEProposalFilter
+)
 class IKEProposalType(OrganizationalObjectType):
 class IKEProposalType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.IKEProposal
-        fields = '__all__'
-        filterset_class = filtersets.IKEProposalFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.IKEPolicy,
+    fields='__all__',
+    filters=IKEPolicyFilter
+)
 class IKEPolicyType(OrganizationalObjectType):
 class IKEPolicyType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.IKEPolicy
-        fields = '__all__'
-        filterset_class = filtersets.IKEPolicyFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.IPSecProposal,
+    fields='__all__',
+    filters=IPSecProposalFilter
+)
 class IPSecProposalType(OrganizationalObjectType):
 class IPSecProposalType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.IPSecProposal
-        fields = '__all__'
-        filterset_class = filtersets.IPSecProposalFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.IPSecPolicy,
+    fields='__all__',
+    filters=IPSecPolicyFilter
+)
 class IPSecPolicyType(OrganizationalObjectType):
 class IPSecPolicyType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.IPSecPolicy
-        fields = '__all__'
-        filterset_class = filtersets.IPSecPolicyFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.IPSecProfile,
+    fields='__all__',
+    filters=IPSecProfileFilter
+)
 class IPSecProfileType(OrganizationalObjectType):
 class IPSecProfileType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.IPSecProfile
-        fields = '__all__'
-        filterset_class = filtersets.IPSecProfileFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.L2VPN,
+    fields='__all__',
+    filters=L2VPNFilter
+)
 class L2VPNType(ContactsMixin, NetBoxObjectType):
 class L2VPNType(ContactsMixin, NetBoxObjectType):
-    class Meta:
-        model = models.L2VPN
-        fields = '__all__'
-        filtersets_class = filtersets.L2VPNFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.L2VPNTermination,
+    exclude=('assigned_object_type', 'assigned_object_id'),
+    filters=L2VPNTerminationFilter
+)
 class L2VPNTerminationType(NetBoxObjectType):
 class L2VPNTerminationType(NetBoxObjectType):
     assigned_object = graphene.Field('vpn.graphql.gfk_mixins.L2VPNAssignmentType')
     assigned_object = graphene.Field('vpn.graphql.gfk_mixins.L2VPNAssignmentType')
-
-    class Meta:
-        model = models.L2VPNTermination
-        exclude = ('assigned_object_type', 'assigned_object_id')
-        filtersets_class = filtersets.L2VPNTerminationFilterSet

+ 0 - 0
netbox/wireless/graphql/filters.py


+ 21 - 16
netbox/wireless/graphql/types.py

@@ -1,5 +1,9 @@
-from wireless import filtersets, models
+import strawberry
+import strawberry_django
+
+from wireless import models
 from netbox.graphql.types import OrganizationalObjectType, NetBoxObjectType
 from netbox.graphql.types import OrganizationalObjectType, NetBoxObjectType
+from .filters import *
 
 
 __all__ = (
 __all__ = (
     'WirelessLANType',
     'WirelessLANType',
@@ -8,21 +12,22 @@ __all__ = (
 )
 )
 
 
 
 
+@strawberry_django.type(
+    models.WirelessLANGroup,
+    fields='__all__',
+    filters=WirelessLANGroupFilter
+)
 class WirelessLANGroupType(OrganizationalObjectType):
 class WirelessLANGroupType(OrganizationalObjectType):
-
-    class Meta:
-        model = models.WirelessLANGroup
-        fields = '__all__'
-        filterset_class = filtersets.WirelessLANGroupFilterSet
+    pass
 
 
 
 
+@strawberry_django.type(
+    models.WirelessLAN,
+    fields='__all__',
+    filters=WirelessLANFilter
+)
 class WirelessLANType(NetBoxObjectType):
 class WirelessLANType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.WirelessLAN
-        fields = '__all__'
-        filterset_class = filtersets.WirelessLANFilterSet
-
     def resolve_auth_type(self, info):
     def resolve_auth_type(self, info):
         return self.auth_type or None
         return self.auth_type or None
 
 
@@ -30,13 +35,13 @@ class WirelessLANType(NetBoxObjectType):
         return self.auth_cipher or None
         return self.auth_cipher or None
 
 
 
 
+@strawberry_django.type(
+    models.WirelessLink,
+    fields='__all__',
+    filters=WirelessLinkFilter
+)
 class WirelessLinkType(NetBoxObjectType):
 class WirelessLinkType(NetBoxObjectType):
 
 
-    class Meta:
-        model = models.WirelessLink
-        fields = '__all__'
-        filterset_class = filtersets.WirelessLinkFilterSet
-
     def resolve_auth_type(self, info):
     def resolve_auth_type(self, info):
         return self.auth_type or None
         return self.auth_type or None