From 663af64ec15cf0a4f56d765fcdc02115d98ed3ec Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 6 Feb 2024 13:52:41 -0800 Subject: [PATCH] 9856 update strawberry types --- netbox/circuits/graphql/types.py | 1 - netbox/core/graphql/filters.py | 0 netbox/core/graphql/types.py | 26 +- netbox/dcim/graphql/filters.py | 0 netbox/dcim/graphql/types.py | 433 ++++++++++++----------- netbox/extras/graphql/types.py | 5 +- netbox/ipam/graphql/filters.py | 0 netbox/ipam/graphql/types.py | 176 ++++----- netbox/netbox/graphql/filters.py | 21 ++ netbox/netbox/graphql/schema.py | 31 +- netbox/tenancy/graphql/filters.py | 0 netbox/tenancy/graphql/types.py | 72 ++-- netbox/virtualization/graphql/filters.py | 0 netbox/virtualization/graphql/types.py | 70 ++-- netbox/vpn/graphql/filters.py | 0 netbox/vpn/graphql/types.py | 114 +++--- netbox/wireless/graphql/filters.py | 0 netbox/wireless/graphql/types.py | 37 +- 18 files changed, 544 insertions(+), 442 deletions(-) create mode 100644 netbox/core/graphql/filters.py create mode 100644 netbox/dcim/graphql/filters.py create mode 100644 netbox/ipam/graphql/filters.py create mode 100644 netbox/netbox/graphql/filters.py create mode 100644 netbox/tenancy/graphql/filters.py create mode 100644 netbox/virtualization/graphql/filters.py create mode 100644 netbox/vpn/graphql/filters.py create mode 100644 netbox/wireless/graphql/filters.py diff --git a/netbox/circuits/graphql/types.py b/netbox/circuits/graphql/types.py index e6729cc18..fa7e5e3b4 100644 --- a/netbox/circuits/graphql/types.py +++ b/netbox/circuits/graphql/types.py @@ -6,7 +6,6 @@ from dcim.graphql.mixins import CabledObjectMixin from extras.graphql.mixins import CustomFieldsMixin, TagsMixin, ContactsMixin from netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType from .filters import * -from typing import List __all__ = ( 'CircuitTerminationType', diff --git a/netbox/core/graphql/filters.py b/netbox/core/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/core/graphql/types.py b/netbox/core/graphql/types.py index 402e36345..02d8ab483 100644 --- a/netbox/core/graphql/types.py +++ b/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 .filters import * __all__ = ( 'DataFileType', @@ -7,15 +11,19 @@ __all__ = ( ) +@strawberry_django.type( + models.DataFile, + fields='__all__', + filters=DataFileFilter +) 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 Meta: - model = models.DataSource - fields = '__all__' - filterset_class = filtersets.DataSourceFilterSet + pass diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 7d7434587..145624145 100644 --- a/netbox/dcim/graphql/types.py +++ b/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 ( ChangelogMixin, ConfigContextMixin, ContactsMixin, CustomFieldsMixin, ImageAttachmentsMixin, TagsMixin, ) from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin from netbox.graphql.scalars import BigInt from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType +from .filters import * from .mixins import CabledObjectMixin, PathEndpointMixin __all__ = ( @@ -86,6 +88,11 @@ class ComponentTemplateObjectType( # Model types # +@strawberry_django.type( + models.Cable, + fields='__all__', + filters=CableFilter +) class CableType(NetBoxObjectType): a_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 +@strawberry_django.type( + models.CableTermination, + exclude=('termination_type', 'termination_id'), + filters=CableTerminationFilter +) class CableTerminationType(NetBoxObjectType): 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 Meta: - model = models.ConsolePort - exclude = ('_path',) - filterset_class = filtersets.ConsolePortFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.ConsolePortTemplate, + fields='__all__', + filters=ConsolePortTemplateFilter +) class ConsolePortTemplateType(ComponentTemplateObjectType): - class Meta: - model = models.ConsolePortTemplate - fields = '__all__' - filterset_class = filtersets.ConsolePortTemplateFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.ConsoleServerPort, + exclude=('_path',), + filters=ConsoleServerPortFilter +) class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin): - class Meta: - model = models.ConsoleServerPort - exclude = ('_path',) - filterset_class = filtersets.ConsoleServerPortFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.ConsoleServerPortTemplate, + fields='__all__', + filters=ConsoleServerPortTemplateFilter +) class ConsoleServerPortTemplateType(ComponentTemplateObjectType): - class Meta: - model = models.ConsoleServerPortTemplate - fields = '__all__' - filterset_class = filtersets.ConsoleServerPortTemplateFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.Device, + fields='__all__', + filters=DeviceFilter +) class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType): - class Meta: - model = models.Device - fields = '__all__' - filterset_class = filtersets.DeviceFilterSet - def resolve_face(self, info): return self.face or None @@ -175,46 +182,49 @@ class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBo return self.airflow or None +@strawberry_django.type( + models.DeviceBay, + fields='__all__', + filters=DeviceBayFilter +) 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 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): 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 Meta: - model = models.DeviceRole - fields = '__all__' - filterset_class = filtersets.DeviceRoleFilterSet + pass +@strawberry_django.type( + models.DeviceType, + fields='__all__', + filters=DeviceTypeFilter +) class DeviceTypeType(NetBoxObjectType): - class Meta: - model = models.DeviceType - fields = '__all__' - filterset_class = filtersets.DeviceTypeFilterSet - def resolve_subdevice_role(self, info): return self.subdevice_role or None @@ -225,29 +235,31 @@ class DeviceTypeType(NetBoxObjectType): return self.weight_unit or None +@strawberry_django.type( + models.FrontPort, + fields='__all__', + filters=FrontPortFilter +) 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 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 Meta: - model = models.Interface - exclude = ('_path',) - filterset_class = filtersets.InterfaceFilterSet - def resolve_poe_mode(self, info): return self.poe_mode or None @@ -264,13 +276,13 @@ class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, Pa return self.rf_channel or None +@strawberry_django.type( + models.InterfaceTemplate, + fields='__all__', + filters=InterfaceTemplateFilter +) class InterfaceTemplateType(ComponentTemplateObjectType): - class Meta: - model = models.InterfaceTemplate - fields = '__all__' - filterset_class = filtersets.InterfaceTemplateFilterSet - def resolve_poe_mode(self, info): return self.poe_mode or None @@ -281,97 +293,105 @@ class InterfaceTemplateType(ComponentTemplateObjectType): return self.rf_role or None +@strawberry_django.type( + models.InventoryItem, + exclude=('component_type', 'component_id'), + filters=InventoryItemFilter +) class InventoryItemType(ComponentObjectType): 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 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 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 Meta: - model = models.Manufacturer - fields = '__all__' - filterset_class = filtersets.ManufacturerFilterSet + pass +@strawberry_django.type( + models.Module, + fields='__all__', + filters=ModuleFilter +) 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 Meta: - model = models.ModuleBay - fields = '__all__' - filterset_class = filtersets.ModuleBayFilterSet + pass +@strawberry_django.type( + models.ModuleBayTemplate, + fields='__all__', + filters=ModuleBayTemplateFilter +) 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 Meta: - model = models.ModuleType - fields = '__all__' - filterset_class = filtersets.ModuleTypeFilterSet - def resolve_weight_unit(self, info): return self.weight_unit or None +@strawberry_django.type( + models.Platform, + fields='__all__', + filters=PlatformFilter +) 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 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 Meta: - model = models.PowerOutlet - exclude = ('_path',) - filterset_class = filtersets.PowerOutletFilterSet - def resolve_feed_leg(self, info): return self.feed_leg or None @@ -379,13 +399,13 @@ class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin) return self.type or None +@strawberry_django.type( + models.PowerOutletTemplate, + fields='__all__', + filters=PowerOutletTemplateFilter +) class PowerOutletTemplateType(ComponentTemplateObjectType): - class Meta: - model = models.PowerOutletTemplate - fields = '__all__' - filterset_class = filtersets.PowerOutletTemplateFilterSet - def resolve_feed_leg(self, info): return self.feed_leg or None @@ -393,43 +413,44 @@ class PowerOutletTemplateType(ComponentTemplateObjectType): return self.type or None +@strawberry_django.type( + models.PowerPanel, + fields='__all__', + filters=PowerPanelFilter +) 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 Meta: - model = models.PowerPort - exclude = ('_path',) - filterset_class = filtersets.PowerPortFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.PowerPortTemplate, + fields='__all__', + filters=PowerPortTemplateFilter +) class PowerPortTemplateType(ComponentTemplateObjectType): - class Meta: - model = models.PowerPortTemplate - fields = '__all__' - filterset_class = filtersets.PowerPortTemplateFilterSet - def resolve_type(self, info): return self.type or None +@strawberry_django.type( + models.Rack, + fields='__all__', + filters=RackFilter +) class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType): - class Meta: - model = models.Rack - fields = '__all__' - filterset_class = filtersets.RackFilterSet - def resolve_type(self, info): return self.type or None @@ -440,74 +461,82 @@ class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje return self.weight_unit or None +@strawberry_django.type( + models.RackReservation, + fields='__all__', + filters=RackReservationFilter +) 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 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 Meta: - model = models.RearPort - fields = '__all__' - filterset_class = filtersets.RearPortFilterSet + pass +@strawberry_django.type( + models.RearPortTemplate, + fields='__all__', + filters=RearPortTemplateFilter +) 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 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): 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 Meta: - model = models.SiteGroup - fields = '__all__' - filterset_class = filtersets.SiteGroupFilterSet + pass +@strawberry_django.type( + models.VirtualChassis, + fields='__all__', + filters=VirtualChassisFilter +) 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 Meta: - model = models.VirtualDeviceContext - fields = '__all__' - filterset_class = filtersets.VirtualDeviceContextFilterSet + pass diff --git a/netbox/extras/graphql/types.py b/netbox/extras/graphql/types.py index 86f3179b7..5e69afa9d 100644 --- a/netbox/extras/graphql/types.py +++ b/netbox/extras/graphql/types.py @@ -1,8 +1,11 @@ +import strawberry +import strawberry_django + import strawberry from strawberry import auto import strawberry_django -from extras import filtersets, models +from extras import models from extras.graphql.mixins import CustomFieldsMixin, TagsMixin from netbox.graphql.types import BaseObjectType, ObjectType, OrganizationalObjectType from .filters import * diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index b4350f9f2..1c827b0c0 100644 --- a/netbox/ipam/graphql/types.py +++ b/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.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType +from .filters import * __all__ = ( 'ASNType', @@ -46,142 +48,152 @@ class BaseIPAddressFamilyType: return IPAddressFamilyType(self.family) +@strawberry_django.type( + models.ASN, + fields='__all__', + filters=ProviderFilter +) class ASNType(NetBoxObjectType): 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 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 Meta: - model = models.Aggregate - fields = '__all__' - filterset_class = filtersets.AggregateFilterSet + pass +@strawberry_django.type( + models.FHRPGroup, + fields='__all__', + filters=FHRPGroupFilter +) class FHRPGroupType(NetBoxObjectType): - class Meta: - model = models.FHRPGroup - fields = '__all__' - filterset_class = filtersets.FHRPGroupFilterSet - def resolve_auth_type(self, info): return self.auth_type or None +@strawberry_django.type( + models.FHRPGroupAssignment, + exclude=('interface_type', 'interface_id'), + filters=FHRPGroupAssignmentFilter +) class FHRPGroupAssignmentType(BaseObjectType): 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): 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): return self.role or None +@strawberry_django.type( + models.IPRange, + fields='__all__', + filters=IPRangeFilter +) class IPRangeType(NetBoxObjectType): - class Meta: - model = models.IPRange - fields = '__all__' - filterset_class = filtersets.IPRangeFilterSet - def resolve_role(self, info): return self.role or None +@strawberry_django.type( + models.Prefix, + fields='__all__', + filters=PrefixFilter +) 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 Meta: - model = models.RIR - fields = '__all__' - filterset_class = filtersets.RIRFilterSet + pass +@strawberry_django.type( + models.Role, + fields='__all__', + filters=RoleFilter +) 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 Meta: - model = models.RouteTarget - fields = '__all__' - filterset_class = filtersets.RouteTargetFilterSet + pass +@strawberry_django.type( + models.Service, + fields='__all__', + filters=ServiceFilter +) 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 Meta: - model = models.ServiceTemplate - fields = '__all__' - filterset_class = filtersets.ServiceTemplateFilterSet + pass +@strawberry_django.type( + models.VLAN, + fields='__all__', + filters=VLANFilter +) 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): 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 Meta: - model = models.VRF - fields = '__all__' - filterset_class = filtersets.VRFFilterSet + pass diff --git a/netbox/netbox/graphql/filters.py b/netbox/netbox/graphql/filters.py new file mode 100644 index 000000000..c9e3c5776 --- /dev/null +++ b/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) diff --git a/netbox/netbox/graphql/schema.py b/netbox/netbox/graphql/schema.py index 6a9e13d1c..5b33de143 100644 --- a/netbox/netbox/graphql/schema.py +++ b/netbox/netbox/graphql/schema.py @@ -9,25 +9,22 @@ from users.graphql.schema import UsersQuery @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 -# 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( query=Query, diff --git a/netbox/tenancy/graphql/filters.py b/netbox/tenancy/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/tenancy/graphql/types.py b/netbox/tenancy/graphql/types.py index aab02b121..a1bdc4e47 100644 --- a/netbox/tenancy/graphql/types.py +++ b/netbox/tenancy/graphql/types.py @@ -1,8 +1,10 @@ -import graphene +import strawberry +import strawberry_django 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 .filters import * __all__ = ( 'ContactAssignmentType', @@ -25,53 +27,59 @@ class ContactAssignmentsMixin: # Tenants # +@strawberry_django.type( + models.Tenant, + fields='__all__', + filters=TenantFilter +) 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 Meta: - model = models.TenantGroup - fields = '__all__' - filterset_class = filtersets.TenantGroupFilterSet + pass # # Contacts # +@strawberry_django.type( + models.Contact, + fields='__all__', + filters=ContactFilter +) 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 Meta: - model = models.ContactRole - fields = '__all__' - filterset_class = filtersets.ContactRoleFilterSet + pass +@strawberry_django.type( + models.ContactGroup, + fields='__all__', + filters=ContactGroupFilter +) 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 Meta: - model = models.ContactAssignment - fields = '__all__' - filterset_class = filtersets.ContactAssignmentFilterSet + pass diff --git a/netbox/virtualization/graphql/filters.py b/netbox/virtualization/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/virtualization/graphql/types.py b/netbox/virtualization/graphql/types.py index 9b97e1dc9..03d7ba37b 100644 --- a/netbox/virtualization/graphql/types.py +++ b/netbox/virtualization/graphql/types.py @@ -1,8 +1,12 @@ +import strawberry +import strawberry_django + from dcim.graphql.types import ComponentObjectType from extras.graphql.mixins import ConfigContextMixin from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin from netbox.graphql.types import OrganizationalObjectType, NetBoxObjectType -from virtualization import filtersets, models +from virtualization import models +from .filters import * __all__ = ( 'ClusterType', @@ -14,55 +18,59 @@ __all__ = ( ) +@strawberry_django.type( + models.Cluster, + fields='__all__', + filters=ClusterFilter +) 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 Meta: - model = models.ClusterGroup - fields = '__all__' - filterset_class = filtersets.ClusterGroupFilterSet + pass +@strawberry_django.type( + models.ClusterType, + fields='__all__', + filters=ClusterTypeFilter +) 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 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 Meta: - model = models.VMInterface - fields = '__all__' - filterset_class = filtersets.VMInterfaceFilterSet - def resolve_mode(self, info): return self.mode or None +@strawberry_django.type( + models.VirtualDisk, + fields='__all__', + filters=VirtualDiskFilter +) class VirtualDiskType(ComponentObjectType): - class Meta: - model = models.VirtualDisk - fields = '__all__' - filterset_class = filtersets.VirtualDiskFilterSet - def resolve_mode(self, info): return self.mode or None diff --git a/netbox/vpn/graphql/filters.py b/netbox/vpn/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/vpn/graphql/types.py b/netbox/vpn/graphql/types.py index 0bfebb441..72919edfd 100644 --- a/netbox/vpn/graphql/types.py +++ b/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 netbox.graphql.types import ObjectType, OrganizationalObjectType, NetBoxObjectType -from vpn import filtersets, models +from vpn import models +from .filters import * __all__ = ( 'IKEPolicyType', @@ -18,81 +20,91 @@ __all__ = ( ) +@strawberry_django.type( + models.TunnelGroup, + fields='__all__', + filters=TunnelGroupFilter +) 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 Meta: - model = models.TunnelTermination - fields = '__all__' - filterset_class = filtersets.TunnelTerminationFilterSet + pass +@strawberry_django.type( + models.Tunnel, + fields='__all__', + filters=TunnelFilter +) 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 Meta: - model = models.IKEProposal - fields = '__all__' - filterset_class = filtersets.IKEProposalFilterSet + pass +@strawberry_django.type( + models.IKEPolicy, + fields='__all__', + filters=IKEPolicyFilter +) 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 Meta: - model = models.IPSecProposal - fields = '__all__' - filterset_class = filtersets.IPSecProposalFilterSet + pass +@strawberry_django.type( + models.IPSecPolicy, + fields='__all__', + filters=IPSecPolicyFilter +) 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 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 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): 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 diff --git a/netbox/wireless/graphql/filters.py b/netbox/wireless/graphql/filters.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/wireless/graphql/types.py b/netbox/wireless/graphql/types.py index 2fc477dfa..7df0a46d3 100644 --- a/netbox/wireless/graphql/types.py +++ b/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 .filters import * __all__ = ( 'WirelessLANType', @@ -8,21 +12,22 @@ __all__ = ( ) +@strawberry_django.type( + models.WirelessLANGroup, + fields='__all__', + filters=WirelessLANGroupFilter +) 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 Meta: - model = models.WirelessLAN - fields = '__all__' - filterset_class = filtersets.WirelessLANFilterSet - def resolve_auth_type(self, info): return self.auth_type or None @@ -30,13 +35,13 @@ class WirelessLANType(NetBoxObjectType): return self.auth_cipher or None +@strawberry_django.type( + models.WirelessLink, + fields='__all__', + filters=WirelessLinkFilter +) class WirelessLinkType(NetBoxObjectType): - class Meta: - model = models.WirelessLink - fields = '__all__' - filterset_class = filtersets.WirelessLinkFilterSet - def resolve_auth_type(self, info): return self.auth_type or None