WriteTopic¶
-
class
lsst.ts.salobj.topics.
WriteTopic
(*, salinfo, name, sal_prefix, min_seq_num=1, max_seq_num=2147483647, initial_seq_num=None)¶ Bases:
lsst.ts.salobj.topics.BaseTopic
Base class for topics that are output.
This includes controller events, controller telemetry, remote commands and
cmdack
writers.Parameters: - salinfo :
SalInfo
SAL component information
- name :
str
Topic name, without a “command_” or “logevent_” prefix.
- sal_prefix :
str
SAL topic prefix: one of “command_”, “logevent_” or “”
- min_seq_num :
int
orNone
Minimum value for the
private_seqNum
field. IfNone
thenprivate_seqNum
is not set; this is needed for the cmdack writer, which sets the field itself.- max_seq_num :
int
Maximum value for
private_seqNum
, inclusive. Ignored ifmin_seq_num
isNone
.- initial_seq_num :
int
, optional Initial sequence number; if
None
use min_seq_num.
Attributes: Attributes Summary
DataType
The type (class) for a message of this topic. data
Internally cached message. has_data
Has data
ever been set?metadata
Get topic metadata as a TopicMetadata
, if available, elseNone
.Methods Summary
close
()Shut down and release resources. put
([data, priority])Output this topic. set
(**kwargs)Set one or more fields of message data cache self.data
.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_start
to start a command.CommandEvent.set_put
to write an event.CommandTelemetry.set_put
to write a telemetry message.
However, it is also possible to use
DataType
to create a message, then write, it as separate operations. For example, assuming we have aRemote
for 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)
-
data
¶ Internally cached message.
Raises: - TypeError
If
data
is not an instance ofDataType
Notes
Do not assume the data will be constant. You can make a copy using
copy.copy(data)
.
Methods Documentation
-
close
()¶ Shut down and release resources.
Intended to be called by SalInfo.close(), since that tracks all topics.
-
put
(data=None, priority=0)¶ Output this topic.
Parameters: Raises: - TypeError
If
data
is not None and not an instance ofDataType
.
-
set
(**kwargs)¶ Set one or more fields of message data cache
self.data
.Parameters: - **kwargs :
dict
[str
,any
] Dict of field name: new value for that field:
- Any key whose value is
None
is checked for existence, but the value of the field is not changed. - If the field being set is an array then the value must either be an array of the same length or a scalar (which replaces every element of the array).
- Any key whose value is
Returns: Raises: - AttributeError
If the topic does not have the specified field.
- ValueError
If the field cannot be set to the specified value.
Notes
If one or more fields cannot be set, the message data may be partially updated.
- **kwargs :
- salinfo :