Controller¶
- class lsst.ts.salobj.Controller(name: str, index: Optional[int] = None, *, do_callbacks: bool = False, write_only: bool = False, allow_missing_callbacks: bool = False)¶
Bases:
object
A class that receives commands for a SAL component and sends telemetry and events from that component.
This class provides much of the behavior for
BaseCsc
, basically everything except the standard summary states and associated transition commands.- Parameters:
- name
str
Name of SAL component.
- index
int
orNone
, optional SAL component index, or 0 or None if the component is not indexed. A value is required if the component is indexed.
- do_callbacks
bool
, optional Set
do_{command}
methods as callbacks for commands? If true then there must be exactly onedo_{command}
method for each command. Cannot be true ifwrite_only
is true.- write_only
bool
, optional If true then the Controller will have no command topics and will not read any SAL data. Cannot be true if
do_callbacks
is true.- allow_missing_callbacks
bool
, optional Allow missing
do_{command}
callback methods? Missing method will be replaced with one that raises salobj.ExpectedError. This is intended for mock controllers, which may only support a subset of commands. Cannot be true unlessdo_callbacks
is true.
- name
- Raises:
- ValueError
If
do_callbacks
andwrite_only
are both true, or ifallow_missing_callbacks
is true anddo_callbacks
is not.- TypeError
If
do_callbacks
true and one or moredo_{command}
methods is present that has no corresponding command, or ifdo_callbacks
true,allow_missing_callbacks
false, and one or moredo_{command}
methods is missing.
Notes
Writing a Controller
(To write a CSC see Writing a CSC, instead)
To write a controller that is not a CSC (one that does not provide the standard summary states and associated state transition commands):
Inherit from this class.
Provide all Required Logging Attributes; these are automatically provided to CSCs, but not other controllers.
Implement
close_tasks
.
Here is an example that makes a Test controller and displays the topic-related attributes, but has no code to do anything useful with those topics (see
TestCsc
for that):include salobj # the index is arbitrary, but a remote must use the same index # to talk to this controller test_controller = salobj.Controller("Test", index=5) print(dir(test_controller))
You should see the following topic-related attributes:
Commands, each an instance of
topics.ControllerCommand
:cmd_standby
cmd_start
… and so on for all other standard CSC commands
cmd_setArrays
cmd_setScalars
Events, each an instance of
topics.ControllerEvent
:evt_authList
evt_configurationApplied
… and so on for all other standard CSC events
evt_arrays
evt_scalars
Telemetry, each an instance of
topics.ControllerTelemetry
(note that there are no standard CSC telemetry topics):tel_arrays
tel_scalars
Required Logging Attributes
Each
Controller
must support the following topics, as specified in ts_xml inSALGenerics.xml
:setLogLevel command
logLevel event
logMessage event
- Attributes:
- log
logging.Logger
A logger.
- salinfo
SalInfo
SAL info.
- isopen
bool
Is this instance open?
True
untilclose
is called. The instance is fully closed when done_task is done.- start_called
bool
Has the start method been called? The instance is fully started when start_task is done.
- done_task
asyncio.Task
A task which is finished when
close
orbasic_close
is done.- start_task
asyncio.Task
A task which is finished when
start
is done, or to an exception ifstart
fails.- cmd_<command_name>
topics.ControllerCommand
Controller command topic. There is one for each command supported by the SAL component.
- evt_<event_name>
topics.ControllerEvent
Controller event topic. There is one for each event topic supported by the SAL component.
- tel_<telemetry_name>
topics.ControllerTelemetry
Controller telemetry topic. There is one for each telemetry topic supported by the SAL component.
- log
Attributes Summary
Methods Summary
close
([exception, cancel_start])Shut down, clean up resources and set done_task done.
Shut down pending tasks.
do_setAuthList
(data)Update the authorization list.
do_setLogLevel
(data)Set logging level.
Output the logLevel event.
start
()Finish construction.
Additional work after
start
before fully started.Attributes Documentation
- domain¶
Methods Documentation
- async close(exception: Optional[Exception] = None, cancel_start: bool = True) None ¶
Shut down, clean up resources and set done_task done.
May be called multiple times. The first call closes the Controller; subsequent calls wait until the Controller is closed.
Subclasses should override
close_tasks
instead ofclose
, unless you have a good reason to do otherwise.- Parameters:
- exception
Exception
, optional The exception that caused stopping, if any, in which case the
self.done_task
exception is set to this value. SpecifyNone
for a normal exit, in which case theself.done_task
result is set toNone
.- cancel_start
bool
, optional Cancel the start task? Leave this true unless calling this from the start task.
- exception
Notes
Removes the SAL log handler, calls
close_tasks
to stop all background tasks, pauses briefly to allow final SAL messages to be sent, then closes the dds domain.
- async close_tasks() None ¶
Shut down pending tasks. Called by
close
.Perform all cleanup other than disabling logging to SAL and closing the dds domain.
- async do_setAuthList(data: BaseMsgType) None ¶
Update the authorization list.
- Parameters:
- data
cmd_setAuthList.DataType
Authorization lists.
- data
Notes
Add items if the data string starts with “+”, ignoring duplicates (both with respect to the existing items and within the data string). Remove items if the data string starts with “-”, ignoring missing items (items specified for removal that do not exist). Ignore whitespace after each comma and after the +/- prefix.
- async do_setLogLevel(data: BaseMsgType) None ¶
Set logging level.
- Parameters:
- data
cmd_setLogLevel.DataType
Logging level.
- data