Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
Removed
Deprecated
Added
WOM-1187: Added
futuresubpackage that reimplements all the device interfaces with the ADR-124 changes to simplify the operational and observation states. Deprecated features are also removed and some classes have been split-up to make them more compositional. Refer to the 1.7.0 migration guide for more details.
Changed
WOM-1189:
futureinterfaces: Devices will not automatically go toDevState.ALARMstate when an attribute has alarm quality factor. ThehealthStateattribute can rather be used to report information about alarms where appropriate.WOM-1187:
LRCMixinsupports the first LRC protocol by default. The class attributeMIN_SUPPORTED_LRC_PROTOCOL_VERSIONmust be overridden by subclasses to 2 in order to explicitly exclude the deprecated LRC attributes from a device’s interface.WOM-1187: Removed
storedandinitial_valueparameters from theLastEmittedValuesignal data descriptor asstoredmust always beTrueand setting an initial value does not make sense for a read-only signal.
Fixed
1.6.1 - 2026-04-29
Fixed
SKB-1318: Race condition in
PollingComponentManager.start_communicating()that could result in a device being stuck inDISABLEDif theadminModeis toggled betweenOFFLINEandONLINEquickly.
1.6.0 - 2026-04-23
Added
WOM-1092: Added a
CallbackSchedulerclass for robust Tango event callback handling.WOM-1095: Added
connect_lrc_interface()anddisconnect_lrc_interface()to allow pre-connecting to a Tango device’s LRC interface.WOM-1225: Added
bus_test_context()andMockSignalObserverutilities to help with unit testingSharingObservers.
Changed
WOM-1183: Signal values are stored on the
shared_businstead of theSignalobjects themselves.WOM-1093:
invoke_lrc()now uses aCallbackScheduler. If no scheduler is provided a global scheduler is started to invoke the long running commands.WOM-1205:
TaskExecutor.start()now raises anExecutorNotShutdownErrorif the executor was not previously shutdown.
Fixed
WOM-1213: Fixed
SubarrayInterfaceto allow commands while inDevState.ALARM.WOM-1093: Fixed
LRCSubscriptionsto avoid accidental reference cycles.WOM-1227: Fixed
BaseInferfaceto not add optional commands that have been completely overridden.WOM-1205: Fixed
TaskExecutor.abortto useEnsureOmnithread.WOM-1205: Fixed
LRCMixinto now use the device logger to report exceptions passed to theupdate_command_info.
1.5.0 - 2026-04-07
Deprecated
WOM-1090: Deprecated scalar
obsModeattribute provided byObsInterfaceand addedstandard_obs_modemethod to override the scalar attribute and its signal with a list version.WOM-1091: Deprecated directly writing to the
_health_statesignal. Usereport_healthinstead.WOM-1118: Deprecated
initial_valuefromattribute_from_signal.__init__. This does nothing and was accepted in error.WOM-1176: Deprecated assigning
NoValueto aSignal. Thedelkeyword can be used instead on aSignalinstantiated withstored=Trueto delete the last value stored on the bus. Also, in order to force a linked attribute’s quality toATTR_INVALID, assignNoneinstead.
Added
WOM-1114: Added
Poller.kill_polling_thread()and call it fromPollingComponentManager.cleanup(). This ensures the polling thread is reclaimed in a timely manner whenInit()is called.WOM-1091: Added
healthInfoattribute toBaseInterfaceWOM-1091: Added
BaseInterface.report_health()method for updatinghealthStateandhealthInfoattributes atomically.WOM-1224: Allow disabling the
ObsInterface.obsModeattribute by assigningobsMode = None
Changed
WOM-1218: Improved failure-guidelines document
Fixed
WOM-1100: Do not raise an exception when signal bus thread is shutdown when it isn’t running
WOM-1101: Ensure the
lrcQueueattribute is created with a minimum dimension of 1, even if a custom task executor is used that does not have a queue, i.e. if itsmax_queued_tasksproperty is 0.WOM-1114: Fix race condition in polling thread initialisation that can miss that it was started.
WOM-1105: Fix overriding is-allowed methods
WOM-1116: Allow LRCs called with invalid JSON args to finish with a rejected result and appear in the
lrcFinishedattribute.Validation decorators, such as
@validate_json_args, must always be applied first (innermost) to allow LRCs to catch validation errors and reject the task.
WOM-1118: Fixed check for “value triples” to not get confused with 3-element tuples of
AttrQualityWOM-1118: Fixed
AttrSignaltype annotations to allowNonefor a timestampWOM-1173: Allow the subarray commands
ReleaseResources/ReleaseAllResourcesfromObsState.EMPTYandEndfromObsState.IDLE.
1.4.2 - 2026-02-13
Changed
WOM-828: Changed
TaskExecutorProtocolto acceptAnyas the task type.WOM-1069: Retry acquiring the Tango monitor on the signal bus when pushing events
WOM-1075: Allow emitting
NoValuefor a signalWOM-1079: The signal bus now applies back pressure (by blocking) if the emission queue is full
Fixed
WOM-1033: Do not emit bogus JSON schema warnings after you have updated a Subarray to not use command objects anymore
WOM-1068: Moved the
_update_stateand_update_admin_modemethods toBaseInterfaceto pass them as callbacks to the models. This allows devices to override these callbacks if needed, as was possible before ska-tango-base 1.4.0.WOM-1068: Add timeout to emitting values on the signal bus, to apply back pressure.
WOM-1085: Pending operation count will now longer get out of sync if the operation throws an exception
1.4.1 - 2026-01-20
Changed
WOM-933: The signal bus thread now has a name.
WOM-935:
attribute_from_signalnow caches values with the Tango polling buffer when using pytango 10.1.0 or newer.WOM-942: The
BaseInterfaceonly provides theReset,Standby,OffandOncommands when their respective execute methods are implemented in a subclass, except for when using pytango 10.0.3, which has a bug that prevents the implementation from working correctly.WOM-1058: Suppress “state machine” logs by default, these can be re-enabled by setting the
STB_STATE_MACHINE_VERBOSEenvironment variable toON.
Fixed
WOM-935: Fixed type hints for
attribute_from_signal.do_read/attribute_from_signal.do_write.attribute_from_signal.do_readnow consistently returns a (value, time stamp, quality) tuple.WOM-939: Fixed
TaskExecutor.taskto allow decorating functions that except extra arguments.WOM-974: Fixed the how-to/invoke-an-lrc example
WOM-1057: Removed backwards incompatible check on DevState values in
SKABaseDevice._update_stateWOM-1058: Ensure we do not hang if SignalBusMixin device raises an exception during
__init__REL-2543: Correctly import all exposed modules in top package
1.4.0 - 2025-12-18
Deprecated
WOM-725, WOM-1028: Deprecated using SKA command objects to implement Tango commands. Use the
@tango.server.commandand@ska_tango_base.long_running_commanddecorators directly instead to define new commands. The various base classes in ska-tango-base now provideexecute_<cmd>()functions which can be overridden by subclasses to change the behaviour of a command.WOM-768: Deprecated calling Tango functions (e.g.
push_change_event) from a non-omnithread. Previously, when calling a Tango function from a non-omnithread,SKABaseDevicewould schedule the Tango function to actually be called by theExecutePendingOperationsfunction. This is now deprecated and a warning will be generated if a Tango function is called from a non-omnithread. All threads wishing to call a Tango function should use thetango.EnsureOmniThreadcontext manager, once at the start of the thread.WOM-936: Deprecated duplicated modules and re-exports. Some
ska_tango_baseimport statements that are present for backwards compatibility will emit a deprecation warning pointing you to the new path to import the object from. In some cases, the warning will point you to using a protocol type for type hinting rather than the concrete type.WOM-968: Deprecated the
CommandTrackerobject in favor of aCommandTrackerProtocolfor type hinting. Now the long running command implementation uses a new internal_CommandTrackerclass that models theCommandTrackerProtocol. TheCommandTrackerobject is still available in case there were any uses of the class directly, however, it is currently planned to be removed in the next major release. If you have a use for theCommandTrackerother than a type hint, we would encourage you to share it with the Wombat Team so that we can continue to support your use case.
See the migration guide for details of how to resolve these deprecations.
Changed
The
SKABaseDevicenow makes use of thealways_executed_hookanddelete_devicemethods. Subclasses ofSKABaseDevicemust always ensure they call thesuper()version of these methods if they override them otherwiseSKABaseDevicewill fail to clean up after itself. This has always been a requirement for these functions, however, it may have worked in previous releases as theSKABaseDevicedid not use them.WOM-804, WOM-936: Reorganised module layout, while maintaining old names for compatibility:
ska_tango_base.long_running_commands_apiis now canonicallyska_tango_base.long_running_commands.apiska_tango_base.controller_deviceis now canonicallyska_tango_base.controller.controller_device
WOM-782: Exposed the
unsubscribe_lrc_eventsmethod of theLRCSubscriptionsclass.WOM-824:
LrcSubscriptionsandLrcCallbackhave been renamed toLRCSubscriptionsandLRCCallbackTyperespectively. The old names are still available as aliases fromska_tango_base.long_running_commands_api.WOM-756:
SKABaseDevicenow exposes a publiccommand_trackerproperty with typeCommandTrackerProtocol. The previous_command_trackerattribute is still available, but its direct use is discouraged.
Added
WOM-669, WOM-831: Added minimal base
SKADeviceclass which sets-up logging.WOM-676, WOM-708, WOM-740, WOM-827, WOM-934: Introduced the
_SignalBusclass modelling theBusProtocolto act as an internal event system for an SKA Tango device.WOM-697: Added
attribute_from_signal, atango.server.attributethat automatically generates read and write callbacks linked to a signal.WOM-670, WOM-730, WOM-756, WOM-856, WOM-898, WOM-940, WOM-968, WOM-977: Introduced
LRCMixinto provide an implementation of long running commands that can be used with any device.WOM-671, WOM-672, WOM-677, WOM-679, WOM-758, WOM-803, WOM-826, WOM-855, WOM-858, WOM-946, WOM-964, WOM-966: Introduced minimal Tango interface classes
BaseInterface,ControllerInterface,ObsInterfaceandSubarrayInterfacefor different types of SKA Tango devices. These interface classes are now used by theSKABaseDevice,SKAController,SKAObsDeviceandSKASubarraycomponent manager based device classes respectively. They have the same Tango interface as the original base classes, but the interfaces do not require the use of a component manager.WOM-725, WOM-832, WOM-979: Added dynamically dispatched
read_<attr>(),write_<attr>()andexecute_<cmd>()methods to all Tango interfaces, allowing subclasses to override the behaviour of these attributes and commands, without changing the Tango interface classes and SKA base classes.WOM-678: Added
standard_simulation_mode(),standard_test_mode()andstandard_control_mode()functions to provide standard implementations of optional SKA control model attributes to be used with theBaseInterface.WOM-674: Added
@long_running_commandand@submit_lrc_taskdecorators for creating long running commands.WOM-674, WOM-829: Added
@TaskExecutor.taskdecorator for creating long running command tasks with a simplified API.WOM-675, WOM-830: Added
@validate_json_argfor decorating Tango commands to take a single JSON string as argument.WOM-804: Introduced a new
ska_tango_base.type_hintsmodule that provides common type hints for use with SKA Tango devices.WOM-947: Added support for pytango 10.1.
WOM-755: Added testing against multiple pytango versions. For this release 9.4.2, 9.5.0, 10.0.3 and 10.1.1 are tested against.
Removed
WOM-768, WOM-965: Removed the internal
ExecutePendingOperationspolled command to use the_SignalBusinstead.WOM-852: Removed unused
SKATelState,SKAAlarmHandler,SKALoggerandSKACapabilitybase classes.
Fixed
WOM-783: Updated
TaskExecutorto keep track of input queue length instead of using unreliable queue size ofThreadPoolExecutor.WOM-811: Fix
TaskExecutorto explicitly shutdown duringdelete_device.WOM-793: Fix
BaseComponentManagerto clearPowerStatewhenever communication is lost.
Changes since 1.4.0rc1 (2025-08-27)
Added
WOM-755: Added testing against multiple pytango versions. 9.4.2, 9.5.0, 10.0.3 and 10.1.1 are tested against.
WOM-858: Added logic to automatically handle the
obsStatetransitions forSubarrayInterfacedevices and movedObsStateModelinto theSubarrayInterface.WOM-946: Moved
OpStateModelinto theBaseInterfaceto be inline with theSubarrayInterface.WOM-936: Deprecated duplicated modules and tidied up exports.
Fixed
WOM-830:
@validate-json-argsnow accepts a singleschemaargument that can be a string or a dictionary.WOM-831: Moved
SkaLevelfromSKADeviceback toSKABaseDevice.WOM-855: Simplified device initialisation so that it can be explained clearly.
WOM-898: Command status transitions are now checked immediately on
lrc_eventsignals, before the LRC user dictionaries are updated, so warnings are correctly emitted.WOM-934: Support
@listen_to_signalwith aSignalobject.WOM-940: The
completed_callbackis now called immediately when a command transitions toTaskStatus.COMPLETED, regardless of which LRC dict the command is in.WOM-947: Added support for pytango 10.1.
WOM-964: Add
AbstractSubarrayInterfaceto use withSKASubarrayto avoid MRO issues.WOM-965: Fixed
_submit_tango_operationsimplementation based on the_SignalBus.WOM-966: Fixed when we call
create_component_managerto be compatible with previous releases.WOM-968: Added missing methods to the
CommandTrackerProtocolcompletely.WOM-977: Synchronously update user LRC dictionaries in
_CommandTracker.WOM-979: Ensure attributes can be overridden with
@tango.server.attributedecorator.
Documentation
WOM-829: Improved
TaskExecutor.taskdocumentation.WOM-1028: Improved deprecation warnings for SKA command objects.
1.3.2 - 2025-04-04
Fixed
THORN-99: Remove successful poll debug log
WOM-710: Fix long running command attribute deprecation warnings
Changed
DPPT-987: Update sphinx and documentation theme
1.3.1 - 2025-01-29
Fixed
SKB-742: Added
SlowDeviceInitCommand, a fixed version ofDeviceInitCommand, which does not perform the “init_completed” action before invoking the user supplieddo()method. Users requiring control over when the “init_completed” action is performed can inherit fromSlowDeviceInitCommandbut are then responsible for callingself._completed()in order to perform the “init_completed” action themselves.
1.3.0 - 2025-01-21
Added
WOM-572: Added OpenTelemetry support as optional poetry extra: ‘telemetry’. It only works with PyTango 10.0.0 or newer.
WOM-571: Added an optional callback method to the
TaskExecutorComponentManager, which is called when theTaskExecutorcatches any unhandled exceptions during execution of a LRC. It implies a bug in the device code, and the callback should be used to notify users thereof.WOM-573: Include the versions of the device, ska-tango-base and ska-control-model in the
tango.DeviceInfo.version_infodict if using PyTango 10.0.0 or newer.
1.2.3 - 2024-11-27
Fixed
SKB-663: Fixed the
BaseComponentManager.abort_commandsdeprecation check to be compatible with aMockcomponent manager that mocksabort_commands.
1.2.2 - 2024-11-21
Fixed
WOM-522: Handle and log any exceptions from
PollModelmethods in polling loop.
1.2.1 - 2024-11-12
Fixed
WOM-507: Fixed the
BaseComponentManager.abort_commandsdeprecation check to be compatible with aMockobject in tests.
1.2.0 - 2024-10-22
Added
WOM-423: Added 1.2.0 migration guide explaining all the changes listed below in more detail.
PERENTIE-2592:
TestModeOverrideMixinclass that adds atest_mode_overridesattribute and@overridabledecorator, with logic to apply overrides to Tango attributes whenTestModeis active.WOM-344:
Abortcommand fromSKASubArrayadded toSKABaseDevicethat has a command ID andTaskStatus.WOM-372: New user facing LRC attributes
lrcQueue,lrcExecutingandlrcFinished.WOM-367, WOM-457, WOM-466: Version 2 of the LRC client-server protocol.
New
lrcProtocolVersionsattribute indicating the range of versions of the LRC client-server protocol supported bySKABaseDevice. It is read ininvoke_lrcto check compatibility between the client and server and to decide which version to use.New private
_lrcEventsattribute that is meant to be only used byinvoke_lrc.
Changed
WOM-502: Allow using PyTango 10.0.0 with ska-tango-base 1.2.0.
WOM-495, WOM-497: Long running command task tracking.
Emit warnings for invalid
TaskStatustransitions.Do not assume the
TaskCallbackTypeannotation is used by alltask_callbackimplementations:CommandTracker.update_command_infoemits aFutureWarningwhen the progress/result does not match their types specified byTaskCallbackType, and raises aTypeErrorif the status is not aTaskStatusenum.invoke_lrcprotocol V2 logs a warning if the progress is not an integer.
WOM-468: Updated the error handling guidelines to recommend throwing an exception if a LRC is rejected by the Tango command that initiates the LRC.
Deprecated
WOM-344:
SKABaseDevice.AbortCommandsis deprecated and replaced by newSKABaseDevice.Abortcommand.BaseComponentManager.abort_commandsis deprecated and replaced byabort_tasks.WOM-377:
longRunningCommandStatus,longRunningCommandProgress,longRunningCommandInProgress,longRunningCommandsInQueue,longRunningCommandIDsInQueueandlongRunningCommandResultis deprecated in favour of new user facing LRC attributes.
Fixed
WOM-488: The
Off,ResetandStandbycommands are allowed while the device is inDevState.ALARM, but theOncommand is rejected. This device state is equivalent toDevState.ON, but is forcefully set by cppTango when at least one attribute has its quality factor set toAttrQuality.ATTR_WARNINGorAttrQuality.ATTR_ALARM.WOM-501: Return status information for all known LRCs from
CheckLongRunningCommandStatuscommand.
1.1.0 - 2024-08-20
Added
WOM-369, WOM-393, WOM-394, WOM-415: Added new
invoke_lrcfunction as a callback API for LRCs.WOM-373: Added documentation for the
communication_state_callbackandcomponent_state_callbackkeyword arguments of a component manager.
Changed
WOM-366: Updated logging guide from README and added it to ReadTheDocs.
WOM-413: Updated example of how to invoke a LRC using
invoke_lrcand added its API to docs.
Removed
WOM-365: Removed unnecessary
typing_extensionsimport.
1.0.0 - 2024-05-21
Added
WOM-300: Added 1.0.0 migration guide explaining all the breaking changes listed below in more detail.
Changed
WOM-300, WOM-358: Restructured and revised all the documentation, split into how-to, explanation and reference.
WOM-299: Updated to pytango ^9.4.2 for build and 9.5.0 for development.
WOM-343: Updated
TaskExecutorto followTaskStatusstate machine.Long Running Commands are transitioned to
TaskStatus.STAGINGinitially.When in a final status, all tasks have a result of the form
(ResultCode, message).
WOM-302: Set correct LRC attribute spectrum limits.
If there are too many items to report for
longRunningCommandStatus,longRunningCommandsInQueueandlongRunningCommandIDsInQueue, the oldest completed commands are now pruned from the list and a warning is logged.longRunningCommandInProgressnow supports reporting multiple commands in progress. If there are no commands in progress, this attribute now returns an empty list instead of["", ""].
WOM-342: Made
max_queued_tasksandmax_executing_tasksread only attributes that have hard-coded values for the different base classes.
Removed
WOM-250, WOM-345: Removed
max_workersfromTaskExecutorComponentManager.Updated to ska-control-model 1.0.0 (REL-1292) - this removes
adminMode.MAINTENANCE.
Fixed
WOM-357: Fixed long outstanding issues with API auto generated docs.
0.20.2
WOM-319: Fix timing issue with LRCInProgress and
Abort()WOM-320: Do not directly call Tango operations while holding the
CommandTrackerlock
0.20.1
WOM-273: Pin poetry version in readthedocs.yml
WOM-274: Mark tests where
Abort()is used as xfail
0.20.0
WOM-265: Deprecate
max_workersforTaskExecutorComponentManagerWOM-266: Revert LRC attribute size to 64 queued commands
WOM-211: Add
commandedStateandcommandedObsStateattributesMCCS-1993: Update to use latest version of ska-control-model
WOM-212: Add
longRunningCommandInProgressattribute
0.19.3
WOM-213: Limit input queue size for long running commands
WOM-177: Fix
push_change_eventandpush_archive_eventto expose the official PyTango interface
0.19.2
LOW-614: Remove
DevInt, removed in cppTango/PyTango 9.5.0KAR-585: Improve docs to reflect input queue updates
0.19.1
MCCS-1695: Workaround for pytango 9.4.2 logging interface change
0.19.0
MCCS-1636: Use ska-ser-sphinx-theme for documentation
KAR-632: Unpinned numpy requirements. Bumped minimum Python version to 3.8
KAR-587: Input queue updates
0.18.1
MCCS-1494: Bug fixes to subarray subclassing following addition of JSON validation support
KAR-497: Further task callback parameters bug fixes
MCCS-1579: Strict type-checking, leading to bug fixes in task callback parameters and subarray resource pool checking
0.18.0
MCCS-1424: JSON validation support
0.17.0
MCCS-1358: Remove CSP-specific content (into separate ska-csp-lmc-base repo)
0.16.1
LOW-418: Remove redundant production Dockerfile, relax pytango constraint
LOW-415: Complete linting and type-hinting
0.16.0
MCCS-1312: Update to pytango 9.3.6
0.15.0
MCCS-1208: Allow
Abort()from RESOURCING,Off()from FAULT
0.14.0
LOW-346: Provide polling mechanism as alternive concurrency mechanism to task executor
0.13.6
Updated numpy version
0.13.5
REL-275: Fix pipeline
0.13.4
KAR-466: Repository maintenance
MCCS-1072: Type hint & static type check base class alarm_handler_device & utils
MCCS-934: Type hint & Static type check base classes
LOW-330: Import control model definitions from ska-control-model
LOW-317: Allow
Reset()from STANDBY and ON states, not just FAULT
0.13.3
KAR-403: Fixed exceptions in LRCs not updating
longRunningCommandResultaccordinglyLOW-299: Fixed docs build in the CI pipeline
LOW-278: Now using ska-tango-testing
SAH-1156: Enable
assigned_resourcesproperty insideSubarrayComponentManager.
0.13.2
CT-738: fix check long running status
AT3-140: fix base TANGO xmi files
MCCS-1053: Fix the problem of device in UNKNOWN state upon test startup
PERENTIE-1350: Remove misleading
CspSubarrayComponentManager.__init__function
0.13.1
KAR-399: Renamed
SKAControllercommandisCapabilityAchievabletoIsCapabilityAchievable.
0.13.0
MCCS-876: Updated implementation of long running commands
SAR-341: Updated docs
SAR-351: Updated tests
0.12.1
SAR-303
Fixed PYPI URL
Moved command response message to component manager
MCCS-845
NO_SUPPLYadded toPowerModeenum
0.12.0
Implemented ST-946 (automation templates)
Included Long running commands implementation
SAR-277, SAR-287, SAR-286, SAR-276, SAR-275, SAR-273
0.11.3
No change, moving artefacts to a new Central Aftefact Repository.
0.11.2
Update docstrings for 100% coverage and PEP257 compliance
0.11.1
Minor breaking change: rename of “Master” devices to “Controller”
0.11.0
Breaking change: state models and component managers
Re-implementation of operational state model to better model hardware and support device decoupling.
Decoupling of state models from each other
Introduction of component managers, to support component monitoring
Update to latest containers
Add developer guide to documentation
0.10.1
Make dependency on
pytangoandnumpypython packages explicit.Add optional “key” parameter to
SKASubarrayResourceManagerto filter JSON for assign & release methods.
0.10.0
Add
DebugDevicecommand toSKABaseDevice. This allows remote debugging to be enabled on all devices. It cannot be disabled without restarting the process. If there are multiple devices in a device server, debugging is only enabled for the requested device (i.e., methods patched for debugging cppTango threads). However, all Python threads (not cppTango threads), will also be debuggable, even if created by devices other than the one that was used to enable debugging. There is only one debugger instance shared by the whole process.
0.9.1
Changed dependency from
ska_loggingtoska_ser_logging.
0.9.0
Breaking change: Package rename
Installable package name changed from
lmcbaseclassestoska_tango_base.Package import
ska.basehas been changed toska_tango_base. For example, instead offrom ska.base import SKABaseDeviceusefrom ska_tango_base import SKABaseDevice.
0.8.1
Fix broken docs
0.8.0
Add base classes for CSP SubElements
0.7.2
Switch to threadsafe state machine
0.7.1
Bugfix for
Reset()command
0.7.0
Separate
adminModestate machine fromopStatestate machineAdd support for STANDBY
opStateAdd
Standby()andDisable()commands toSKABaseDeviceBreaking behavioural changes to adminMode and
opStatestate machinesBreaking change to
_straight_to_statemethod signature
0.6.6
Documentation bugfix
0.6.5
Fix to observation state machine: allow
Abort()from RESETTING observation state
0.6.4
Refactor state machine to use pytransitions library.
Minor behavioural change:
Off()command is accepted in every obsState, rather than only EMPTY obsState.support
_straight_to_stateshortcuts to simplify test setupsRefactor of state machine testing to make it more portable
0.6.3
Fix omission of
fatal_errortransition from base device state machine.
0.6.2
Fix issue with incorrect updates to transitions dict from inherited devices. Only noticeable if running multiple devices of different types in the same process.
0.6.1
Add
ONstate toSKABaseDeviceStateModel.Move
On()andOff()commands toSKABaseDevice.Add event pushing for device state, device status, admin mode and obs state (change and archive events).
Disable all attribute polling.
0.6.0
Breaking change: State management
SKABaseDeviceimplements a simple state machine with statesDISABLED,OFF,ON,INITandFAULT, along with transitions between them.SKASubarrayimplements full subarray state machine in accordance with ADR-8 (the underlying state model supports all states and transitions, including transitions through transient states; the subarray device uses this state model but currently provide a simple, purely synchronous implementation)Base classes provide subclassing code hooks that separate management of device state from other device functionality. Thus, subclasses are encouraged to leave state management in the care of the base classes by:
leaving
init_device()alone and placing their (stateless) initialisation code in thedo()method of theInitCommandobject instead. The baseinit_device()implementation will ensure that thedo()method is called, whilst ensuring state is managed e.g. the device is put into stateIDLEbeforehand, and put into the right state afterwards.leaving commands like
Configure()alone and placing their (stateless) implementation code inConfigureCommand.do()instead. This applies to all commands that affect device state:Off(),On(),AssignResources(),ReleaseResources(),ReleaseAllResources(),Configure(),Scan(),EndScan(),End(),Abort(),Reset(),Restart().leaving the base device to handle reads from and writes to the state attributes
adminMode,obsStateand devicestate. For example, do not callDevice.set_state()directly; and do not override methods likewrite_adminMode().
0.5.4
Remove
ObsStatecommand fromSKACapability,SKAObsDeviceandSKASubarrayPogo XMI files. It should not have been included - theobsStateattribute provides this information. The command was not in the Python files, so no change to usage. It only affects future Pogo code generation.Add new logging target,
"tango::logger", that forwards Python logs to the Tango Logging Service. This is enabled by default in code, but could be overridden by existing Tango Database device properties.Maximum number of logging targets increased from 3 to 4.
0.5.3
Setting
loggingTargetsattribute to empty list no longer raises exception.Change syslog targets in
loggingTargetsattribute to a full URL so that remote syslog servers can be specified. For example,"syslog::udp://server.domain:514", would send logs toserver.domainvia UDP port 514. Specifying a path without a protocol, like"syslog::/var/log", is deprecated.
0.5.2
Change ska_logger dependency to use ska-namespaced package (v0.3.0). No change to usage.
0.5.1
Make ‘ska’ a native namespace package. No change to usage.
0.5.0
Breaking change: Major restructuring of the package to simplify imports and reduce confusion.
The single word
skabasemodule has now changed to two words:ska.base.Instead of
from skabase.SKABaseDevice.SKABaseDevice import SKABaseDeviceto import the class, just usefrom ska.base import SKABaseDevice.Instead of
skabase.control_modeluseska.base.control_model.The
SKATestDevicewas removed. Note that this class was only intended for internal use and is no longer needed.Removed unused scripts and modules.
Removed
TangoLoggingLevelwhich was deprecated in 0.4.0. Useska.base.control_model.LoggingLevelinstead.
0.4.1
Fix lost properties when re-initialising test device (remove
get_namemock).Fix Sphinx doc building.
Move
ObsDevicevariable initialisation from__init__toinit_device.Run scripts with
python3instead ofpythonand update pip usage.
0.4.0
Changed all
DevEnumattributes to use Pythonenum.IntEnumclasses. These can be imported from the newcontrol_modelnamespace, e.g.,skabase.control_model import AdminMode.The names of some of the enumeration labels were changed to better match the Control Systems Guidelines.
ON-LINEchanged toONLINE.OFF-LINEchanged toOFFLINE.All dashes were changed to underscores to allow usage as Python variables.
Changed
simulationModeattribute fromboolto enumerated type:SimulationMode.Changed
testModeattribute fromstrto enumerated type:TestMode.Deprecated
TangoLoggingLevel. Will be removed in version 0.5.0. Useskabase.control_model.LoggingLevelinstead.Remove unnecessary usage of
DeviceMetaclass.
0.3.1
Used
ska_logginglibrary instead of defining logging format and handlers locally.LoggingTargetDefaultproperty is now empty instead of"console::cout", since the theska_logginglibrary will automatically output to stdout.Fixed device name field in log message if a device server includes multiple devices.
Removed a number of unused files in the
ansibleandrefeltfolders.
0.3.0
Not released
0.2.0
Changed logging to use SKA format
Simplified element, storage and central logging to just a single target. Default writes to stdout. This is in line with the move to Elastic for all logs instead of using the Tango Logging Service for some cases.
Deprecated
dev_loggingmethod. Will be removed in 0.3.0. Use direct calls theself.loggerinstead.
0.1.3
Storage logs are written to a file if Syslog service is not available.
Added exception handling
Improved code coverage
Improved compliance to coding standards
Improvement in documentation
Other minor improvements
0.1.2
Internal release
0.1.1
Logging functionality
Python3 migration
Repackaging of all the classes into a single Python package
Changes to folder structure,
Integration in CI environment