Skip to main content

A Graphene-Django app to generate GraphQL mutations and Queries.

Project description

Graphene-Generator

A Graphene-Django (GraphQL) queries and mutations generator

You can:

  • Generate queries and mutations based on the specified model(s)

  • Require authentication for some and/or all generated queries/mutations

Tech

Graphene-Generator uses a number of open source projects to work properly:

If you are not familiar with the above technologies, please refer to their respective documentation.

And of course Graphene-generator itself is open source with a public repository on GitHub.

Quickstart

For installing graphene, just run this command in your shell:

pip install "graphene-generator"

Settings

We need to specify the model(s) name to be used and their respective path(s)

GRAPHENE_GENERATOR_MODELS = [
    {
        'name': 'ingredient',
        'path': 'path.to.the.model',
    }
]

Note that GRAPHENE_GENERATOR_MODELS is an array to support many models at once.

Authentication

If we want to require the authentication, we need to specify that in our settings under the require_auth dictionary for each model

GRAPHENE_GENERATOR_MODELS = [
    {
        # ...
        'require_auth': {
            'queries': ["all", "single"],
            'mutations': ["create", 'update', 'delete']
        }
    }
]

To make the difference between Mutations and Queries the require_auth contains queries and mutations as different keys.

Below are the different values and their meaning:

Queries

Key word

Meaning

all

The get all query (usually the model['name'] + s)

single

The get one query (usually the model['name'])

Mutations

Key word

Meaning

create

The create mutation

update

The update mutation

delete

The delete mutation

Schema

We need to import the QueriesHolder and/or MutationsHolder classes into our schema used by graphene and you should be able to see the generated CRUD operations into you schema.

Examples

Here is a simple Django model:

from django.db import models

class Ingredient(models.Model):
    name = models.CharField(max_length=100)
    notes = models.TextField()

Based on the above model ou settings would look like:

GRAPHENE_GENERATOR_MODELS = [
    {
        'name': 'ingredient',
        'path': 'ingredients.models.Ingredient',
        'require_auth': {
            'queries': ["all", "single"],
            'mutations': ["create", 'update', 'delete']
        }
    }
]

Here is a graphene schema sample which use the generated requests:

import graphene

from graphene_generator.holder import QueriesHolder, MutationsHolder


class Query(QueriesHolder, graphene.ObjectType):
    pass


class Mutation(MutationsHolder, graphene.ObjectType):
    pass


schema = graphene.Schema(query=Query, mutation=MutationsHolder)

Then you can query the schema:

query = '''
    query {
      ingredients {
        name,
        notes
      }
    }
'''
result = schema.execute(query)

Todos

  • Write Tests

  • Handle model’s relations properly

  • Use corresponding graphene scalar type for each field(currently using string for all fields)

  • Handle pagination

License

MIT

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_generator-0.1.2.tar.gz (7.0 kB view hashes)

Uploaded Source

Built Distribution

graphene_generator-0.1.2-py3-none-any.whl (8.8 kB view hashes)

Uploaded Python 3

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