Arthur 1 год назад
Родитель
Сommit
ccc81e73d1

+ 0 - 24
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

+ 0 - 95
netbox/ipam/graphql/gfk_mixins.py

@@ -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

+ 11 - 9
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()

+ 16 - 5
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,
+)

+ 5 - 11
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(

+ 0 - 1
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
 

+ 0 - 12
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()