Skip to content

Better exception when the load of the yml config fails

Valentin Valls requested to merge better-execption-when-loading-yml into master

Closes #3572 (closed)

This provides a better feedback when an exception occurs the load of multipled chained objects.

Notice the commented print that i have removed, because it was not possible to debug without.

Previously

Kind of unhelpful.

Initialization of tomo_config FAILED
[0] Traceback (most recent call last):
  File "/home/blissadm/local/bliss.git/bliss/common/session.py", line 947, in _load_config
    self.config.get(item_name)
  File "/home/blissadm/local/bliss.git/bliss/common/session.py", line 139, in get
    obj = self.__wrapped__.get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 503, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomoconfig.py", line 97, in __init__
    self._init_config(config)
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomoconfig.py", line 280, in _init_config
    self.detectors = config.get("detectors", None)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 294, in get
    return self[key]
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 376, in __getitem__
    return value.dereference()
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 146, in dereference
    obj = self._parent.config.get(self.object_name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 503, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomo_detectors.py", line 82, in __init__
    for detector in config["detectors"]:
  File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/_collections_abc.py", line 883, in __iter__
    v = self[i]
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 188, in __getitem__
    return value.dereference()
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 146, in dereference
    obj = self._parent.config.get(self.object_name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 503, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomo_detector.py", line 68, in __init__
    assert isinstance(detector, Lima)
AssertionError

Now

You can read that tomodet_bcu_simulator1 have failed and why. And you know it was during the loading of tomo_detectors which was during the loading of tomo_config.

It's kind of useful.

Traceback (most recent call last):
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 504, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomo_detector.py", line 68, in __init__
    assert isinstance(detector, Lima)
AssertionError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 504, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomo_detectors.py", line 82, in __init__
    for detector in config["detectors"]:
  File "/users/blissadm/conda/miniconda/envs/bliss_dev/lib/python3.7/_collections_abc.py", line 883, in __iter__
    v = self[i]
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 188, in __getitem__
    return value.dereference()
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 146, in dereference
    obj = self._parent.config.get(self.object_name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 506, in create_objects_from_config_node
    raise RuntimeError("Error while loading object '%s'" % item_name) from e
RuntimeError: Error while loading object 'tomodet_bcu_simulator1'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 504, in create_objects_from_config_node
    bctrl = klass(item_name, cfg_node.clone())
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomoconfig.py", line 97, in __init__
    self._init_config(config)
  File "/home/blissadm/local/ebs-tomo.git/tomo/tomoconfig.py", line 280, in _init_config
    self.detectors = config.get("detectors", None)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 294, in get
    return self[key]
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 376, in __getitem__
    return value.dereference()
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 146, in dereference
    obj = self._parent.config.get(self.object_name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 506, in create_objects_from_config_node
    raise RuntimeError("Error while loading object '%s'" % item_name) from e
RuntimeError: Error while loading object 'tomo_detectors'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/blissadm/local/bliss.git/bliss/common/session.py", line 947, in _load_config
    self.config.get(item_name)
  File "/home/blissadm/local/bliss.git/bliss/common/session.py", line 139, in get
    obj = self.__wrapped__.get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 963, in get
    return self._get(name)
  File "/home/blissadm/local/bliss.git/bliss/config/static.py", line 1013, in _get
    for name2itemsAndname2itemcache in iteration:
  File "/home/blissadm/local/bliss.git/bliss/config/plugins/generic.py", line 506, in create_objects_from_config_node
    raise RuntimeError("Error while loading object '%s'" % item_name) from e
RuntimeError: Error while loading object 'tomo_config'

Merge request reports