Skip to content

Commit 59209b6

Browse files
committed
Added fault-tolerance to get_all_settings.
1 parent 61804ad commit 59209b6

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

microscope/devices.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,11 +305,23 @@ def get_setting(self, name):
305305

306306
def get_all_settings(self):
307307
"""Return ordered settings as a list of dicts."""
308-
try:
309-
return {k: v.get() for k, v in self.settings.items()}
310-
except Exception as err:
311-
_logger.error("in get_all_settings:", exc_info=err)
312-
raise
308+
# Fetching some settings may fail depending on device state.
309+
# Fetch those that are available, and report failures in __errors__.
310+
# TODO - cockpit may need changes to prevent exceptions due to
311+
# presence of unexpected settings entry, __errors__.
312+
def catch(f, errors):
313+
try:
314+
return f()
315+
except Exception as err:
316+
_logger.error("getting %s: %s" % (f.__self__.name, err))
317+
errors.append(f.__self__.name)
318+
return None
319+
320+
errors = []
321+
settings = {k: catch(v.get, errors) for k, v in self.settings.items()}
322+
if errors:
323+
settings.update({"__errors__": errors})
324+
return settings
313325

314326
def set_setting(self, name, value):
315327
"""Set a setting."""

0 commit comments

Comments
 (0)