|  | 
| 3 | 3 | from promise import Promise | 
| 4 | 4 | 
 | 
| 5 | 5 | from .sql.tracking import unwrap_cursor, wrap_cursor | 
|  | 6 | +from .exception.formating import wrap_exception | 
| 6 | 7 | from .types import DjangoDebug | 
| 7 | 8 | 
 | 
| 8 | 9 | 
 | 
| 9 | 10 | class DjangoDebugContext(object): | 
| 10 | 11 |     def __init__(self): | 
| 11 | 12 |         self.debug_promise = None | 
| 12 | 13 |         self.promises = [] | 
|  | 14 | +        self.object = DjangoDebug(sql=[], exceptions=[]) | 
| 13 | 15 |         self.enable_instrumentation() | 
| 14 |  | -        self.object = DjangoDebug(sql=[]) | 
| 15 | 16 | 
 | 
| 16 | 17 |     def get_debug_promise(self): | 
| 17 | 18 |         if not self.debug_promise: | 
| 18 | 19 |             self.debug_promise = Promise.all(self.promises) | 
| 19 | 20 |             self.promises = [] | 
| 20 | 21 |         return self.debug_promise.then(self.on_resolve_all_promises).get() | 
| 21 | 22 | 
 | 
|  | 23 | +    def on_resolve_error(self, value): | 
|  | 24 | +        if hasattr(self, "object"): | 
|  | 25 | +            self.object.exceptions.append(wrap_exception(value)) | 
|  | 26 | +        return Promise.reject(value) | 
|  | 27 | + | 
| 22 | 28 |     def on_resolve_all_promises(self, values): | 
| 23 | 29 |         if self.promises: | 
| 24 | 30 |             self.debug_promise = None | 
| @@ -57,6 +63,9 @@ def resolve(self, next, root, info, **args): | 
| 57 | 63 |                 ) | 
| 58 | 64 |         if info.schema.get_type("DjangoDebug") == info.return_type: | 
| 59 | 65 |             return context.django_debug.get_debug_promise() | 
| 60 |  | -        promise = next(root, info, **args) | 
|  | 66 | +        try: | 
|  | 67 | +            promise = next(root, info, **args) | 
|  | 68 | +        except Exception as e: | 
|  | 69 | +            return context.django_debug.on_resolve_error(e) | 
| 61 | 70 |         context.django_debug.add_promise(promise) | 
| 62 | 71 |         return promise | 
0 commit comments