Skip to content
This repository was archived by the owner on Jun 22, 2025. It is now read-only.

Commit 500cceb

Browse files
committed
pass exception information to javascript for possible handling
1 parent 7041a07 commit 500cceb

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

eel/__init__.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import print_function # Python 2 compatibility stuff
22
from builtins import range
3+
import traceback
34
from io import open
45

56
import gevent as gvt
@@ -254,9 +255,21 @@ def _repeated_send(ws, msg):
254255

255256
def _process_message(message, ws):
256257
if 'call' in message:
257-
return_val = _exposed_functions[message['name']](*message['args'])
258+
error_info = {}
259+
try:
260+
return_val = _exposed_functions[message['name']](*message['args'])
261+
status = 'ok'
262+
except Exception as e:
263+
err_traceback = traceback.format_exc()
264+
traceback.print_exc()
265+
return_val = None
266+
status = 'error'
267+
error_info['errorText'] = repr(e)
268+
error_info['errorTraceback'] = err_traceback
258269
_repeated_send(ws, _safe_json({ 'return': message['call'],
259-
'value': return_val }))
270+
'status': status,
271+
'value': return_val,
272+
'error': error_info,}))
260273
elif 'return' in message:
261274
call_id = message['return']
262275
if call_id in _call_return_callbacks:

eel/eel.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ eel = {
7676
_call_return: function(call) {
7777
return function(callback = null) {
7878
if(callback != null) {
79-
eel._call_return_callbacks[call.call] = callback;
79+
eel._call_return_callbacks[call.call] = {resolve: callback};
8080
} else {
81-
return new Promise(function(resolve) {
82-
eel._call_return_callbacks[call.call] = resolve;
81+
return new Promise(function(resolve, reject) {
82+
eel._call_return_callbacks[call.call] = {resolve: resolve, reject: reject};
8383
});
8484
}
8585
}
@@ -137,7 +137,12 @@ eel = {
137137
} else if(message.hasOwnProperty('return')) {
138138
// Python returning a value to us
139139
if(message['return'] in eel._call_return_callbacks) {
140-
eel._call_return_callbacks[message['return']](message.value);
140+
if(message['status']==='ok'){
141+
eel._call_return_callbacks[message['return']].resolve(message.value);
142+
}
143+
else if(message['status']==='error' && eel._call_return_callbacks[message['return']].reject) {
144+
eel._call_return_callbacks[message['return']].reject(message['error']);
145+
}
141146
}
142147
} else {
143148
throw 'Invalid message ' + message;
@@ -146,7 +151,7 @@ eel = {
146151
};
147152
});
148153
}
149-
}
154+
};
150155

151156
eel._init();
152157

0 commit comments

Comments
 (0)