Skip to main content

Tools for use [`graphene-django`](https://github.com/graphql-python/graphene-django)

Project description

Graphene django tools

build status version python version django version wheel maintenance

Tools for use graphene-django

Install

pip install graphene-django-tools

Features

Resolver

Using mongoose-like schema to write apollo-like resolver.

simple example:

import graphene
import graphene_django_tools as gdtools

class Foo(gdtools.Resolver):
    schema = {
        "args": {
            "key":  'String!',
            "value": 'String!',
        },
        "type": 'String!',
    }

    def resolve(self, **kwargs):
        self.parent # parent field
        self.info # resolve info
        self.context # django request object
        return kwargs['value']

class Query(graphene.ObjectType):
    foo = Foo.as_field()
{
  foo(key: "k", value: "v")
}
{ "foo": "v" }

relay node:

class Pet(gdtools.Resolver):
    schema = {
        'type': {
            'name': models.Pet._meta.get_field('name'),
            'age': models.Pet._meta.get_field('age'),
        },
        'interfaces': (graphene.Node,)
    }

    def get_node(self, id_):
        return models.Pet.objects.get(pk=id_)

    def validate(self, value):
        return isinstance(value, models.Pet)

class Query(graphene.ObjectType):
    node = graphene.Node.Field()

schema = graphene.Schema(query=Query, types=[Pet.as_type()])
{
  node(id: "UGV0OjE=") {
    id
    __typename
    ... on Pet {
      name
      age
    }
  }
}
{ "node": { "id": "UGV0OjE=", "__typename": "Pet", "name": "pet1", "age": 1 } }

relay connection:

class Item(gdtools.Resolver):
    schema = {'name': 'String!'}

class Items(gdtools.Resolver):
    schema = gdtools.get_connection(Item)

    def resolve(self, **kwargs):
        return gdtools.resolve_connection([{'name': 'a'}, {'name': 'b'}], **kwargs)
{
  items {
    edges {
      node {
        name
      }
      cursor
    }
    pageInfo {
      total
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
  }
}
{
  "items": {
    "edges": [
      { "node": { "name": "a" }, "cursor": "YXJyYXljb25uZWN0aW9uOjA=" },
      { "node": { "name": "b" }, "cursor": "YXJyYXljb25uZWN0aW9uOjE=" }
    ],
    "pageInfo": {
      "total": 2,
      "hasNextPage": false,
      "hasPreviousPage": false,
      "startCursor": "YXJyYXljb25uZWN0aW9uOjA=",
      "endCursor": "YXJyYXljb25uZWN0aW9uOjE="
    }
  }
}

complicated example:

class Foo(gdtools.Resolver):
    _input_schema = {
        "type": {"type": 'String'},
        "data": [
            {
                "type":
                {
                    "key": {
                        "type": 'String',
                        "required": True,
                        "description": "<description>",
                    },
                    "value": 'Int',
                    "extra": {
                        "type": ['String!'],
                        "deprecation_reason": "<deprecated>"
                    },
                },
                "required": True
            },
        ],
    }
    schema = {
        "args": {
            "input": _input_schema
        },
        "type": _input_schema,
        "description": "description",
        "deprecation_reason": None
    }

    def resolve(self, **kwargs):
        return kwargs['input']
{
  foo(
    input: { type: "type", data: [{ key: "key", value: 42, extra: ["extra"] }] }
  ) {
    type
    data {
      key
      value
      extra
    }
  }
}
{
  "foo": {
    "type": "type",
    "data": [{ "key": "key", "value": 42, "extra": ["extra"] }]
  }
}

Query

  • ModelField
  • ModelConnectionField
  • ModelFilterConnectionField

example schema

Map the user model with filter in 10 lines.

Mutation

  • ModelMutation
  • ModelCreateMutation
  • ModelUpdateMutation

example: graphene_django_tools.auth module

Map the user model with password validation in 40 lines.

Re-implemented Mutation class

Supports arguments on interface.

class ClientMutationID(graphene.Interface):
    """Mutation with a client mutation id.  """

    class Arguments:
        client_mutation_id = graphene.String()

    client_mutation_id = graphene.String()

Data loader integrate

Enable by add 'graphene_django_tools.dataloader.middleware.DataLoaderMiddleware' to your django settings GRAPHENE['MIDDLEWARE']

Development

run dev server: make dev

test: make test

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

graphene_django_tools-0.19.1.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

graphene_django_tools-0.19.1-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file graphene_django_tools-0.19.1.tar.gz.

File metadata

  • Download URL: graphene_django_tools-0.19.1.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.17 CPython/3.7.5 Windows/7

File hashes

Hashes for graphene_django_tools-0.19.1.tar.gz
Algorithm Hash digest
SHA256 d021728d66da892946ddcd612fea2c6133d7b244e9d7715ed9f1730ef7e65705
MD5 7596f48d8a8ad1682c20d8c05a8ec75d
BLAKE2b-256 0be1e6719ccea1f924babd59d8f2f11d07ab1e3a5f47727e6bfe0371880c0365

See more details on using hashes here.

Provenance

File details

Details for the file graphene_django_tools-0.19.1-py3-none-any.whl.

File metadata

File hashes

Hashes for graphene_django_tools-0.19.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b385604a41a22bc57e28628b2a63c0daa2944b512757243f217a0c3bb8969071
MD5 21543a386127690324ff2625eb080b2c
BLAKE2b-256 64490efce146e72e88d60c3042ecde09ec659de3c2d469ea900e37f0d783e94a

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page