Version History#
v1.3.7 (2026-01-09)#
New Features#
Adapt the ruff format. (OSW-1287)
Other Changes and Additions#
v1.3.6 (2025-10-08)#
New Features#
v1.3.5#
Improve the
setup.pyto support the version of Python 3.11 and 3.12.
v1.3.4#
Fix the failed test.
v1.3.3#
Add the extra_commands argument to
BaseCsc.__init__().Remove the ts-idl.
v1.3.2#
Add the
BaseCsc.standby_controller().
v1.3.1#
Fix the race condition in
BaseCsc.basic_telemetry_callback()with theBaseCsc.begin_disable().
The reason we can do so is because the controller has a simplified state machine now. It only has the Standby, Enabled, and Fault states.
v1.3.0#
Remove the code related to the deprecated state machine in controller.
Migrate the functions from ts_mtrotator.
v1.2.2#
Update the version of ts-conda-build to 0.4 in the conda recipe.
v1.2.1#
Minimize the dependency of rotator xml in SimpleCsc class.
v1.2.0#
Add configureEmergencyAcceleration & configureEmergencyJerk to
SimpleCsc.
v1.1.3#
Support the mypy.
v1.1.2#
Import the enums from ts_xml instead of ts_idl.
Fix the failed tests because the rotator has no OFFLINE state anymore.
Update the
.ts_pre_commit_config.yaml.
v1.1.1#
Unpin python version in coda recipe.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 1.1
MTRotator IDL file built from ts_xml
v1.1.0#
Support ts_mtrotator using the new simplified low-level controller states:
Use ts_idl enums for MTHexapod instead of MTRotator.
Add some TODO notes for future changes, should MTHexapod also adopt the simpler states.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 1.1
MTRotator IDL file built from ts_xml
v1.0.0#
BaseMockController: inherit from lsst.ts.tcpip.OneClientReadLoopServer. This requires ts_tcpip 1.1.test_command_telemetry_server: use lsst.ts.tcpip.Client instead of asyncio.open_connection (or one test).
Use ts_pre_commit_config.
Jenkinsfile: use the new shared library.Remove scons support.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 1.1
MTRotator IDL file built from ts_xml
v0.31.1#
pre-commit: update black to 23.1.0, isort to 5.12.0, mypy to 1.0.0, and pre-commit-hooks to v4.4.0.
Jenkinsfile: modernize.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 1
MTRotator IDL file built from ts_xml
v0.31.0#
CommandTelemetryClient: inherit fromlsst.ts.tcpip.Client, which requires ts_tcpip 1.0.BaseMockController: update to use ts_tcpip 1.0 features inlsst.ts.tcpip.OneClientServer.Stop exporting symbols from ts_tcpip, except
LOCAL_HOST, which is still used by ts_mtrotator.Make tests/test_command_telemetry_server.py more robust by avoiding asyncTearDown.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 1
MTRotator IDL file built from ts_xml
v0.30.2#
CommandTelemetryClient: fix one logging statement.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 0.1
MTRotator IDL file built from ts_xml
v0.30.1#
Build with pyproject.toml
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 0.1
MTRotator IDL file built from ts_xml
v0.30.0#
Only send the CLEAR_ERROR command once, instead of twice with a pause between. This requires ts_hexapod_controller v1.3.2 and ts_rotator_controller v1.4.3.
setup.cfg: specify asyncio_mode = auto to eliminate a warning.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 0.1
MTRotator IDL file built from ts_xml
v0.29.0#
Update for ts_salobj v7, which is required. This also requires ts_xml 11.
Requires:
ts_utils 1
ts_salobj 7
ts_idl 3.6
ts_tcpip 0.1
MTRotator IDL file built from ts_xml
v0.28.1#
Fix enabling of the low-level controller (DM-32902): wait for one telemetry sample after first connecting.
BaseCsc: eliminate the unusedwait_summary_statemethod and add some long messages toenable_controller.
Requires:
ts_utils 1
ts_salobj 6.8
ts_idl 3.6
ts_tcpip 0.1
ts_xml 10.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.28.0#
Update for ts_hexapod_controller 1.3.0 and ts_rotator_controller 1.4.0:
Use a single socket for communication with the low-level controller. Eliminate the
CommandTelemetryServerclass, moving its non-server functionality intoBaseMockController.Use new standardized frame IDs for data from the low-level controller. Provide these values in a new
FrameIdenum class. Eliminate the FRAME_ID class constant in config and telemetry structs.Command: replace thesync_patternfield withcommander. The new field has a standard value for commands from the CSC, which is provided as aCommandclass constant.Header: update the type of theframe_idfield to match a change in the low-level controllers.
CommandTelemetryClient: expand theconnectedproperty to check that the reader is not None. The main driver was to make type checkers happier, but it also adds a modicum of safety.
Requires:
ts_utils 1
ts_salobj 6.8
ts_idl 3.6
ts_tcpip 0.1
ts_xml 10.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.27.0#
BaseCsc: remove theclearErrorcommand (which was not supported, but still present in the XML). This change requires ts_xml 10.2.
Requires:
ts_utils 1
ts_salobj 6.8
ts_idl 3.6
ts_tcpip 0.1
ts_xml 10.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.26.0#
Updated unit tests for compatibility with ts_salobj 6.8, which is now required.
CONFIG_SCHEMA: update id link to usemaininstead ofmaster.setup.cfg: prevent pytest from checking version.py
Requires:
ts_utils 1
ts_salobj 6.8
ts_idl 3.6
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.25.0#
CommandTelemetryClientandCommandTelemetryServer: support command acknowledgement:Change
CommandTelemetryClient.put_commandtoCommandTelemetryClient.run_command.Add
CommandStatusCodeenum,CommandStatusstruct, andCommandErrorexception.
BaseCsc: update for command acknowledgement.
Requires:
ts_utils 1
ts_salobj 6.3
ts_idl 3.6
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.24.0#
-
Go to FAULT state and report error code NO_CONFIG if the low-level controller does not report config shortly after connecting. This requires ts_idl 3.6.
Remove the deprecated
schema_pathconstructor argument. It and was not being used.
Requires:
ts_utils 1
ts_salobj 6.3
ts_idl 3.6
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.23.1#
BaseCsc: go to FAULT state if the CSC cannot connect to the low-level controller.Modernize unit tests to use bare assert.
Requires:
ts_utils 1
ts_salobj 6.3
ts_idl 2.2
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.23.0#
Swap client and server, so the client runs in the CSC and the server runs in the mock controller. This change requires new versions of the low-level controller code: ts_hexapod_controller and ts_rotator_controller (see ts_mthexapod and ts_mtrotator for details).
BaseCscchanges:Connect to the low-level controller as part of the
startcommand.Make the CSC summary state mostly independent of the low-level controller state (an excellent suggestion from Tiago). As part of the
enablecommand, the CSC commands the low-level controller to its own enabled state, including clearing errors, if necessary. See communication protocol for more information.Configuration should now include fields for TCP/IP host, port and connection_timeout. An alternative for the first two is to override the default host and port properties.
The
clearErrorcommand is no longer supported (and will be removed in a future ticket). Use the standard sequencestandby,start, andenableto recover from errors.The CSC is no longer alive in the OFFLINE state.
Update to use
lsst.ts.idl.enums.MTRotator.ErrorCode, which requires ts_idl 3.4.
CommandTelemetryServer: make thehostconstructor argument optional, with a default oftcpip.LOCALHOST_IPV4. Also prohibit constructing with host=None and port=0, to make sure we can determine the randomly chosen ports.Add optional
hostconstructor argument toBaseMockControllerandSimpleMockController.Add a
Jenkinsfile.setup.cfg: add [options] section.
Requires:
ts_utils 1
ts_salobj 6.3
ts_idl 2.2
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.22.0#
Make state transition commands more reliable and more efficient: allow more time for the low-level controller to implement the change, and stop waiting as soon as the change is reported.
Updated to use ts_utils, which is required.
-
Add
wait_summary_statemethod.assert_summary_statemethod: deprecate theisbeforeargument.
CommandTelemetryServer:Remove the
skipargument of thenext_telemetrymethod. It is much better to check each telemetry packet for the data you are awaiting.Remove diagnostic print statements.
test_command_telemetry_server.py: fix test cleanup, which was not running due to a typo.
Requires:
ts_utils 1
ts_salobj 6.3
ts_idl 2.2
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.21.0#
Deprecations:
You should obtain the following from ts_tcpip: OneClientServer, close_stream_writer, read_into, write_from, LOCAL_HOST. At some point these symbols will no longer be available from ts_hexrotcomm.
Use the new ts_tcpip package. Temporarily make the symbols that moved available in lsst.ts.hexrotcomm, for backwards compatibility.
Test black formatting with pytest instead of a custom unit test.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_tcpip 0.1
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.20.0#
Change message headers to use TAI unix time. Rename the fields from tv_sec, tv_nsec to tai_sec, tai_nsec and set them accordingly. Note that this requires a corresponding update to the low-level rotator and hexapod controllers (see DM-26451 and DM-30120)
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.19.0#
Update for changes to the low-level hexapod and rotator TCP/IP interfaces: remove the mjd and mjd_frac fields from config and telemetry headers.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.18.1#
BaseCsc: bug fix:run_commandsdid not acquire the newwrite_lock.BaseCsc: changeassert_enabledto check that the CSC can command the low-level controller (like the other, similar, assert methods).BaseCsc: added methodbasic_run_command.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.18.0#
BaseCsc: addwrite_lockattribute and aquire this lock while writing a command to the low-level controller. You should acquire this lock before cancelling any task that sends commands to the low-level controller, to prevent writing partial commands and leaving data in the TCP/IP stream buffer.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.17.1#
Format the code with black 20.8b1.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.17.0#
close_stream_writer: swallowConnectionResetError, since this means the writer is closing or closed.OneClientServer: bug fix:connect_callbackwas not reliably called byclose_client.SimpleCsc: update to write therotationMTRotator telemetry topic, instead of the deprecatedapplicationtelemetry topic.CommandTelemetryClient: always set a writer attribute toNonewhen closing it, to eliminate any danger of trying to close a writer twice.Use
unittest.IsolatedAsyncioTestCaseinstead of the abandoned asynctest package.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.16.0#
BaseCsc: addconfig_schemaconstructor argument. This requires ts_salobj 6.3.SimpleCsc: specify config schema using theconfig_schemaargument.Delete obsolete file
schema/MTRotator.yaml.
Requires:
ts_salobj 6.3
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.15.0#
Update for ts_xml 7.2 (which is required for the unit tests to pass): add
do_faultmethod toSimpleCsc.CommandTelemetryServer: improve handling of invalid headers:Flush the remaining data and try to continue, instead of disconnecting.
Print the header bytes when an unrecognized frame ID is read.
OneClientServer: bug fix: only set connected_task result if not already done.Modernize
doc/conf.pyfor documenteer 0.6.
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7.2
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.14.0#
Support different ports for different CSCs:
Eliminate COMMAND_PORT and TELEMETRY_PORT constants.
CommandTelemetryServer: replace use_random_port argument with port.CommandTelemetryClientandBaseMockController: make the command_port and telemetry_port arguments required.
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.13.0#
Add optional
set_simulation_modeconstructor argument toBaseCscandSimpleCsc. This is a backwards compatible change.
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.12.1#
Update Jenkinsfile.conda to use Jenkins Shared Library
Pinned the ts-idl and ts-salobj version in conda recipe
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.12.0#
Update the mock controller to make the time used in update_telemetry match the time in the header:
Update
CommandTelemetryClient.update_and_get_headerto return the current time in addition to the header, and update the call toupdate_telemetryto provide that time.Update
BaseMockController,update_telemetryandSimpleMockController.update_telemetryto receive time as an argument.
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.11.0#
Update for ts_xml 7 and ts_idl 2.2:
Rename SAL component and ts_idl enum module
RotatortoMTRotator.
Requires:
ts_salobj 6.1
ts_idl 2.2
ts_xml 7
MTRotator IDL file, e.g. built using
make_idl_file.py MTRotator(forSimpleCscand unit tests)
v0.10.0#
Update for ts_salobj 6.1.
Update the handling of initial_state in
BaseCsc:If initial_state != OFFLINE then report all transitional summary states and controller states at startup.
Require initial_state = OFFLINE unless simulating.
Add
BaseCscTestCasewith overridden versions of:BaseCscTestCase.make_csc: read all but the final controller state at startup,BaseCscTestCase.check_bin_script: setdefault_initial_state.
Requires:
ts_salobj 6.1
ts_idl 2
ts_xml 4.6 - 6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.9.0#
Add
close_stream_writerfunction that closes anasyncio.StreamWriterand waits for it to close.Update code to wait for stream writers to close.
Requires:
ts_salobj 5.11 - 6.0
ts_idl 1 (with salobj 5) or 2 (with salobj 6)
ts_xml 4.6 - 6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.8.0#
Backward-incompatible changes:
Remove
BaseCscTestCaseandCscCommanderclasses; use the versions in ts_salobj instead.Bug fix:
BaseCsc.get_config_pkgreturned “ts_config_ocs” instead of “ts_config_mttcs”.Add missing call to
begin_starttoBaseCsc.do_start.Make
BaseCsc.faultraiseNotImplementedError, since the low-level controller maintains the summary state and offers no command to transition to the FAULT state.
Requires:
ts_salobj 5.11 - 6
ts_idl 1 (with salobj 5) or 2 (with salobj 6)
ts_xml 4.6 - 6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.7.0#
Make
BaseCsca configurable CSC.
Requires:
ts_salobj 5.11 - 6
ts_idl 1 (with salobj 5) or 2 (with salobj 6)
ts_xml 4.6 - 6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.6.0#
Update for compatibility with ts_salobj 6.
Requires:
ts_salobj 5.11 - 6
ts_idl 1 (with salobj 5) or 2 (with salobj 6)
ts_xml 4.6 - 6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.5.2#
Add black to conda test dependencies
Requires:
ts_salobj 5.11
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.5.1#
Add
tests/test_black.pyto verify that files are formatted with black. This requires ts_salobj 5.11 or later.Update
BaseCscTestCase.check_bin_scriptto be compatible with ts_salobj 5.12.Fix f strings with no {}.
Update
.travis.ymlto removesudo: falseto github travis checks pass once again.
Requires:
ts_salobj 5.11
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.5.0#
Make
BaseCscforward compatible with ts_xml 5.2 and with explicitly listing which generic topics are used.
Requires:
ts_salobj 5
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.4.0#
The clearError command in the mock controller now transitions to STANDBY instead of OFFLINE/AVAILABLE. This matches a recent change to the rotator controller and a planned change to the hexapod controller.
Include conda package build configuration.
Added a Jenkinsfile to support continuous integration and to build conda packages.
Fixed a bug in
OneClientServer.close: it would fail if called twice.
Requires:
ts_salobj 5
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.3.0#
Major changes:
Allow the
connect_callbackargument ofOneClientServerto beNone. That actually worked before, but it was not documented and resulted in an exception being logged for each callback.Code formatted by
black, with a pre-commit hook to enforce this. See the README file for configuration instructions.
Requires:
ts_salobj 5
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.2.0#
Add BaseCsc.make_command and BaseCsc.run_multiple_commands.
Update for Rotator XML refinements.
Disambiguate the use of cmd (warning: not backwards compatible):
Rename Command.cmd to Command.code
Rename cmd argument to command for BaseCsc.run_command and CommandTelemetryServer.put_command
Requires:
ts_salobj 5
ts_idl 1
ts_xml 4.6
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.1.1#
Fix an error in the MockController’s CLEAR_ERROR command.
Requires:
ts_salobj 5
ts_idl 1
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)
v0.1.0#
Initial release.
Requires:
ts_salobj 5
ts_idl 1
Rotator IDL file, e.g. built using
make_idl_file.py Rotator(forSimpleCscand unit tests)