@@ -168,12 +168,16 @@ def __exit__(
168
168
self .set_status ("completed" )
169
169
else :
170
170
if self ._active :
171
- self .log_event (f"{ exc_type .__name__ } : { value } " )
171
+ # If the dispatcher has already been aborted then this will
172
+ # fail so just continue without the event
173
+ with contextlib .suppress (RuntimeError ):
174
+ self .log_event (f"{ exc_type .__name__ } : { value } " )
172
175
if exc_type .__name__ in ("KeyboardInterrupt" ,) and self ._active :
173
176
self .set_status ("terminated" )
174
177
else :
175
178
if traceback and self ._active :
176
- self .log_event (f"Traceback: { traceback } " )
179
+ with contextlib .suppress (RuntimeError ):
180
+ self .log_event (f"Traceback: { traceback } " )
177
181
self .set_status ("failed" )
178
182
else :
179
183
if self ._shutdown_event is not None :
@@ -984,7 +988,12 @@ def update_tags(self, tags: list[str]) -> bool:
984
988
985
989
if not self ._simvue :
986
990
return False
987
- current_tags : list [str ] = self ._simvue .list_tags () or []
991
+
992
+ try :
993
+ current_tags : list [str ] = self ._simvue .list_tags () or []
994
+ except RuntimeError as e :
995
+ self ._error (f"{ e .args [0 ]} " )
996
+ return False
988
997
989
998
try :
990
999
self .set_tags (list (set (current_tags + tags )))
@@ -1012,6 +1021,9 @@ def log_event(self, message: str, timestamp: typing.Optional[str] = None) -> boo
1012
1021
bool
1013
1022
whether event log was successful
1014
1023
"""
1024
+ if self ._aborted :
1025
+ return False
1026
+
1015
1027
if self ._mode == "disabled" :
1016
1028
self ._error ("Cannot log events in 'disabled' state" )
1017
1029
return True
@@ -1169,7 +1181,13 @@ def save_object(
1169
1181
}
1170
1182
1171
1183
# Register file
1172
- return self ._simvue is not None and self ._simvue .save_file (data ) is not None
1184
+ try :
1185
+ file_save = self ._simvue .save_file (data )
1186
+ except RuntimeError as e :
1187
+ self ._error (f"{ e .args [0 ]} " )
1188
+ return False
1189
+
1190
+ return self ._simvue is not None and file_save is not None
1173
1191
1174
1192
@skip_if_failed ("_aborted" , "_suppress_errors" , False )
1175
1193
@check_run_initialised
@@ -1256,7 +1274,11 @@ def save_file(
1256
1274
return True
1257
1275
1258
1276
# Register file
1259
- return self ._simvue .save_file (data ) is not None
1277
+ try :
1278
+ return self ._simvue .save_file (data ) is not None
1279
+ except RuntimeError as e :
1280
+ self ._error (f"{ e .args [0 ]} " )
1281
+ return False
1260
1282
1261
1283
@skip_if_failed ("_aborted" , "_suppress_errors" , False )
1262
1284
@check_run_initialised
@@ -1386,7 +1408,13 @@ def set_status(
1386
1408
data : dict [str , str ] = {"name" : self ._name , "status" : status }
1387
1409
self ._status = status
1388
1410
1389
- if self ._simvue and self ._simvue .update (data ):
1411
+ try :
1412
+ updated = self ._simvue .update (data )
1413
+ except RuntimeError as e :
1414
+ self ._error (f"{ e .args [0 ]} " )
1415
+ return False
1416
+
1417
+ if self ._simvue and updated :
1390
1418
return True
1391
1419
1392
1420
return False
@@ -1496,8 +1524,12 @@ def set_folder_details(
1496
1524
if description :
1497
1525
data ["description" ] = description
1498
1526
1499
- if self ._simvue .set_folder_details (data ):
1500
- return True
1527
+ try :
1528
+ if self ._simvue .set_folder_details (data ):
1529
+ return True
1530
+ except RuntimeError as e :
1531
+ self ._error (f"{ e .args [0 ]} " )
1532
+ return False
1501
1533
1502
1534
return False
1503
1535
@@ -1531,10 +1563,14 @@ def add_alerts(
1531
1563
names = names or []
1532
1564
1533
1565
if names and not ids :
1534
- if alerts := self ._simvue .list_alerts ():
1535
- for alert in alerts :
1536
- if alert ["name" ] in names :
1537
- ids .append (alert ["id" ])
1566
+ try :
1567
+ if alerts := self ._simvue .list_alerts ():
1568
+ for alert in alerts :
1569
+ if alert ["name" ] in names :
1570
+ ids .append (alert ["id" ])
1571
+ except RuntimeError as e :
1572
+ self ._error (f"{ e .args [0 ]} " )
1573
+ return False
1538
1574
else :
1539
1575
self ._error ("No existing alerts" )
1540
1576
return False
@@ -1544,8 +1580,12 @@ def add_alerts(
1544
1580
1545
1581
data : dict [str , typing .Any ] = {"id" : self ._id , "alerts" : ids }
1546
1582
1547
- if self ._simvue .update (data ):
1548
- return True
1583
+ try :
1584
+ if self ._simvue .update (data ):
1585
+ return True
1586
+ except RuntimeError as e :
1587
+ self ._error (f"{ e .args [0 ]} " )
1588
+ return False
1549
1589
1550
1590
return False
1551
1591
@@ -1689,7 +1729,12 @@ def create_alert(
1689
1729
1690
1730
# Check if the alert already exists
1691
1731
alert_id : typing .Optional [str ] = None
1692
- alerts = self ._simvue .list_alerts ()
1732
+ try :
1733
+ alerts = self ._simvue .list_alerts ()
1734
+ except RuntimeError as e :
1735
+ self ._error (f"{ e .args [0 ]} " )
1736
+ return alerts
1737
+
1693
1738
if alerts :
1694
1739
for existing_alert in alerts :
1695
1740
if existing_alert ["name" ] == alert ["name" ]:
@@ -1699,7 +1744,11 @@ def create_alert(
1699
1744
break
1700
1745
1701
1746
if not alert_id :
1702
- response = self ._simvue .add_alert (alert )
1747
+ try :
1748
+ response = self ._simvue .add_alert (alert )
1749
+ except RuntimeError as e :
1750
+ self ._error (f"{ e .args [0 ]} " )
1751
+ return False
1703
1752
if response :
1704
1753
if "id" in response :
1705
1754
alert_id = response ["id" ]
@@ -1710,7 +1759,12 @@ def create_alert(
1710
1759
if alert_id :
1711
1760
# TODO: What if we keep existing alerts/add a new one later?
1712
1761
data = {"id" : self ._id , "alerts" : [alert_id ], "abort" : trigger_abort }
1713
- self ._simvue .update (data )
1762
+
1763
+ try :
1764
+ self ._simvue .update (data )
1765
+ except RuntimeError as e :
1766
+ self ._error (f"{ e .args [0 ]} " )
1767
+ return False
1714
1768
1715
1769
return alert_id
1716
1770
@@ -1740,6 +1794,11 @@ def log_alert(
1740
1794
if not self ._simvue :
1741
1795
self ._error ("Cannot log alert, run not initialised" )
1742
1796
return False
1743
- self ._simvue .set_alert_state (identifier , state )
1797
+
1798
+ try :
1799
+ self ._simvue .set_alert_state (identifier , state )
1800
+ except RuntimeError as e :
1801
+ self ._error (f"{ e .args [0 ]} " )
1802
+ return False
1744
1803
1745
1804
return True
0 commit comments