bluesky / hklpy

Diffractometer computation library with ophyd pseudopositioner support
https://blueskyproject.io/hklpy
BSD 3-Clause "New" or "Revised" License
2 stars 11 forks source link

list_orientation_runs() raises exception when primary is missing #254

Closed prjemian closed 9 months ago

prjemian commented 10 months ago

The hkl.util.list_orientation_runs(cat) function raises an exception when one of the runs does not have a primary stream:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
File ~/.conda/envs/bluesky_2023_3/lib/python3.11/site-packages/intake/catalog/base.py:350, in Catalog.__getattr__(self, item)
    349 try:
--> 350     return self[item]  # triggers reload_on_change
    351 except KeyError as e:

File ~/.conda/envs/bluesky_2023_3/lib/python3.11/site-packages/intake/catalog/base.py:423, in Catalog.__getitem__(self, key)
    422     return out()
--> 423 raise KeyError(key)

KeyError: 'primary'

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

AttributeError                            Traceback (most recent call last)
Cell In[24], line 1
----> 1 hkl.util.list_orientation_runs(cat)

File ~/.conda/envs/bluesky_2023_3/lib/python3.11/site-packages/hkl/util.py:264, in list_orientation_runs(catalog, limit, *args)
    262 display_columns = default_columns + list(args)
    263 for run in catalog.v2.values():
--> 264     info = run_orientation_info(run)
    265     if len(info):
    266         scan_id = run.metadata["start"]["scan_id"]

File ~/.conda/envs/bluesky_2023_3/lib/python3.11/site-packages/hkl/util.py:300, in run_orientation_info(run)
    285 """
    286 Return a dictionary with orientation information in this run.
    287 
   (...)
    297     A Bluesky run, from databroker v2, such as ``cat.v2[-1]``.
    298 """
    299 devices = {}
--> 300 run_conf = run.primary.config
    301 for device in sorted(run_conf):
    302     conf = run_conf[device].read()

File ~/.conda/envs/bluesky_2023_3/lib/python3.11/site-packages/intake/catalog/base.py:352, in Catalog.__getattr__(self, item)
    350         return self[item]  # triggers reload_on_change
    351     except KeyError as e:
--> 352         raise AttributeError(item) from e
    353 raise AttributeError(item)

AttributeError: primary
prjemian commented 9 months ago

Needs a catalog with such an example. The apstools.plans.documentation_run() could provide such an example? Or some test code with a temporary catalog.

prjemian commented 9 months ago

This has already been fixed via try..except clause: https://github.com/bluesky/hklpy/blob/dd2cf5a0d32e73f04d8ec5a223faff7e6f9593a2/hkl/util.py#L305-L317