ControllerCommand¶
-
class
lsst.ts.salobj.topics.ControllerCommand(salinfo, name, max_history=0, queue_len=100)¶ Bases:
lsst.ts.salobj.topics.ReadTopicRead a specified command topic.
Parameters: Notes
Each command must be acknowledged by writing an appropriate
ackcmdmessage. If you use a callback function to process the command then this happens automatically. Otherwise you must call theackmethod to acknowledge the command yourself, though an initial acknowledgement withack=SalRetCode.CMD_ACKis always automatically sent when the command is read.After the initial acknowledgement with
ack=SalRetCode.CMD_ACK, automatic ackowledgement for callback functions works as follows:- If the callback function is a coroutine then acknowledge with
ack=SalRetCode.CMD_INPROGRESSjust before running the callback. - If the callback function returns
Nonethen send a final acknowledgement withack=SalRetCode.CMD_COMPLETE. - If the callback function returns an acknowledgement
(instance of
SalInfo.AckType) instead ofNone, then send that as the final acknowledgement. - If the callback function raises
asyncio.TimeoutErrorthen send a final acknowledgement withack=SalRetCode.CMD_TIMEOUT. - If the callback function raises
asyncio.CancelledErrorthen send a final acknowledgement withack=SalRetCode.CMD_ABORTED. - If the callback function raises
ExpectedErrorthen send a final acknowledgement withack=SalRetCode.CMD_FAILEDandresult=f"Failed: {exception}". - If the callback function raises any other
Exceptionthen do the same asExpectedErrorand also log a traceback.
Attributes Summary
DataTypeThe class of data for 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
ack(data, ackcmd)Acknowledge a command by writing a new state. ackInProgress(data[, result])Ackowledge this command as “in progress”. aget([timeout])Get the current value, if any, else wait for the next value. close()Shut down and release resources. flush()Flush the queue of unread data. get([flush])Get the most recently seen value, or Noneif no data ever seen.get_oldest()Pop and return the oldest value from the queue, or Noneif the queue is empty.next(*[, timeout])Wait for data, returning old data if found. Attributes Documentation
-
DataType¶ The class of data for this topic.
-
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 new data is received; it receives one argument: the data.
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 data if it 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?
-
max_history¶
Methods Documentation
-
ack(data, ackcmd)¶ Acknowledge a command by writing a new state.
Parameters: - data :
DataType Command data.
- ackcmd :
salobj.AckCmdType Command acknowledgement.
- data :
-
ackInProgress(data, result='')¶ Ackowledge this command as “in progress”.
-
aget(timeout=None)¶ Get the current value, if any, else wait for the next value.
Parameters: - timeout :
float(optional) Time limit, in seconds. If None then no time limit.
Returns: - data :
DataType The current or next value.
Raises: - RuntimeError
If a callback function is present.
Notes
Do not modify the returned data. To make a copy that you can modify use
copy.copy(value).- 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 value, or
Noneif no data ever seen.Parameters: Returns:
-
get_oldest()¶ Pop and return the oldest value from the queue, or
Noneif the queue is empty.Returns: Raises: - RuntimeError
If a callback function is present.
Notes
Use with caution when mixing with
next, since that also consumes data from the queue.
-
next(*, timeout=None)¶ Wait for data, returning old data if found.
Unlike
RemoteEvent.nextandRemoteTelemetry.next, the flush argument is not allowed; the only way to flush old commands is to callflush.Parameters: - timeout :
float(optional) Time limit, in seconds. If None then no time limit.
Returns: - data :
DataType Command data.
Raises: - RuntimeError
If a callback function is present.
Notes
Do not modify the data or assume that it will be static. If you need a private copy, then copy it yourself.
- timeout :
- If the callback function is a coroutine then acknowledge with