Skip to content

Commit

Permalink
Add watch option to graphql_schema
Browse files Browse the repository at this point in the history
  • Loading branch information
emilgoldsmith committed Jun 5, 2019
1 parent 0916e03 commit 044d86f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 12 deletions.
4 changes: 1 addition & 3 deletions graphene_django/debug/tests/test_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ def resolve_reporter(self, info, **args):
"""
expected = {
"reporter": {"lastName": "ABA"},
"_debug": {
"sql": [{"rawSql": str(Reporter.objects.order_by("pk")[:1].query)}]
},
"_debug": {"sql": [{"rawSql": str(Reporter.objects.order_by("pk")[:1].query)}]},
}
schema = graphene.Schema(query=Query)
result = schema.execute(
Expand Down
37 changes: 28 additions & 9 deletions graphene_django/management/commands/graphql_schema.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import importlib
import json
import functools

from django.core.management.base import BaseCommand, CommandError
from django.utils import autoreload

from graphene_django.settings import graphene_settings

Expand Down Expand Up @@ -32,6 +34,14 @@ def add_arguments(self, parser):
help="Output file indent (default: None)",
)

parser.add_argument(
"--watch",
dest="watch",
default=False,
action="store_true",
help="Updates the schema on file changes (default: False)",
)


class Command(CommandArguments):
help = "Dump Graphene schema JSON to file"
Expand All @@ -41,6 +51,18 @@ def save_file(self, out, schema_dict, indent):
with open(out, "w") as outfile:
json.dump(schema_dict, outfile, indent=indent, sort_keys=True)

def get_schema(self, schema, out, indent):
schema_dict = {"data": schema.introspect()}
if out == "-":
self.stdout.write(json.dumps(schema_dict, indent=indent, sort_keys=True))
else:
self.save_file(out, schema_dict, indent)

style = getattr(self, "style", None)
success = getattr(style, "SUCCESS", lambda x: x)

self.stdout.write(success("Successfully dumped GraphQL schema to %s" % out))

def handle(self, *args, **options):
options_schema = options.get("schema")

Expand All @@ -63,13 +85,10 @@ def handle(self, *args, **options):
)

indent = options.get("indent")
schema_dict = {"data": schema.introspect()}
if out == "-":
self.stdout.write(json.dumps(schema_dict, indent=indent, sort_keys=True))
watch = options.get("watch")
if watch:
autoreload.run_with_reloader(
functools.partial(self.get_schema, schema, out, indent)
)
else:
self.save_file(out, schema_dict, indent)

style = getattr(self, "style", None)
success = getattr(style, "SUCCESS", lambda x: x)

self.stdout.write(success("Successfully dumped GraphQL schema to %s" % out))
self.get_schema(schema, out, indent)

0 comments on commit 044d86f

Please sign in to comment.