Implement Django command for dumping schema.json

* Implement Django `./manage.py graphql_schema`

* Required to have 'graphene.django.contrib' in INSTALLED_APPS setting

* Introduces two new optional settings GRAPHENE_SCHEMA and
  GRAPHENE_SCHEMA_OUTPUT

* GRAPHENE_SCHEMA for the Django app containing the schema

* GRAPHENE_SCHEMA_OUTPUT for the output file (defaults to schema.json)

* Use `./manage.py graphql_schema -h` for help in command line
This commit is contained in:
Kevin Abiera 2015-12-18 20:41:28 +08:00
parent 90889ca455
commit 73c04f22c8
No known key found for this signature in database
GPG Key ID: AE191DA536781E56
3 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,38 @@
from django.core.management.base import BaseCommand, CommandError
import importlib
import json
class Command(BaseCommand):
help = 'Dump Graphene schema JSON to file'
can_import_settings = True
def add_arguments(self, parser):
from django.conf import settings
parser.add_argument(
'--schema',
type=str,
dest='schema',
default=getattr(settings, 'GRAPHENE_SCHEMA', ''),
help='Django app containing schema to dump, e.g. myproject.core.schema')
parser.add_argument(
'--out',
type=str,
dest='out',
default=getattr(settings, 'GRAPHENE_SCHEMA_OUTPUT', 'schema.json'),
help='Output file (default: schema.json)')
def handle(self, *args, **options):
schema_module = options['schema']
if schema_module == '':
raise CommandError('Specify schema on GRAPHENE_SCHEMA setting or by using --schema')
i = importlib.import_module(schema_module)
schema_dict = {'data': i.schema.introspect()}
with open(options['out'], 'w') as outfile:
json.dump(schema_dict, outfile)
self.stdout.write(self.style.SUCCESS('Successfully dumped GraphQL schema to %s' % options['out']))