|
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