From eceac90b1c1acdf82263321ef736197ee4d02d88 Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 24 Aug 2023 09:11:23 -0700 Subject: [PATCH] 9856 user and group --- netbox/netbox/graphql/schema.py | 22 ++++++++-------- netbox/users/filtersets.py | 1 + netbox/users/graphql/schema.py | 21 ++++++--------- netbox/users/graphql/types.py | 45 ++++++++++++++++----------------- 4 files changed, 42 insertions(+), 47 deletions(-) diff --git a/netbox/netbox/graphql/schema.py b/netbox/netbox/graphql/schema.py index 8f81efd0d..8323e440c 100644 --- a/netbox/netbox/graphql/schema.py +++ b/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, + ] +) diff --git a/netbox/users/filtersets.py b/netbox/users/filtersets.py index 0f590e012..9cde161bc 100644 --- a/netbox/users/filtersets.py +++ b/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 diff --git a/netbox/users/graphql/schema.py b/netbox/users/graphql/schema.py index f033a535a..b41df6779 100644 --- a/netbox/users/graphql/schema.py +++ b/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() diff --git a/netbox/users/graphql/types.py b/netbox/users/graphql/types.py index 4254f1791..60a97a7cc 100644 --- a/netbox/users/graphql/types.py +++ b/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')