A Graphene-Django app to conduct 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:
Django - a Python-based web framework,
Graphene-Django - A Django integration for Graphene.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for graphene_generator-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c0fafc7a9e1c9608b63c52c62efc0b93456ccf7b58aaf6ff5b37db44fb8f895 |
|
MD5 | 741ebc9e4e7a9c259c6aa4527e4c3332 |
|
BLAKE2b-256 | da379acb5914683f2d7c521769e1722c4fdd041d2911eb99704b51f264d8891e |