Utility Functions¶
Utility functions for typhos
- 
class 
typhos.utils.DeviceConnectionMonitorThread(device, include_lazy=False, **kwargs)[source]¶ Monitor connection status in a background thread
- Parameters
 device (ophyd.Device) – The device to grab signals from
include_lazy (bool, optional) – Include lazy signals as well
- 
connection_update¶ Connection update signal with signature:
(signal, connected, metadata_dict)
- Type
 QtCore.Signal
- 
class 
typhos.utils.GrabKindItem(attr, component, signal)¶ - 
property 
attr¶ Alias for field number 0
- 
property 
component¶ Alias for field number 1
- 
property 
signal¶ Alias for field number 2
- 
property 
 
- 
class 
typhos.utils.ObjectConnectionMonitorThread(objects=None, **kwargs)[source]¶ Monitor connection status in a background thread
- 
connection_update¶ Connection update signal with signature:
(signal, connected, metadata_dict)
- Type
 QtCore.Signal
- 
 
- 
class 
typhos.utils.ThreadPoolWorker(func, *args, **kwargs)[source]¶ Worker thread helper
- Parameters
 func (callable) – The function to call during
run()*args – Arguments for the function call
**kwargs – Keyword rarguments for the function call
- 
class 
typhos.utils.TyphosBase(*args, **kwargs)[source]¶ Base widget for all Typhos widgets that interface with devices
- 
class 
typhos.utils.TyphosLoading(timeout_message, *, parent=None, **kwargs)[source]¶ A QLabel with an animation for loading status.
- 
LOADING_TIMEOUT_MS¶ The timeout value in milliseconds for when to stop the animation and replace it with a default timeout message.
- Type
 
- 
 
- 
typhos.utils.channel_from_signal(signal, read=True)[source]¶ Create a PyDM address from arbitrary signal type
- 
typhos.utils.clean_attr(attr)[source]¶ Create a nicer, human readable alias from a Python attribute name
- 
typhos.utils.clean_name(device, strip_parent=True)[source]¶ Create a human readable name for a device
- Parameters
 device (ophyd.Device) –
strip_parent (bool or Device) – Remove the parent name of the device from name. If strip_parent is True, the name of the direct parent of the device is stripped. If a device is provided the name of that device is used. This allows specification for removal at any point of the device schema
- 
typhos.utils.code_from_device(device)[source]¶ Generate code required to load
devicein another process
- 
typhos.utils.code_from_device_repr(device)[source]¶ Return code to create a device from its
reprinformation.- Parameters
 device (ophyd.Device) –
- 
typhos.utils.connection_status_monitor(*signals, callback)[source]¶ [Context manager] Monitor connection status from a number of signals
Filters out any other metadata updates, only calling once connected/disconnected
- Parameters
 *signals (ophyd.OphydObj) – Signals to monitor
callback (callable) – Callback to run, with same signature as that of
ophyd.OphydObj.subscribe().objandconnectedare guaranteed kwargs.
- 
typhos.utils.dump_grid_layout(layout, rows=None, cols=None, *, cell_width=60)[source]¶ Dump the layout of a
QtWidgets.QGridLayouttofile.
- 
typhos.utils.find_file_in_paths(filename, *, paths=None)[source]¶ Search for filename
filenamein the list of pathspaths- Parameters
 filename (str or pathlib.Path) – The filename
paths (list or iterable, optional) – List of paths to search. Defaults to DISPLAY_PATHS.
- Yields
 All filenames that match in the given paths
- 
typhos.utils.find_parent_with_class(widget, cls=<class 'PyQt5.QtWidgets.QWidget'>)[source]¶ Finds the first parent of a widget that is an instance of
klass- Parameters
 widget (QWidget) – The widget from which to start the search
cls (type, optional) – The class which the parent must be an instance of
- 
typhos.utils.find_templates_for_class(cls, view_type, paths, *, extensions=None, include_mro=True)[source]¶ Given a class cls and a view type (such as ‘detailed’), search paths for potential templates to show.
- Parameters
 cls (class) – Search for templates with this class name
view_type ({'detailed', 'engineering', 'embedded'}) – The view type
paths (iterable) – Iterable of paths to be expanded, de-duplicated, and searched
extensions (str or list, optional) – The template filename extension (default is
'.ui'or'.py')include_mro (bool, optional) – Include superclasses - those in the MRO - of
clsas well
- Yields
 path (pathlib.Path) – A matching path, ordered from most-to-least specific.
- 
typhos.utils.get_all_signals_from_device(device, include_lazy=False, filter_by=None)[source]¶ Get all signals in a given device
- Parameters
 device (ophyd.Device) – ophyd Device to monitor
include_lazy (bool, optional) – Include lazy signals as well
filter_by (callable, optional) – Filter signals, with signature
callable(ophyd.Device.ComponentWalk)
- 
typhos.utils.get_component(obj)[source]¶ Get the component that made the given object.
- Parameters
 obj (ophyd.OphydItem) – The ophyd item for which to get the component.
- Returns
 component – The component, if available.
- Return type
 ophyd.Component
- 
typhos.utils.get_device_from_fake_class(cls)[source]¶ Return the non-fake class, given a fake class
That is:
fake_cls = ophyd.sim.make_fake_device(cls) get_device_from_fake_class(fake_cls) # -> cls
- Parameters
 cls (type) – The fake class
- 
typhos.utils.get_variety_metadata(cpt)[source]¶ Get “variety” metadata from a component or signal.
- Parameters
 cpt (ophyd.Component or ophyd.OphydItem) – The component / ophyd item to get the metadata for.
