RemoteTelemetry¶
-
class
lsst.ts.salobj.topics.RemoteTelemetry(salinfo, name, max_history=None, queue_len=100)¶ Bases:
lsst.ts.salobj.topics.ReadTopicRead a specific telemetry topic.
Parameters: - salinfo :
SalInfo SAL component information
- name :
str Telemetry topic name
- max_history :
int, optional Deprecated because historical telemetry data is no longer available. Must be 0 (or None, but please don’t do that) if specified.
- queue_len :
int, optional Number of elements that can be queued for
get_oldest.
Attributes Summary
DataTypeThe type (class) for a message of this topic. allow_multiple_callbacksCan callbacks can run simultaneously? callbackCallback function, or None if there is not one. has_callbackReturn True if there is a callback function. has_dataHas any data been seen for this topic? max_historymetadataGet topic metadata as a TopicMetadata, if available, elseNone.Methods Summary
aget([timeout])Get the current message, if any, else wait for the next message. close()Shut down and release resources. flush()Flush the queue of unread data. get([flush])Get the most recently seen message, or Noneif no data ever seen.get_oldest()Pop and return the oldest message from the queue, or Noneif the queue is empty.next(*, flush[, timeout])Wait for a message, possibly returning the oldest queued message. Attributes Documentation
-
DataType¶ The type (class) for a message of this topic.
When you read or write a message for this topic you are reading or writing an instance of
DataType.Notes
The preferred way to write a message for a topic is:
RemoteCommand.set_startto start a command.CommandEvent.set_putto write an event.CommandTelemetry.set_putto write a telemetry message.
However, it is also possible to use
DataTypeto create a message, then write, it as separate operations. For example, assuming we have aRemotefor SAL component “Test”:# The preferred way to issue a command: await = remote.cmd_wait.set_put(duration=2, timeout=5) # But an alternative is to first create the command, # then send it, as two separate operations: message = remote.cmd_wait.DataType(duration=2) await remote.cmd_wait.start(message, timeout=5) # Or, even more verbosely: message = remote.cmd_wait.DataType() message.duration = 2 await remote.cmd_wait.start(message, timeout=5)
-
allow_multiple_callbacks¶ Can callbacks can run simultaneously?
Notes
Ignored for synchronous callbacks because those block while running. In particular, if the callback is synchronous but launches one or more background jobs then the number of those jobs cannot be limited by this class.
-
callback¶ Callback function, or None if there is not one.
The callback function is called when a new message is received; it receives one argument: the message (an object of type
topics.BaseTopic.DataType).Raises: - TypeError
When setting a new callback if the callback is not None and is not callable.
Notes
The callback function can be synchronous or asynchronous (e.g. defined with
async def).Setting a callback flushes the queue, and it will remain empty as long as there is a callback.
get_oldestandnextare prohibited if there is a callback function. Technically they could both work, butget_oldestwould always returnNoneandnextwould miss messages if they arrived while waiting for something else. It seemed safer to just raise an exception.
-
has_callback¶ Return True if there is a callback function.
-
has_data¶ Has any data been seen for this topic?
Raises: - RuntimeError
If the
salinfohas not started reading.
-
max_history¶
Methods Documentation
-
aget(timeout=None)¶ Get the current message, if any, else wait for the next message.
Parameters: - timeout :
float, optional Time limit, in seconds. If None then no time limit.
Returns: - data :
DataType The current or next message.
Raises: - RuntimeError
If a callback function is present, or if the
salinfohas not started reading.
Notes
Do not modify the returned data. To make a copy that you can safely modify, use
copy.copy(data).- timeout :
-
close()¶ Shut down and release resources.
Intended to be called by SalInfo.close(), since that tracks all topics.
-
flush()¶ Flush the queue of unread data.
Raises: - RuntimeError
If a callback function is present.
-
get(flush=True)¶ Get the most recently seen message, or
Noneif no data ever seen.Parameters: Returns: Raises: - RuntimeError
If the
salinfohas not started reading.
-
get_oldest()¶ Pop and return the oldest message from the queue, or
Noneif the queue is empty.Returns: Raises: - RuntimeError
If a callback function is present, or if the
salinfohas not started reading.
Notes
Use with caution when mixing with
next, since that also consumes data from the queue.
-
next(*, flush, timeout=None)¶ Wait for a message, possibly returning the oldest queued message.
Parameters: Returns: - data :
DataType The message data.
Raises: - RuntimeError
If a callback function is present, or if the
salinfohas not started reading.
Notes
Do not modify the returned data. To make a copy that you can safely modify, use
copy.copy(data).- data :
- salinfo :