Useful Utilities

The hutch_python.utils and hutch_python.namespace modules have functions that may be broadly useful.

hutch_python.utils.safe_load can be used as a shortcut for wrapping code that may or may not succeed to prevent a bad submodule from interrupting the hutch-python load sequence. This means that if the Attenuator class is bugging out, we’ll be warned that there is a problem and skip it, but you’ll still be able to manipulate the Slits objects.

For example, this will complete successfully but show a warning:

In [1]: from hutch_python.utils import safe_load

In [2]: with safe_load('divide by zero'):
   ...:     1/0
   ...: 

The reason for the failure with the full traceback will be saved to the log file and will be visible in the terminal if you are in debug mode.

hutch_python.namespace.class_namespace can be used to create your own object groupings by type. This will find all objects loaded by hutch python plus all objects in your global environment, and accumulate them if they match a given type. You can explititly provide the type object or you can opt to provide a string.

from hutch_python.namespace import class_namespace

one = 1
two = 2
three = 3

integers = class_namespace(int)
In [3]: integers.three
Out[3]: 3

In [4]: list(integers)  # Iterate through namespace in alphabetical order
Out[4]: [1, 3, 2]