- Returns
 metadata – The metadata, if set. Otherwise an empty dictionary. This metadata is guaranteed to be valid according to the known schemas.
- Return type
 
- 
typhos.utils.is_fake_device_class(cls)[source]¶ Is
clsa fake device fromophyd.sim.make_fake_device()?
- 
typhos.utils.is_signal_ro(signal)[source]¶ Return whether the signal is read-only
In the future this may be easier to do through improvements to introspection in the ophyd library. Until that day we need to check classes
- 
typhos.utils.is_standard_template(template)[source]¶ Is the template a core one provided with typhos?
- Parameters
 template (str or pathlib.Path) –
- 
typhos.utils.link_signal_to_widget(signal, widget)[source]¶ Registers the signal with PyDM, and sets the widget channel.
- Parameters
 signal (ophyd.OphydObj) – The signal to use.
widget (QtWidgets.QWidget) – The widget with which to connect the signal.
- 
typhos.utils.linked_attribute(property_attr, widget_attr, hide_unavailable=False)[source]¶ Decorator which connects a device signal with a widget.
Retrieves the signal from the device, registers it with PyDM, and sets the widget channel.
- Parameters
 property_attr (str) – This is one level of indirection, allowing for the component attribute to be configurable by way of designable properties. In short, this looks like:
getattr(self.device, getattr(self, property_attr))The component attribute name may include multiple levels (e.g.,'cpt1.cpt2.low_limit').widget_attr (str) – The attribute name of the widget, referenced from
self. The component attribute name may include multiple levels (e.g.,'ui.low_limit').hide_unavailable (bool) – Whether or not to hide widgets for which the device signal is not available
- 
typhos.utils.load_suite(path, cfg=None)[source]¶ ” Load a file saved via Typhos
- Parameters
 - Returns
 suite
- Return type
 
- 
typhos.utils.no_device_lazy_load()[source]¶ Context manager which disables the ophyd.device.Device lazy_wait_for_connection behavior and later restore its value.
- 
typhos.utils.patch_connect_slots()[source]¶ Patches QtCore.QMetaObject.connectSlotsByName to catch SystemErrors.
- 
typhos.utils.pyqt_class_from_enum(enum)[source]¶ Create an inheritable base class from a Python Enum, which can also be used for Q_ENUMS.
- 
typhos.utils.reload_widget_stylesheet(widget, cascade=False)[source]¶ Reload the stylesheet of the provided widget
- 
typhos.utils.remove_duplicate_items(list_)[source]¶ Return a de-duplicated list/tuple of items in list_, retaining order
- 
typhos.utils.save_suite(suite, file_or_buffer)[source]¶ Create a file capable of relaunching the TyphosSuite
- Parameters
 suite (TyphosSuite) –
file_or_buffer (str or file-like) – Either a path to the file or a handle that supports
write
- 
typhos.utils.subscription_context(*objects, callback, event_type=None, run=True)[source]¶ [Context manager] Subscribe to a specific event from all objects
Unsubscribes all signals before exiting
- Parameters
 
- 
typhos.utils.subscription_context_device(device, callback, event_type=None, run=True, *, include_lazy=False, filter_by=None)[source]¶ [Context manager] Subscribe to
event_typefrom signals indeviceUnsubscribes all signals before exiting
- Parameters
 device (ophyd.Device) – ophyd Device to monitor
callback (callable) – Callback to run, with same signature as that of
ophyd.OphydObj.subscribe()event_type (str, optional) – The event type to subscribe to
run (bool, optional) – Run the previously cached subscription immediately
include_lazy (bool, optional) – Include lazy signals as well
filter_by (callable, optional) – Filter signals, with signature
callable(ophyd.Device.ComponentWalk)
Cache Utilities¶
Path caching¶
- 
class 
typhos.cache._GlobalDisplayPathCache[source]¶ A cache for all configured display paths.
- All paths from utils.DISPLAY_PATHS will be included:
 Environment variable
PYDM_DISPLAYS_PATH.Typhos package built-in paths.
- 
add_path(path)[source]¶ Add a path to be searched during
glob.- Parameters
 path (pathlib.Path or str) – The path to add.
Ophyd Object Description Caching¶
- 
class 
typhos.cache._GlobalDescribeCache[source]¶ Cache of ophyd object descriptions.
obj.describe()is called in a thread from the global QThreadPool, and new results are marked by the Signalnew_description.To access a description, call
get(). If available, it will be returned immediately. Otherwise, wait for thenew_descriptionSignal.- 
connect_thread¶ The thread which monitors connection status.
- Type
 ObjectConnectionMonitorThread
- 
 
Ophyd Object to Widget Type Cache¶
- 
class 
typhos.cache._GlobalWidgetTypeCache[source]¶ Cache of ophyd object Typhos widget types.
obj.describe()is called using_GlobalDescribeCacheand are therefore threaded and run in the background. New results are marked by the Signalwidgets_determined.To access a set of widget types, call
get(). If available, it will be returned immediately. Otherwise, wait for thewidgets_determinedSignal.- 
describe_cache¶ The describe cache, used for determining widget types.
- Type
 
- 
cache¶ The cache holding widget type information. Keyed on
obj, the values areSignalWidgetInfotuples.- Type
 
- 
get(obj)[source]¶ To access widget types, call this method. If available, it will be returned immediately. Otherwise, upon connection and successful
describe()call, thewidgets_determinedSignal will be emitted.- Parameters
 obj (
ophyd.OphydObj) – The object to get the widget types.- Returns
 desc – If available in the cache, the information will be returned.
- Return type
 SignalWidgetInfoor None
-