mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-13 17:52:19 +03:00
fix typo
This commit is contained in:
parent
7ab0e806c1
commit
45104749a0
181
graphene_django/management/commands/graphql.py
Normal file
181
graphene_django/management/commands/graphql.py
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
import importlib
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import inspect
|
||||||
|
import os
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from graphene_django.settings import graphene_settings
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
INSTALLED_APPS = [app for app in settings.INSTALLED_APPS if 'django' not in app]
|
||||||
|
|
||||||
|
PY_FILES = ['node.py', 'edge.py', '__init__.py', 'lib.py', 'resolvers.py']
|
||||||
|
|
||||||
|
pythonic_init = """
|
||||||
|
from .node import {model_name}Node
|
||||||
|
"""
|
||||||
|
|
||||||
|
pythonic_node = """
|
||||||
|
#encoding=utf-8
|
||||||
|
|
||||||
|
from lazy_import import lazy_module, lazy_callable
|
||||||
|
from graphene_django import DjangoObjectType
|
||||||
|
from graphene.relay import Node
|
||||||
|
|
||||||
|
# lazy_modules imports
|
||||||
|
|
||||||
|
from {application}.{model_module} import {model_name}
|
||||||
|
|
||||||
|
|
||||||
|
class {model_name}Node(DjangoObjectType):
|
||||||
|
class Meta:
|
||||||
|
interfaces = (
|
||||||
|
Node,
|
||||||
|
)
|
||||||
|
model = {model_name}
|
||||||
|
|
||||||
|
neomodel_filter_fields = {
|
||||||
|
# announce here dynamic filtering
|
||||||
|
}
|
||||||
|
only_fields = ()
|
||||||
|
exclude_fields = ()
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def get_models(application, model_name, model_module_name="models"):
|
||||||
|
# get models from application
|
||||||
|
from neomodel import StructuredNode # noqa
|
||||||
|
module_name = ".".join([application, model_module_name])
|
||||||
|
for name, obj in inspect.getmembers(sys.modules[module_name]):
|
||||||
|
if inspect.isclass(obj) and (StructuredNode in obj.__bases__):
|
||||||
|
if model_name == ".":
|
||||||
|
yield obj
|
||||||
|
elif model_name.strip() == name:
|
||||||
|
yield obj
|
||||||
|
|
||||||
|
|
||||||
|
class CommandArguments(BaseCommand):
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
"-A",
|
||||||
|
"--application",
|
||||||
|
type=str,
|
||||||
|
dest="application",
|
||||||
|
required=True,
|
||||||
|
help="Choose the django destination app",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-M",
|
||||||
|
"--model",
|
||||||
|
type=str,
|
||||||
|
dest="model",
|
||||||
|
required=True,
|
||||||
|
help="Choose the model, or type . (ALL models)",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--app-module-models",
|
||||||
|
type=str,
|
||||||
|
dest="app_module_models",
|
||||||
|
help="Choose the module of models",
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-O',
|
||||||
|
"--output-application",
|
||||||
|
type=str,
|
||||||
|
dest="output_app",
|
||||||
|
help="Choose the output application of graphQL nodes",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Command(CommandArguments):
|
||||||
|
help = "Django-GraphQL management module"
|
||||||
|
can_import_settings = True
|
||||||
|
|
||||||
|
def interpretate_model_to_graphqQL(self,
|
||||||
|
model,
|
||||||
|
out_application,
|
||||||
|
application,
|
||||||
|
app_module_models):
|
||||||
|
# out_application(d) -> graphql(d) -> model(d)
|
||||||
|
# -> node.py (f)
|
||||||
|
# -> resolvers.py (f)
|
||||||
|
# -> lib.py (f)
|
||||||
|
# -> edge.py (f)
|
||||||
|
package_dir = model.__name__.lower()
|
||||||
|
output_path = os.path.join(settings.BASE_DIR, out_application, 'graphQL')
|
||||||
|
if not os.path.exists(output_path):
|
||||||
|
print("Does not exists", output_path, '. \nCreate...')
|
||||||
|
os.mkdir(output_path)
|
||||||
|
print("Directory graphQL in {} app created".format(out_application))
|
||||||
|
package_path = os.path.join(output_path, package_dir)
|
||||||
|
if os.path.exists(package_dir):
|
||||||
|
raise CommandError('Files for %s model already exists' % package_dir.capitalize())
|
||||||
|
print("Create path environment %s" % package_dir)
|
||||||
|
os.mkdir(package_path)
|
||||||
|
for file_name in PY_FILES:
|
||||||
|
with open(os.path.join(package_path, file_name), 'w') as file:
|
||||||
|
if file_name == "node.py":
|
||||||
|
file.write(pythonic_node.format(application=application,
|
||||||
|
model_module=app_module_models,
|
||||||
|
model_name=model.__name__))
|
||||||
|
elif file_name == '__init__.py':
|
||||||
|
file.write(pythonic_init.format(model.__name__))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
application = options.get('application')
|
||||||
|
out_application = options.get('output_app', application)
|
||||||
|
app_module_models = options.get('app_module_models', 'models')
|
||||||
|
|
||||||
|
if application not in INSTALLED_APPS:
|
||||||
|
raise CommandError('Application %s does\'nt exists' % application)
|
||||||
|
else:
|
||||||
|
models = list(get_models(application, options.get('model', '.'),
|
||||||
|
app_module_models))
|
||||||
|
if not models:
|
||||||
|
raise CommandError('Application %s has not contains %s model'
|
||||||
|
% (application, options.get('model')))
|
||||||
|
if out_application not in INSTALLED_APPS:
|
||||||
|
raise CommandError('Application %s does\'nt exists' % out_application)
|
||||||
|
for model in models:
|
||||||
|
self.intepretate_model_to_graphQL(model,
|
||||||
|
out_application,
|
||||||
|
application,
|
||||||
|
app_module_models)
|
||||||
|
|
||||||
|
|
||||||
|
# options_schema = options.get("schema")
|
||||||
|
|
||||||
|
# if options_schema and type(options_schema) is str:
|
||||||
|
# module_str, schema_name = options_schema.rsplit(".", 1)
|
||||||
|
# mod = importlib.import_module(module_str)
|
||||||
|
# schema = getattr(mod, schema_name)
|
||||||
|
|
||||||
|
# elif options_schema:
|
||||||
|
# schema = options_schema
|
||||||
|
|
||||||
|
# else:
|
||||||
|
# schema = graphene_settings.SCHEMA
|
||||||
|
|
||||||
|
# out = options.get("out") or graphene_settings.SCHEMA_OUTPUT
|
||||||
|
|
||||||
|
# if not schema:
|
||||||
|
# raise CommandError(
|
||||||
|
# "Specify schema on GRAPHENE.SCHEMA setting or by using --schema"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# indent = options.get("indent")
|
||||||
|
# schema_dict = {"data": schema.introspect()}
|
||||||
|
# if out == '-':
|
||||||
|
# self.stdout.write(json.dumps(schema_dict, indent=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))
|
|
@ -0,0 +1,4 @@
|
||||||
|
__author__ = "TimurMardanov"
|
||||||
|
|
||||||
|
from .edges import EdgeNode
|
||||||
|
from .nodes import RelayConnection, Connection
|
9
setup.py
9
setup.py
|
@ -51,7 +51,7 @@ setup(
|
||||||
packages=find_packages(exclude=["tests"]),
|
packages=find_packages(exclude=["tests"]),
|
||||||
install_requires=[
|
install_requires=[
|
||||||
"six>=1.10.0",
|
"six>=1.10.0",
|
||||||
"graphene>=2.1.3,<3",
|
# "graphene>=2.1.3,<3",
|
||||||
"graphql-core>=2.1.0,<3",
|
"graphql-core>=2.1.0,<3",
|
||||||
"Django>=1.11",
|
"Django>=1.11",
|
||||||
"singledispatch>=3.4.0.3",
|
"singledispatch>=3.4.0.3",
|
||||||
|
@ -60,7 +60,12 @@ setup(
|
||||||
],
|
],
|
||||||
dependency_links=[
|
dependency_links=[
|
||||||
# TODO refactor this
|
# TODO refactor this
|
||||||
"git+git://github.com/MardanovTimur/neomodel.git@arch_neomodel#egg=neomodel", # custom neomodel
|
# django-filter (filter by neomodel)
|
||||||
|
"git+git://github.com/MardanovTimur/django-filter.git@neomodel#egg=django-filter",
|
||||||
|
# graphene
|
||||||
|
"git+git://github.com/MardanovTimur/graphene.git@master#egg=graphene",
|
||||||
|
# custom neomodel
|
||||||
|
"git+git://github.com/MardanovTimur/neomodel.git@arch_neomodel#egg=neomodel",
|
||||||
],
|
],
|
||||||
setup_requires=["pytest-runner"],
|
setup_requires=["pytest-runner"],
|
||||||
tests_require=tests_require,
|
tests_require=tests_require,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user