|
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