A collection of custom extensions for Django GraphQL
Dependencies
Python ≥ 3.4
Django ≥ 1.11
Installation
Install last stable version from Pypi.
pip install django-graphql-extensions
Authentication
@login_required
@staff_member_required
@permission_required
@user_passes_test
from django.contrib.auth import get_user_model
import graphene
from graphql_extensions.auth.decorators import (
login_required, staff_member_required,
)
class Query(graphene.ObjectType):
viewer = graphene.Field(UserType)
users = graphene.List(UserType)
@login_required
def resolve_viewer(self, info, **kwargs):
return info.context.user
@staff_member_required
def resolve_users(self, info, **kwargs):
return get_user_model().objects.all()
Errors
Returning appropriate error responses and masking error messages sent to the client.
Configure your GraphQLView.
from django.urls import include, path
from graphql_extensions.views import GraphQLView
urlpatterns = [
path('', GraphQLView.as_view(), name='index'),
]
Exceptions
from graphql_extensions import exceptions
raise exceptions.GraphQLError()
raise exceptions.PermissionDenied()
raise exceptions.ValidationError()
raise exceptions.NotFound()
Payload
{
"errors": [
{
"type": "NotFound",
"message": "GraphQL object not found",
"code": "notFound",
"data": {
"id": 1
},
"path": ["updateGroup"],
"operation": "mutation",
"trace": [
" File \"/app/schema.py\", line 30, in mutate\n group = cls.update(info, **kwargs)\n",
" File \"/graphql_extensions/mixins.py\", line 32, in update\n instance = cls.get_object(context, id=id)\n",
" File \"/graphql_extensions/mixins.py\", line 21, in get_object\n raise exceptions.NotFound(**kwargs)\n"
]
}
],
"data": {
"updateGroup": null
}
}
Mixins
Pre-built mutations that provide for commonly used patterns.
RetrieveMixin
UpdateMixin
from django.contrib.auth.models import Group
import graphene
from graphene_django import DjangoObjectType
from graphql_extensions import mixins
from graphql_extensions.auth.decorators import login_required
class GroupType(DjangoObjectType):
class Meta:
model = Group
class UpdateGroup(mixins.UpdateMixin, graphene.Mutation):
group = graphene.Field(GroupType)
class Arguments:
id = graphene.Int(required=True)
name = graphene.String()
@classmethod
def get_queryset(cls, info, **kwargs):
return info.context.user.groups.all()
@classmethod
@login_required
def mutate(cls, root, info, **kwargs):
group = cls.update(info, **kwargs)
return cls(group=group)
Testing
Helper classes to improve support for testing.
GraphQLTestCase
from graphql_extensions.testcases import GraphQLTestCase
class UsersTests(GraphQLTestCase):
def test_create_user(self):
query = '''
mutation CreateUser($username: String!, $password: String!) {
createUser(username: $username, password: $password) {
user {
id
}
}
}'''
username = 'test'
password = 'dolphins'
response = self.client.execute(query, {
'username': username,
'password': password,
})
self.assertFalse(response.errors)
self.assertTrue(response.data['user'])
self.client.login(username=username, password=password)
query = '''
{
me {
username
}
}'''
response = self.client.execute(query)
self.assertEqual(response.data['me']['username'], username)
Types
Custom Graphene types.
Email
Timestamp
Choices
CamelJSON
…
Relay
Complete support for Relay.
Metadata
Release files for django-graphql-extensions 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django-graphql-extensions-0.0.3.tar.gz | 9.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_graphql_extensions-0.0.3-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 24.9 kB
Release files / django-graphql-extensions-0.0.3.tar.gz
| Download URL | django-graphql-extensions-0.0.3.tar.gz |
|---|---|
| Size | 9.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
01e674413158b1d9509246823dd91d658064da56f88bd020d41c21ab9a17e570
|
|
BLAKE2b-256 checksum How to use checksums |
564e2b1e4b8f3a6ffa48d2dd86d2947574c72b77739150dad20ea0c7000effb3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / django_graphql_extensions-0.0.3-py2.py3-none-any.whl
| Download URL | django_graphql_extensions-0.0.3-py2.py3-none-any.whl |
|---|---|
| Size | 15.5 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
1d2f77a47bddcc4b1a0b7d116ce8a3b711db7e322a726e32793d7357b1fefdb5
|
|
BLAKE2b-256 checksum How to use checksums |
f79860b46eda375f631f81f9d58add0445474a5f4ec9f105602f5ef64631ea82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |