Skip to main content

Pypi Build Status Codecov Codacy

A collection of custom extensions for Django GraphQL

Dependencies

  • Python ≥ 3.6

  • Django ≥ 2.0

  • Graphene-django ≥ 3.0.0b1

Installation

Install last stable version from Pypi.

pip install django-graphql-extensions

Authentication

  • @login_required

  • @staff_member_required

  • @superuser_required

  • @permission_required

  • @user_passes_test

See the documentation to know the full list of decorators.

from django.contrib.auth import get_user_model

import graphene
from graphql_extensions.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
  • exceptions.GraphQLError

  • exceptions.PermissionDenied

  • exceptions.ValidationError

  • exceptions.NotFound

Payload

{
  "errors": [
    {
      "message": "You do not have permission to perform this action",
      "locations": [
        {
          "line": 3,
          "column": 13
        }
      ],
      "path": [
        "viewer"
      ],
      "extensions": {
        "type": "PermissionDenied",
        "code": "permissionDenied",
        "timestamp": 1622783872,
        "data": {},
        "operation": "QUERY",
        "trace": [
          "  File \"site-packages/graphql/execution/execute.py\", line 617, in resolve_field\n    result = resolve_fn(source, info, **args)\n",
          "  File \"graphql_extensions/decorators.py\", line 23, in wrapper\n    return func(info.context, *args, **kwargs)\n",
          "  File \"graphql_extensions/decorators.py\", line 35, in wrapper\n    raise exc\n"
        ]
      }
    }
  ],
  "data": {
    "viewer": null
  }
}

Writing tests

This package includes a subclass of unittest.TestCase SchemaTestCase and improve support for making GraphQL queries.

from django.contrib.auth import get_user_model

from graphql_extensions.test import SchemaTestCase


class UsersTests(SchemaTestCase):

    def test_create_user(self):
        query = '''
        mutation CreateUser($username: String!, $password: String!) {
          createUser(username: $username, password: $password) {
            user {
              id
            }
          }
        }'''

        response = self.client.execute(query, {
            'username': 'test',
            'password': 'dolphins',
        })

        self.assertFalse(response.errors)
        self.assertTrue(response.data['user'])

    def test_viewer(self):
        user = get_user_model().objects.create_user(
            username='test',
            password='dolphins',
        )

        self.client.authenticate(self.user)

        query = '''
        {
          viewer {
            username
          }
        }'''

        response = self.client.execute(query)
        data = response.data['viewer']

        self.assertEqual(data['username'], user.username)

Types

Custom Graphene types.

  • Email

  • Timestamp

Release files for django-graphql-extensions 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-graphql-extensions 0.1.0
File Size Uploaded
django-graphql-extensions-0.1.0.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-graphql-extensions 0.1.0
File Interpreter ABI Platform
django_graphql_extensions-0.1.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 20.0 kB

Release files / django-graphql-extensions-0.1.0.tar.gz

Download URL django-graphql-extensions-0.1.0.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
eb997da2b56b934b78235d40935e6762828243e92e417a12e144e445a220bb04
BLAKE2b-256 checksum
How to use checksums
bb00a3002adf9fb2b53cdf33b4bec98f9736f71c9010362353ec5b10b96fd1e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.0

Release files / django_graphql_extensions-0.1.0-py2.py3-none-any.whl

Download URL django_graphql_extensions-0.1.0-py2.py3-none-any.whl
Size 10.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
7900d2f3b025fa3f8673f0373e4c97af0fc56681763407c13ed086a00bc735dc
BLAKE2b-256 checksum
How to use checksums
2e167cdbefb036a7c751cc754913cd6c0ddd6cf670b17ced9d5d50fbae598f76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.0 CPython/3.8.0

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page