From dd5b26e6ed8c9188299ff965d18d8c902bc768d2 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Sun, 6 Dec 2015 16:50:34 -0800 Subject: [PATCH] Improved debug plugin structure --- graphene/contrib/django/debug/plugin.py | 17 ++++++++++++++--- graphene/core/schema.py | 4 ++-- graphene/core/types/base.py | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/graphene/contrib/django/debug/plugin.py b/graphene/contrib/django/debug/plugin.py index 5c21863f..4b6b1b5d 100644 --- a/graphene/contrib/django/debug/plugin.py +++ b/graphene/contrib/django/debug/plugin.py @@ -1,9 +1,9 @@ from contextlib import contextmanager + from django.db import connections -from ....plugins import Plugin -from ....core.schema import Schema from ....core.types import Field +from ....plugins import Plugin from .sql.tracking import unwrap_cursor, wrap_cursor from .sql.types import DjangoDebugSQL from .types import DjangoDebug @@ -44,9 +44,10 @@ def debug_objecttype(objecttype): class DjangoDebugPlugin(Plugin): + def transform_type(self, _type): if _type == self.schema.query: - return debug_objecttype(_type) + return return _type def enable_instrumentation(self, wrapped_root): @@ -58,9 +59,19 @@ class DjangoDebugPlugin(Plugin): for connection in connections.all(): unwrap_cursor(connection) + def wrap_schema(self, schema_type): + query = schema_type._query + if query: + class_type = self.schema.objecttype(schema_type._query) + assert class_type, 'The query in schema is not constructed with graphene' + _type = debug_objecttype(class_type) + schema_type._query = self.schema.T(_type) + return schema_type + @contextmanager def context_execution(self, executor): executor['root'] = WrappedRoot(root=executor['root']) + executor['schema'] = self.wrap_schema(executor['schema']) self.enable_instrumentation(executor['root']) yield executor self.disable_instrumentation() diff --git a/graphene/core/schema.py b/graphene/core/schema.py index fc8835c1..d1d33f00 100644 --- a/graphene/core/schema.py +++ b/graphene/core/schema.py @@ -131,6 +131,8 @@ class Schema(object): executor = kwargs executor['root'] = root executor['args'] = args + executor['schema'] = self.schema + executor['request'] = request contexts = [] for plugin in self.plugins: if not hasattr(plugin, 'context_execution'): @@ -139,8 +141,6 @@ class Schema(object): executor = context.__enter__() contexts.append((context, executor)) result = self.executor.execute( - self.schema, - request, **executor ) for context, value in contexts[::-1]: diff --git a/graphene/core/types/base.py b/graphene/core/types/base.py index c9d26cf5..ec8c7b3b 100644 --- a/graphene/core/types/base.py +++ b/graphene/core/types/base.py @@ -129,6 +129,7 @@ class MountedType(FieldType, ArgumentType): class NamedType(InstanceType): + def __init__(self, name=None, default_name=None, *args, **kwargs): self.name = name self.default_name = None