From 65a0a46d4593eab5d50751a202f0c4a999bfafb8 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Thu, 10 Dec 2015 22:02:00 -0800 Subject: [PATCH] Fixed django debug plugin --- graphene/contrib/django/debug/plugin.py | 16 ++++---- graphene/contrib/django/debug/sql/types.py | 6 +-- graphene/contrib/django/views.py | 45 ++-------------------- graphene/core/schema.py | 4 +- setup.py | 2 +- 5 files changed, 18 insertions(+), 55 deletions(-) diff --git a/graphene/contrib/django/debug/plugin.py b/graphene/contrib/django/debug/plugin.py index 4b6b1b5d..86f8da58 100644 --- a/graphene/contrib/django/debug/plugin.py +++ b/graphene/contrib/django/debug/plugin.py @@ -3,6 +3,7 @@ from contextlib import contextmanager from django.db import connections from ....core.types import Field +from ....core.schema import GraphQLSchema from ....plugins import Plugin from .sql.tracking import unwrap_cursor, wrap_cursor from .sql.types import DjangoDebugSQL @@ -45,11 +46,6 @@ def debug_objecttype(objecttype): class DjangoDebugPlugin(Plugin): - def transform_type(self, _type): - if _type == self.schema.query: - return - return _type - def enable_instrumentation(self, wrapped_root): # This is thread-safe because database connections are thread-local. for connection in connections.all(): @@ -62,10 +58,16 @@ class DjangoDebugPlugin(Plugin): def wrap_schema(self, schema_type): query = schema_type._query if query: - class_type = self.schema.objecttype(schema_type._query) + class_type = self.schema.objecttype(schema_type.get_query_type()) assert class_type, 'The query in schema is not constructed with graphene' _type = debug_objecttype(class_type) - schema_type._query = self.schema.T(_type) + self.schema.register(_type, force=True) + return GraphQLSchema( + self.schema, + self.schema.T(_type), + schema_type.get_mutation_type(), + schema_type.get_subscription_type() + ) return schema_type @contextmanager diff --git a/graphene/contrib/django/debug/sql/types.py b/graphene/contrib/django/debug/sql/types.py index 7ee1894f..5df5e9d8 100644 --- a/graphene/contrib/django/debug/sql/types.py +++ b/graphene/contrib/django/debug/sql/types.py @@ -1,4 +1,4 @@ -from .....core import Float, ObjectType, String +from .....core import Float, ObjectType, String, Boolean class DjangoDebugSQL(ObjectType): @@ -10,8 +10,8 @@ class DjangoDebugSQL(ObjectType): params = String() start_time = Float() stop_time = Float() - is_slow = String() - is_select = String() + is_slow = Boolean() + is_select = Boolean() trans_id = String() trans_status = String() diff --git a/graphene/contrib/django/views.py b/graphene/contrib/django/views.py index a32e20b4..9a4bd96e 100644 --- a/graphene/contrib/django/views.py +++ b/graphene/contrib/django/views.py @@ -1,10 +1,4 @@ -from django.http import HttpResponseNotAllowed -from django.http.response import HttpResponseBadRequest -from graphql.core import Source, parse, validate -from graphql.core.execution import ExecutionResult -from graphql.core.utils.get_operation_ast import get_operation_ast - -from graphql_django_view import GraphQLView as BaseGraphQLView, HttpError +from graphql_django_view import GraphQLView as BaseGraphQLView class GraphQLView(BaseGraphQLView): @@ -18,38 +12,5 @@ class GraphQLView(BaseGraphQLView): **kwargs ) - def execute_graphql_request(self, request): - query, variables, operation_name = self.get_graphql_params(request, self.parse_body(request)) - - if not query: - raise HttpError(HttpResponseBadRequest('Must provide query string.')) - - source = Source(query, name='GraphQL request') - - try: - document_ast = parse(source) - except Exception as e: - return ExecutionResult(errors=[e], invalid=True) - - validation_errors = validate(self.schema, document_ast) - if validation_errors: - return ExecutionResult(invalid=True, errors=validation_errors) - - if request.method.lower() == 'get': - operation_ast = get_operation_ast(document_ast, operation_name) - if operation_ast and operation_ast.operation != 'query': - raise HttpError(HttpResponseNotAllowed( - ['POST'], 'Can only perform a {} operation from a POST request.'.format(operation_ast.operation) - )) - - try: - return self.graphene_schema.execute( - document_ast, - self.get_root_value(request), - variables, - operation_name=operation_name, - validate_ast=False, - request_context=request - ) - except Exception as e: - return ExecutionResult(errors=[e], invalid=True) + def execute(self, *args, **kwargs): + return self.graphene_schema.execute(*args, **kwargs) diff --git a/graphene/core/schema.py b/graphene/core/schema.py index f8f26dc1..c8695317 100644 --- a/graphene/core/schema.py +++ b/graphene/core/schema.py @@ -84,9 +84,9 @@ class Schema(object): mutation=self.T(self.mutation), subscription=self.T(self.subscription)) - def register(self, object_type): + def register(self, object_type, force=False): type_name = object_type._meta.type_name - registered_object_type = self._types_names.get(type_name, None) + registered_object_type = not force and self._types_names.get(type_name, None) if registered_object_type: assert registered_object_type == object_type, 'Type {} already registered with other object type'.format( type_name) diff --git a/setup.py b/setup.py index 2c36fcec..7ef809ed 100644 --- a/setup.py +++ b/setup.py @@ -67,7 +67,7 @@ setup( 'django': [ 'Django>=1.6.0,<1.9', 'singledispatch>=3.4.0.3', - 'graphql-django-view>=1.0.0', + 'graphql-django-view>=1.1.0', ], },