mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-22 17:47:12 +03:00
Add watch option to graphql_schema (#656)
* Add watch option to graphql_schema * add documentation for grapql_schema --watch
This commit is contained in:
parent
a9a8d672e9
commit
fcc491fffb
|
@ -35,6 +35,8 @@ Advanced Usage
|
||||||
The ``--indent`` option can be used to specify the number of indentation spaces to
|
The ``--indent`` option can be used to specify the number of indentation spaces to
|
||||||
be used in the output. Defaults to `None` which displays all data on a single line.
|
be used in the output. Defaults to `None` which displays all data on a single line.
|
||||||
|
|
||||||
|
The ``--watch`` option can be used to run ``./manage.py graphql_schema`` in watch mode, where it will automatically output a new schema every time there are file changes in your project
|
||||||
|
|
||||||
To simplify the command to ``./manage.py graphql_schema``, you can
|
To simplify the command to ``./manage.py graphql_schema``, you can
|
||||||
specify the parameters in your settings.py:
|
specify the parameters in your settings.py:
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import importlib
|
import importlib
|
||||||
import json
|
import json
|
||||||
|
import functools
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django.utils import autoreload
|
||||||
|
|
||||||
from graphene_django.settings import graphene_settings
|
from graphene_django.settings import graphene_settings
|
||||||
|
|
||||||
|
@ -32,6 +34,14 @@ class CommandArguments(BaseCommand):
|
||||||
help="Output file indent (default: None)",
|
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):
|
class Command(CommandArguments):
|
||||||
help = "Dump Graphene schema JSON to file"
|
help = "Dump Graphene schema JSON to file"
|
||||||
|
@ -41,6 +51,18 @@ class Command(CommandArguments):
|
||||||
with open(out, "w") as outfile:
|
with open(out, "w") as outfile:
|
||||||
json.dump(schema_dict, outfile, indent=indent, sort_keys=True)
|
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):
|
def handle(self, *args, **options):
|
||||||
options_schema = options.get("schema")
|
options_schema = options.get("schema")
|
||||||
|
|
||||||
|
@ -63,13 +85,10 @@ class Command(CommandArguments):
|
||||||
)
|
)
|
||||||
|
|
||||||
indent = options.get("indent")
|
indent = options.get("indent")
|
||||||
schema_dict = {"data": schema.introspect()}
|
watch = options.get("watch")
|
||||||
if out == "-":
|
if watch:
|
||||||
self.stdout.write(json.dumps(schema_dict, indent=indent, sort_keys=True))
|
autoreload.run_with_reloader(
|
||||||
|
functools.partial(self.get_schema, schema, out, indent)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
self.save_file(out, schema_dict, indent)
|
self.get_schema(schema, out, indent)
|
||||||
|
|
||||||
style = getattr(self, "style", None)
|
|
||||||
success = getattr(style, "SUCCESS", lambda x: x)
|
|
||||||
|
|
||||||
self.stdout.write(success("Successfully dumped GraphQL schema to %s" % out))
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user