You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.4 KiB
72 lines
2.4 KiB
import importlib |
|
import json |
|
from distutils.version import StrictVersion |
|
from optparse import make_option |
|
|
|
from django import get_version as get_django_version |
|
from django.core.management.base import BaseCommand, CommandError |
|
|
|
LT_DJANGO_1_8 = StrictVersion(get_django_version()) < StrictVersion('1.8') |
|
|
|
if LT_DJANGO_1_8: |
|
class CommandArguments(BaseCommand): |
|
option_list = BaseCommand.option_list + ( |
|
make_option( |
|
'--schema', |
|
type=str, |
|
dest='schema', |
|
default='', |
|
help='Django app containing schema to dump, e.g. myproject.core.schema', |
|
), |
|
make_option( |
|
'--out', |
|
type=str, |
|
dest='out', |
|
default='', |
|
help='Output file (default: schema.json)' |
|
), |
|
) |
|
else: |
|
class CommandArguments(BaseCommand): |
|
|
|
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)') |
|
|
|
|
|
class Command(CommandArguments): |
|
help = 'Dump Graphene schema JSON to file' |
|
can_import_settings = True |
|
|
|
def save_file(self, out, schema_dict): |
|
with open(out, 'w') as outfile: |
|
json.dump(schema_dict, outfile) |
|
|
|
def handle(self, *args, **options): |
|
from django.conf import settings |
|
schema = options.get('schema') or getattr(settings, 'GRAPHENE_SCHEMA', '') |
|
out = options.get('out') or getattr(settings, 'GRAPHENE_SCHEMA_OUTPUT', 'schema.json') |
|
|
|
if schema == '': |
|
raise CommandError('Specify schema on GRAPHENE_SCHEMA setting or by using --schema') |
|
i = importlib.import_module(schema) |
|
|
|
schema_dict = {'data': i.schema.introspect()} |
|
self.save_file(out, schema_dict) |
|
|
|
style = getattr(self, 'style', None) |
|
success = getattr(style, 'SUCCESS', lambda x: x) |
|
|
|
self.stdout.write(success('Successfully dumped GraphQL schema to %s' % out))
|
|
|