FilteredTopicWrapper#

class lsst.ts.watcher.FilteredTopicWrapper(model, topic, filter_field)#

Bases: object

Topic wrapper that caches data by the value of a filter field.

To make a topic wrapper call Model.make_filtered_topic_wrapper, instead of constructing a TopicWrapper directly. That allows using a cached instance, if available (and avoids a RuntimeError in the constructor, if an instance exists).

Parameters:
  • model (Model) – Watcher model. Used to add a TopicCallback to the topic, if one does not already exist.

  • topic (lsst.ts.salobj.ReadTopic) – Topic to read.

  • filter_field (str) – Field to filter on. The field must be a scalar. It should also have a smallish number of expected values, in order to avoid caching too much data.

Raises:
  • ValueError – If filter_field does not exist in the data, or if it exists but is an array.

  • RuntimeError – If this FilteredTopicWrapper already exists in the model. To avoid this, construct field wrappers by calling Model.make_filtered_field_wrapper.

topic#

topic constructor argument.

Type:

lsst.ts.salobj.ReadTopic

filter_field#

filter_field constructor argument.

Type:

str

descr#

A short description of the wrapper.

Type:

str

data_cache#

Dict of value of filter_field: most recent data seen for that value.

Type:

str

default_data#

Default-constructed data. Use for validation of field wrappers.

call_event#

An event that __call__ sets when it finishes. This is intended for use by unit tests.

Type:

asyncio.Event

Notes

A rule will typically use filtered _field_ wrappers (subclasses of BaseFilteredFieldWrapper) rather than FilteredTopicWrapper.

Filtered field wrappers are high-level objects that store data for a particular value of filter_field (e.g. a particular subsystem). FilteredTopicWrapper is lower level object that stores data for all values of filter_field (e.g. all subsystems).

Each BaseFilteredFieldWrapper contains a FilteredTopicWrapper.

Methods Summary

__call__(data, topic_callback)

Update the cached data.

add_field_wrapper(field_wrapper)

Add a filtered field wrapper to the internal cache.

get_data(filter_value)

Get the most recently seen data for the given filter_value, or None if no data seen.

Methods Documentation

__call__(data, topic_callback)#

Update the cached data.

Set data_cache[filter_value] to the new data, and call update_value for each filtered field wrapper with the matching filter value.

Parameters:
  • data (lsst.ts.salobj.BaseMsgType) – Topic data.

  • topic_callback (TopicCallback) – The topic callback that triggered this call.

add_field_wrapper(field_wrapper)#

Add a filtered field wrapper to the internal cache.

Parameters:

field_wrapper (BaseFilteredFieldWrapper) – The filtered field wrapper to add.

get_data(filter_value)#

Get the most recently seen data for the given filter_value, or None if no data seen.

Parameters:

filter_value (scalar) – Value of filter_field for which to return data.