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

+ 11 - 11
netbox/netbox/graphql/schema.py

@@ -1,18 +1,18 @@
 import strawberry
 from strawberry_django.optimizer import DjangoOptimizerExtension
+from strawberry.schema.config import StrawberryConfig
+from users.graphql.schema import UsersQuery
 
 
 @strawberry.type
-class User:
-    name: str
-    age: int
+class Query(UsersQuery):
+    pass
 
 
-@strawberry.type
-class Query:
-    @strawberry.field
-    def user(self) -> User:
-        return User(name="Patrick", age=100)
-
-
-schema = strawberry.Schema(query=Query)
+schema = strawberry.Schema(
+    query=Query,
+    config=StrawberryConfig(auto_camel_case=False),
+    extensions=[
+        DjangoOptimizerExtension,
+    ]
+)

+ 1 - 0
netbox/users/filtersets.py

@@ -1,4 +1,5 @@
 import django_filters
+
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 from django.db.models import Q

+ 8 - 13
netbox/users/graphql/schema.py

@@ -1,21 +1,16 @@
-import graphene
+from typing import List
+import strawberry
 
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 from netbox.graphql.fields import ObjectField, ObjectListField
 from .types import *
-from utilities.graphql_optimizer import gql_query_optimizer
 
 
-class UsersQuery(graphene.ObjectType):
-    group = ObjectField(GroupType)
-    group_list = ObjectListField(GroupType)
+@strawberry.type
+class UsersQuery:
+    group: GroupType = strawberry.django.field()
+    group_list: List[GroupType] = strawberry.django.field()
 
-    def resolve_group_list(root, info, **kwargs):
-        return gql_query_optimizer(Group.objects.all(), info)
-
-    user = ObjectField(UserType)
-    user_list = ObjectListField(UserType)
-
-    def resolve_user_list(root, info, **kwargs):
-        return gql_query_optimizer(get_user_model().objects.all(), info)
+    user: UserType = strawberry.django.field()
+    user_list: List[UserType] = strawberry.django.field()

+ 22 - 23
netbox/users/graphql/types.py

@@ -1,9 +1,10 @@
+import strawberry
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
-from graphene_django import DjangoObjectType
-
+from strawberry import auto
 from users import filtersets
 from utilities.querysets import RestrictedQuerySet
+from .filters import *
 
 __all__ = (
     'GroupType',
@@ -11,28 +12,26 @@ __all__ = (
 )
 
 
-class GroupType(DjangoObjectType):
-
-    class Meta:
-        model = Group
-        fields = ('id', 'name')
-        filterset_class = filtersets.GroupFilterSet
-
+@strawberry.django.type(
+    Group,
+    fields=['id', 'name'],
+    filters=GroupFilter
+)
+class GroupType:
     @classmethod
-    def get_queryset(cls, queryset, info):
-        return RestrictedQuerySet(model=Group).restrict(info.context.user, 'view')
+    def get_queryset(cls, queryset, info, **kwargs):
+        return RestrictedQuerySet(model=Group).restrict(info.context.request.user, 'view')
 
 
-class UserType(DjangoObjectType):
-
-    class Meta:
-        model = get_user_model()
-        fields = (
-            'id', 'username', 'password', 'first_name', 'last_name', 'email', 'is_staff', 'is_active', 'date_joined',
-            'groups',
-        )
-        filterset_class = filtersets.UserFilterSet
-
+@strawberry.django.type(
+    get_user_model(),
+    fields=[
+        'id', 'username', 'password', 'first_name', 'last_name', 'email', 'is_staff',
+        'is_active', 'date_joined', 'groups',
+    ],
+    filters=UserFilter
+)
+class UserType:
     @classmethod
-    def get_queryset(cls, queryset, info):
-        return RestrictedQuerySet(model=get_user_model()).restrict(info.context.user, 'view')
+    def get_queryset(cls, queryset, info, **kwargs):
+        return RestrictedQuerySet(model=get_user_model()).restrict(info.context.request.user, 'view')