@@ -34,7 +34,7 @@ def __init__(self, client: typing.Optional[GreengrassCoreIPCClient] = None,
34
34
import awsiot .greengrasscoreipc
35
35
client = awsiot .greengrasscoreipc .connect ()
36
36
self .client = client
37
- if executor == True :
37
+ if executor is True :
38
38
executor = concurrent .futures .ThreadPoolExecutor ()
39
39
self .executor = executor
40
40
@@ -67,20 +67,38 @@ def callback(*args, **kwargs):
67
67
future1 .add_done_callback (callback )
68
68
return future2
69
69
70
+ @staticmethod
71
+ def __handle_error ():
72
+ import sys
73
+ import traceback
74
+ traceback .print_exc (file = sys .stderr )
75
+
76
+ def __wrap_error (self , func ):
77
+ def wrapper (* args , ** kwargs ):
78
+ try :
79
+ return func (* args , ** kwargs )
80
+ except Exception as e :
81
+ self .__handle_error ()
82
+ raise e
83
+ return wrapper
84
+
70
85
def __create_stream_handler (real_self , operation , on_stream_event , on_stream_error , on_stream_closed ):
71
86
stream_handler_type = type (operation + 'Handler' , (getattr (client , operation + "StreamHandler" ),), {})
72
87
if on_stream_event is not None :
88
+ on_stream_event = real_self .__wrap_error (on_stream_event )
73
89
def handler (self , event ):
74
90
if real_self .executor is not None :
75
91
real_self .executor .submit (on_stream_event , event )
76
92
else :
77
93
on_stream_event (event )
78
94
setattr (stream_handler_type , "on_stream_event" , handler )
79
95
if on_stream_error is not None :
96
+ on_stream_error = real_self .__wrap_error (on_stream_error )
80
97
def handler (self , error ):
81
98
return on_stream_error (error )
82
99
setattr (stream_handler_type , "on_stream_error" , handler )
83
100
if on_stream_closed is not None :
101
+ on_stream_closed = real_self .__wrap_error (on_stream_closed )
84
102
def handler (self ):
85
103
if real_self .executor is not None :
86
104
real_self .executor .submit (on_stream_closed )
0 commit comments