Wrong return values for _data_for_key in system.py
When attempting to start some Guardian nodes after upgrade to Debian 10, Python 3, get the following error
2020-05-06_21:56:49.639195Z Starting Advanced LIGO Guardian service: FAST_SHUTTER...
2020-05-06_21:56:50.035708Z Traceback (most recent call last):
2020-05-06_21:56:50.035708Z File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main
2020-05-06_21:56:50.036789Z "__main__", mod_spec)
2020-05-06_21:56:50.036789Z File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
2020-05-06_21:56:50.036789Z exec(code, run_globals)
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/__main__.py", line 291, in <module>
2020-05-06_21:56:50.036789Z main()
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/__main__.py", line 152, in main
2020-05-06_21:56:50.036789Z system.load()
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/system.py", line 460, in load
2020-05-06_21:56:50.036789Z self.add_state(key, obj)
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/system.py", line 330, in add_state
2020-05-06_21:56:50.036789Z if index in self.indices and name != self.index(index):
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/system.py", line 766, in index
2020-05-06_21:56:50.036789Z return self._data_for_key(key)[0]
2020-05-06_21:56:50.036789Z File "/usr/lib/python3/dist-packages/guardian/system.py", line 732, in _data_for_key
2020-05-06_21:56:50.037791Z return state, data
2020-05-06_21:56:50.037791Z UnboundLocalError: local variable 'data' referenced before assignment
2020-05-06_21:56:50.076765Z guardian@FAST_SHUTTER.service: Control process exited, code=exited, status=1/FAILURE
2020-05-06_21:56:50.076901Z guardian@FAST_SHUTTER.service: Failed with result 'exit-code'.
2020-05-06_21:56:50.077156Z Failed to start Advanced LIGO Guardian service: FAST_SHUTTER.
In looking at the relevant section on system.py, it appears the return should be 'state, index' not 'state, data'
def _data_for_key(self, key):
"""Return state (key, data) tuple for state.
If a string is provided, key is the state index. If a number
is provided, key is the state name.
KeyError or TypeError exceptions are raised where appropriate.
"""
if isinstance(key, str):
try:
data = self._graph.nodes[key]
return data['index'], data
except KeyError:
raise KeyError("%s is not a state name" % key)
elif isinstance(key, int):
for state, index in self._graph.nodes(data='index'):
if index == key:
return state, data
raise KeyError("%s is not a state index" % key)
else:
raise TypeError("item must be state name string or index integer.")