diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index f44d0bc4f..abbd87528 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -507,10 +507,6 @@ class InterfaceType(IPAddressesMixin, ModularComponentType, CabledObjectMixin, P def child_interfaces(self) -> List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]]: return self.child_interfaces.all() - @strawberry_django.field - def ip_addresses(self) -> List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]]: - return self.ip_addresses.all() - @strawberry_django.type( models.InterfaceTemplate, @@ -596,10 +592,6 @@ class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, Organi def racks(self) -> List[Annotated["RackType", strawberry.lazy('dcim.graphql.types')]]: return self.racks.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.field def devices(self) -> List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]]: return self.devices.all() @@ -853,10 +845,6 @@ class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje def cabletermination_set(self) -> List[Annotated["CableTerminationType", strawberry.lazy('dcim.graphql.types')]]: return self.cabletermination_set.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.type( models.RackReservation, @@ -922,10 +910,6 @@ class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType): def sites(self) -> List[Annotated["SiteType", strawberry.lazy('dcim.graphql.types')]]: return self.sites.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.field def parent(self) -> Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent @@ -991,10 +975,6 @@ class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje def vlans(self) -> List[Annotated["VLANType", strawberry.lazy('ipam.graphql.types')]]: return self.vlans.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.type( models.SiteGroup, @@ -1008,10 +988,6 @@ class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType): def sites(self) -> List[Annotated["SiteType", strawberry.lazy('dcim.graphql.types')]]: return self.sites.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.field def parent(self) -> Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent diff --git a/netbox/ipam/graphql/gfk_mixins.py b/netbox/ipam/graphql/gfk_mixins.py deleted file mode 100644 index 01c79690a..000000000 --- a/netbox/ipam/graphql/gfk_mixins.py +++ /dev/null @@ -1,95 +0,0 @@ -import graphene -from dcim.graphql.types import ( - InterfaceType, - LocationType, - RackType, - RegionType, - SiteGroupType, - SiteType, -) -from dcim.models import Interface, Location, Rack, Region, Site, SiteGroup -from ipam.graphql.types import FHRPGroupType, VLANType -from ipam.models import VLAN, FHRPGroup -from virtualization.graphql.types import ClusterGroupType, ClusterType, VMInterfaceType -from virtualization.models import Cluster, ClusterGroup, VMInterface - - -class IPAddressAssignmentType(graphene.Union): - class Meta: - types = ( - InterfaceType, - FHRPGroupType, - VMInterfaceType, - ) - - @classmethod - def resolve_type(cls, instance, info): - if type(instance) is Interface: - return InterfaceType - if type(instance) is FHRPGroup: - return FHRPGroupType - if type(instance) is VMInterface: - return VMInterfaceType - - -class L2VPNAssignmentType(graphene.Union): - class Meta: - types = ( - InterfaceType, - VLANType, - VMInterfaceType, - ) - - @classmethod - def resolve_type(cls, instance, info): - if type(instance) is Interface: - return InterfaceType - if type(instance) is VLAN: - return VLANType - if type(instance) is VMInterface: - return VMInterfaceType - - -class FHRPGroupInterfaceType(graphene.Union): - class Meta: - types = ( - InterfaceType, - VMInterfaceType, - ) - - @classmethod - def resolve_type(cls, instance, info): - if type(instance) is Interface: - return InterfaceType - if type(instance) is VMInterface: - return VMInterfaceType - - -class VLANGroupScopeType(graphene.Union): - class Meta: - types = ( - ClusterType, - ClusterGroupType, - LocationType, - RackType, - RegionType, - SiteType, - SiteGroupType, - ) - - @classmethod - def resolve_type(cls, instance, info): - if type(instance) is Cluster: - return ClusterType - if type(instance) is ClusterGroup: - return ClusterGroupType - if type(instance) is Location: - return LocationType - if type(instance) is Rack: - return RackType - if type(instance) is Region: - return RegionType - if type(instance) is Site: - return SiteType - if type(instance) is SiteGroup: - return SiteGroupType diff --git a/netbox/ipam/graphql/mixins.py b/netbox/ipam/graphql/mixins.py index 38c7657a5..4fe41adde 100644 --- a/netbox/ipam/graphql/mixins.py +++ b/netbox/ipam/graphql/mixins.py @@ -1,4 +1,6 @@ -import graphene +import strawberry +import strawberry_django +from typing import TYPE_CHECKING, Annotated, List, Union __all__ = ( 'IPAddressesMixin', @@ -6,15 +8,15 @@ __all__ = ( ) +@strawberry.type class IPAddressesMixin: - ip_addresses = graphene.List('ipam.graphql.types.IPAddressType') - - def resolve_ip_addresses(self, info): - return self.ip_addresses.restrict(info.context.request.user, 'view') + @strawberry_django.field + def ip_addresses(self) -> List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]]: + return self.ip_addresses.all() +@strawberry.type class VLANGroupsMixin: - vlan_groups = graphene.List('ipam.graphql.types.VLANGroupType') - - def resolve_vlan_groups(self, info): - return self.vlan_groups.restrict(info.context.request.user, 'view') + @strawberry_django.field + def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: + return self.vlan_groups.all() diff --git a/netbox/netbox/tests/dummy_plugin/graphql.py b/netbox/netbox/tests/dummy_plugin/graphql.py index 640c12959..f57f7d333 100644 --- a/netbox/netbox/tests/dummy_plugin/graphql.py +++ b/netbox/netbox/tests/dummy_plugin/graphql.py @@ -14,6 +14,7 @@ class DummyModelType: pass +""" @strawberry.type class DummyQuery: @strawberry.field @@ -21,8 +22,18 @@ class DummyQuery: return None dummymodel_list: List[DummyModelType] = strawberry_django.field() -# bug - temp - FIXME! -# schema = strawberry.Schema( -# query=DummyQuery, -# config=StrawberryConfig(auto_camel_case=False), -# ) +schema = strawberry.Schema( + query=DummyQuery, + # config=StrawberryConfig(auto_camel_case=False), +) +""" + + +@strawberry.type +class Query: + fruits: list[int] = strawberry_django.field() + + +schema2 = strawberry.Schema( + query=Query, +) diff --git a/netbox/tenancy/graphql/types.py b/netbox/tenancy/graphql/types.py index 39f99bda8..e873aee51 100644 --- a/netbox/tenancy/graphql/types.py +++ b/netbox/tenancy/graphql/types.py @@ -18,11 +18,12 @@ __all__ = ( ) +@strawberry.type class ContactAssignmentsMixin: - # assignments = graphene.List('tenancy.graphql.types.ContactAssignmentType') - def resolve_assignments(self, info): - return self.assignments.restrict(info.context.user, 'view') + @strawberry_django.field + def assignments(self) -> List[Annotated["ContactAssignmentType", strawberry.lazy('tenancy.graphql.types')]]: + return self.assignments.all() # @@ -159,10 +160,6 @@ class TenantGroupType(OrganizationalObjectType): class ContactType(ContactAssignmentsMixin, NetBoxObjectType): group: Annotated["ContactGroupType", strawberry.lazy('tenancy.graphql.types')] | None - @strawberry_django.field - def assignments(self) -> List[Annotated["ContactAssignmentType", strawberry.lazy('tenancy.graphql.types')]]: - return self.assignments.all() - @strawberry_django.type( models.ContactRole, @@ -170,10 +167,7 @@ class ContactType(ContactAssignmentsMixin, NetBoxObjectType): filters=ContactRoleFilter ) class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType): - - @strawberry_django.field - def assignments(self) -> List[Annotated["ContactAssignmentType", strawberry.lazy('tenancy.graphql.types')]]: - return self.assignments.all() + pass @strawberry_django.type( diff --git a/netbox/utilities/testing/api.py b/netbox/utilities/testing/api.py index 698892536..6df317b49 100644 --- a/netbox/utilities/testing/api.py +++ b/netbox/utilities/testing/api.py @@ -7,7 +7,6 @@ from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.urls import reverse from django.test import override_settings -# from graphene.types import Dynamic as GQLDynamic, List as GQLList, Union as GQLUnion, String as GQLString, NonNull as GQLNonNull from rest_framework import status from rest_framework.test import APIClient diff --git a/netbox/virtualization/graphql/types.py b/netbox/virtualization/graphql/types.py index 447e79db4..0756ce824 100644 --- a/netbox/virtualization/graphql/types.py +++ b/netbox/virtualization/graphql/types.py @@ -44,10 +44,6 @@ class ClusterType(VLANGroupsMixin, NetBoxObjectType): def virtual_machines(self) -> List[Annotated["VirtualMachineType", strawberry.lazy('virtualization.graphql.types')]]: return self.virtual_machines.all() - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.field def devices(self) -> List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]]: return self.devices.all() @@ -60,10 +56,6 @@ class ClusterType(VLANGroupsMixin, NetBoxObjectType): ) class ClusterGroupType(VLANGroupsMixin, OrganizationalObjectType): - @strawberry_django.field - def vlan_groups(self) -> List[Annotated["VLANGroupType", strawberry.lazy('ipam.graphql.types')]]: - return self.vlan_groups.all() - @strawberry_django.field def clusters(self) -> List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]]: return self.clusters.all() @@ -125,10 +117,6 @@ class VMInterfaceType(IPAddressesMixin, ComponentType): untagged_vlan: Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None vrf: Annotated["VRFType", strawberry.lazy('ipam.graphql.types')] | None - @strawberry_django.field - def ip_addresses(self) -> List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]]: - return self.ip_addresses.all() - @strawberry_django.field def tagged_vlans(self) -> List[Annotated["VLANType", strawberry.lazy('ipam.graphql.types')]]: return self.tagged_vlans.all()