alainburindi / graphene_generator

A Graphene-Django (GraphQL) queries and mutations generator
MIT License
9 stars 0 forks source link
graphene-django graphene-generator graphql graphql-schema python

Graphene-Generator

A Graphene-Django (GraphQL) queries and mutations generator

You can:

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': 'modelname', # eg: 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

License

MIT