Skip to content

A Graphene-Django (GraphQL) queries and mutations generator

License

Notifications You must be signed in to change notification settings

alainburindi/graphene_generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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': '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

  • 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

About

A Graphene-Django (GraphQL) queries and mutations generator

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages