Remove promise based middleware

This commit is contained in:
Josh Warwick 2023-02-13 16:19:38 +00:00 committed by Firas K
parent d18cab8aa4
commit 3b41aaf7bf

View File

@ -9,32 +9,32 @@ from .types import DjangoDebug
class DjangoDebugContext:
def __init__(self):
self.debug_promise = None
self.promises = []
self.debug_result = None
self.results = []
self.object = DjangoDebug(sql=[], exceptions=[])
self.enable_instrumentation()
def get_debug_promise(self):
if not self.debug_promise:
self.debug_promise = Promise.all(self.promises)
self.promises = []
return self.debug_promise.then(self.on_resolve_all_promises).get()
def get_debug_result(self):
if not self.debug_result:
self.debug_result = self.results
self.results = []
return self.on_resolve_all_results()
def on_resolve_error(self, value):
if hasattr(self, "object"):
self.object.exceptions.append(wrap_exception(value))
return Promise.reject(value)
return value
def on_resolve_all_promises(self, values):
if self.promises:
self.debug_promise = None
return self.get_debug_promise()
def on_resolve_all_results(self):
if self.results:
self.debug_result = None
return self.get_debug_result()
self.disable_instrumentation()
return self.object
def add_promise(self, promise):
if self.debug_promise:
self.promises.append(promise)
def add_result(self, result):
if self.debug_result:
self.results.append(result)
def enable_instrumentation(self):
# This is thread-safe because database connections are thread-local.
@ -62,10 +62,10 @@ class DjangoDebugMiddleware:
)
)
if info.schema.get_type("DjangoDebug") == info.return_type:
return context.django_debug.get_debug_promise()
return context.django_debug.get_debug_result()
try:
promise = next(root, info, **args)
result = next(root, info, **args)
except Exception as e:
return context.django_debug.on_resolve_error(e)
context.django_debug.add_promise(promise)
return promise
context.django_debug.add_result(result)
return result