diff --git a/pogo/CspSubElementController.xmi b/pogo/CspSubElementController.xmi index c861cbdb54bde0004aa37903408b1df8606b27fa..a130f84c5b9775c75fdce5f00a5f6d2c24ac431d 100644 --- a/pogo/CspSubElementController.xmi +++ b/pogo/CspSubElementController.xmi @@ -71,7 +71,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/CspSubElementObsDevice.xmi b/pogo/CspSubElementObsDevice.xmi index 7befab6dceac94b1e8e3f94fc07f58ff46aab16f..af8d7f2ffef204fe6d0cab907f3e8ec5507c0eed 100644 --- a/pogo/CspSubElementObsDevice.xmi +++ b/pogo/CspSubElementObsDevice.xmi @@ -53,7 +53,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/CspSubElementSubarray.xmi b/pogo/CspSubElementSubarray.xmi index 489b6908ab263dd26f752aaba5d17c2a405119c1..1ca79a912d1c3c0827bb03d2153e56064bc1e208 100644 --- a/pogo/CspSubElementSubarray.xmi +++ b/pogo/CspSubElementSubarray.xmi @@ -56,7 +56,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKAAlarmHandler.xmi b/pogo/SKAAlarmHandler.xmi index db01bd184e51687cbe12657178050a89ab9d0a5e..3f8f1945c48c562b2e555c3d6e86cbade0b24866 100644 --- a/pogo/SKAAlarmHandler.xmi +++ b/pogo/SKAAlarmHandler.xmi @@ -118,7 +118,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState ]"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKABaseDevice.xmi b/pogo/SKABaseDevice.xmi index a7f7ed3d33b5aab3b45766fea89602a568004058..42261f49a934e9df654ee2e48d85cdba495e5c69 100644 --- a/pogo/SKABaseDevice.xmi +++ b/pogo/SKABaseDevice.xmi @@ -46,7 +46,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="Version strings"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </commands> diff --git a/pogo/SKACapability.xmi b/pogo/SKACapability.xmi index b71acefedfa4738c44587657b2a95208db2102fa..524562f9c03bba3812491cb65b506eb386de5a17 100644 --- a/pogo/SKACapability.xmi +++ b/pogo/SKACapability.xmi @@ -59,7 +59,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKAController.xmi b/pogo/SKAController.xmi index 46679e7d55b18d1c0a3fa52b503aaab808362dad..ba8e0367a1889bca202fb0135784fb9cafa76f72 100644 --- a/pogo/SKAController.xmi +++ b/pogo/SKAController.xmi @@ -60,7 +60,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> @@ -69,7 +69,7 @@ <type xsi:type="pogoDsl:LongStringArrayType"/> </argin> <argout description=""> - <type xsi:type="pogoDsl:BooleanType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </commands> diff --git a/pogo/SKALogger.xmi b/pogo/SKALogger.xmi index 267dbfb092f18f98b15fad112d09289811805fa7..3616550bd99d982a4a136eb51cce6c597a8bdc45 100644 --- a/pogo/SKALogger.xmi +++ b/pogo/SKALogger.xmi @@ -56,7 +56,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState ]"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKAObsDevice.xmi b/pogo/SKAObsDevice.xmi index 3512f14737da381a38d4b94adb0fafb894e6406b..6caa63326d5676816234fe95c7d14ec1aef32aee 100644 --- a/pogo/SKAObsDevice.xmi +++ b/pogo/SKAObsDevice.xmi @@ -47,7 +47,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKASubarray.xmi b/pogo/SKASubarray.xmi index f13224cf3843b06f84b9c7c66a3d9ab52546f98b..280d53a2809230d0ca0cf3f52d33107667e4b871 100644 --- a/pogo/SKASubarray.xmi +++ b/pogo/SKASubarray.xmi @@ -55,7 +55,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/pogo/SKATelState.xmi b/pogo/SKATelState.xmi index 009fed6b9224161dd27335abf828212d706e4023..210d8fee2e160d3d001b599febd84b612479c894 100644 --- a/pogo/SKATelState.xmi +++ b/pogo/SKATelState.xmi @@ -51,7 +51,7 @@ <type xsi:type="pogoDsl:VoidType"/> </argin> <argout description="[ name: EltTelState ]"> - <type xsi:type="pogoDsl:StringArrayType"/> + <type xsi:type="pogoDsl:DevVarLongStringArray"/> </argout> <status abstract="false" inherited="true" concrete="true"/> </commands> diff --git a/src/ska_tango_base/base/base_device.py b/src/ska_tango_base/base/base_device.py index 093a7ecd7ad426c77e2cdd9920f78d4051c15f58..6bbfc93a56c54de9fd33a2516e6bfee69c7b05b0 100644 --- a/src/ska_tango_base/base/base_device.py +++ b/src/ska_tango_base/base/base_device.py @@ -1183,8 +1183,8 @@ class SKABaseDevice(Device): return [f"{device.__class__.__name__}, {device.read_buildState()}"] @command( - dtype_out=("str",), - doc_out="Version strings", + dtype_out="DevVarLongStringArray", + doc_out="(ResultCode, 'Command unique ID')", ) @DebugIt() def GetVersionInfo(self): @@ -1195,10 +1195,11 @@ class SKABaseDevice(Device): To modify behaviour for this command, modify the do() method of the command class. - :return: Version details of the device. + :return: The result code and the command unique ID """ command = self.get_command_object("GetVersionInfo") - return command() + unique_id, result_code = self.component_manager.enqueue(command) + return [[result_code], [unique_id]] # PROTECTED REGION END # // SKABaseDevice.GetVersionInfo class ResetCommand(StateModelCommand, ResponseCommand): diff --git a/src/ska_tango_base/controller_device.py b/src/ska_tango_base/controller_device.py index a440120822f5610d4ed9c699a83ae3122065cd1a..a390d9a15f1e5198295dd8a2fb0c8cf6651d67ee 100644 --- a/src/ska_tango_base/controller_device.py +++ b/src/ska_tango_base/controller_device.py @@ -240,7 +240,8 @@ class SKAController(SKABaseDevice): @command( dtype_in="DevVarLongStringArray", doc_in="[nrInstances][Capability types]", - dtype_out="bool", + dtype_out="DevVarLongStringArray", + doc_out="(ResultCode, 'Command unique ID')", ) @DebugIt() def isCapabilityAchievable(self, argin): @@ -258,11 +259,12 @@ class SKAController(SKABaseDevice): :type argin: :py:class:`tango.DevVarLongStringArray`. - :return: True if capability can be achieved, False if cannot - :rtype: DevBoolean + :return: result_code, unique_id + :rtype: DevVarLongStringArray """ command = self.get_command_object("IsCapabilityAchievable") - return command(argin) + unique_id, result_code = self.component_manager.enqueue(command, argin) + return [[result_code], [unique_id]] # PROTECTED REGION END # // SKAController.isCapabilityAchievable diff --git a/tests/test_alarm_handler_device.py b/tests/test_alarm_handler_device.py index 3e6c5bf6100220992bce6e881a34af2304a89582..f93a5a5f836acd83a08a0e6a9fee36f6a5192f44 100644 --- a/tests/test_alarm_handler_device.py +++ b/tests/test_alarm_handler_device.py @@ -97,11 +97,12 @@ class TestSKAAlarmHandler(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKAAlarmHandler.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKAAlarmHandler.test_GetVersionInfo # PROTECTED REGION ID(SKAAlarmHandler.test_statsNrAlerts_decorators) ENABLED START # diff --git a/tests/test_base_device.py b/tests/test_base_device.py index 9a328bd56997b38d6ed5daac7ade56f5d503f572..c9f217ca618d66e64a9697efff0a895245c5d32f 100644 --- a/tests/test_base_device.py +++ b/tests/test_base_device.py @@ -441,11 +441,12 @@ class TestSKABaseDevice(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKABaseDevice.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKABaseDevice.test_GetVersionInfo # PROTECTED REGION ID(SKABaseDevice.test_Reset_decorators) ENABLED START # diff --git a/tests/test_controller_device.py b/tests/test_controller_device.py index 6999b808dc440366d41691cce6f5290a79845fcb..981a1d03e7a8269cf95928d54c98c3168f9fa2e1 100644 --- a/tests/test_controller_device.py +++ b/tests/test_controller_device.py @@ -95,11 +95,12 @@ class TestSKAController(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKAController.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKAController.test_GetVersionInfo # PROTECTED REGION ID(SKAController.test_isCapabilityAchievable_failure_decorators) ENABLED START # @@ -107,7 +108,10 @@ class TestSKAController(object): def test_isCapabilityAchievable_failure(self, device_under_test): """Test for isCapabilityAchievable to test failure condition.""" # PROTECTED REGION ID(SKAController.test_isCapabilityAchievable_failure) ENABLED START # - assert device_under_test.isCapabilityAchievable([[2], ["BAND1"]]) is False + device_under_test.isCapabilityAchievable([[2], ["BAND1"]]) + capability_achievalble = device_under_test.longRunningCommandResult[2] + assert capability_achievalble == "False" + # assert device_under_test.isCapabilityAchievable([[2], ["BAND1"]]) is False # PROTECTED REGION END # // SKAController.test_isCapabilityAchievable_failure # PROTECTED REGION ID(SKAController.test_isCapabilityAchievable_success_decorators) ENABLED START # @@ -116,7 +120,9 @@ class TestSKAController(object): def test_isCapabilityAchievable_success(self, device_under_test): """Test for isCapabilityAchievable to test success condition.""" # PROTECTED REGION ID(SKAController.test_isCapabilityAchievable_success) ENABLED START # - assert device_under_test.isCapabilityAchievable([[1], ["BAND1"]]) is True + device_under_test.isCapabilityAchievable([[1], ["BAND1"]]) + capability_achievalble = device_under_test.longRunningCommandResult[2] + assert capability_achievalble == "True" # PROTECTED REGION END # // SKAController.test_isCapabilityAchievable_success # PROTECTED REGION ID(SKAController.test_elementLoggerAddress_decorators) ENABLED START # diff --git a/tests/test_csp_controller.py b/tests/test_csp_controller.py index 55aab228a9f13d9eb3643510b3ebe68480f12ff6..eadcf3d0f031686bd058f740f2a5bfd8631a5320 100644 --- a/tests/test_csp_controller.py +++ b/tests/test_csp_controller.py @@ -88,11 +88,12 @@ class TestCspSubElementController(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(CspSubelementController.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // CspSubelementController.test_GetVersionInfo # PROTECTED REGION ID(CspSubelementController.test_configurationProgress_decorators) ENABLED START # diff --git a/tests/test_csp_obs_device.py b/tests/test_csp_obs_device.py index 3aa5d0e685fd385e43cc6ea851f9a1d233cdce58..a505efb4e0ac4d2366e0df1b16d11f496dd0fa13 100644 --- a/tests/test_csp_obs_device.py +++ b/tests/test_csp_obs_device.py @@ -97,11 +97,12 @@ class TestCspSubElementObsDevice(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(CspSubelementObsDevice.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // CspSubelementObsDevice.test_GetVersionInfo # PROTECTED REGION ID(CspSubelementObsDevice.test_buildState_decorators) ENABLED START # diff --git a/tests/test_csp_subarray.py b/tests/test_csp_subarray.py index 37a4d0b465a69359c1b7c0988c8f084f2ac12865..6d36bde9804ef150d0ea24068e68392f7cd32050 100644 --- a/tests/test_csp_subarray.py +++ b/tests/test_csp_subarray.py @@ -98,11 +98,12 @@ class TestCspSubElementSubarray(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(CspSubelementSubarray.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // CspSubelementSubarray.test_GetVersionInfo # PROTECTED REGION ID(CspSubelementSubarray.test_configurationProgress_decorators) ENABLED START # diff --git a/tests/test_logger_device.py b/tests/test_logger_device.py index 2bdf46bb3c40817af04f3577c52837b6c1072039..f3a65923418bc76e3717f39def447a12d5f127bf 100644 --- a/tests/test_logger_device.py +++ b/tests/test_logger_device.py @@ -81,11 +81,12 @@ class TestSKALogger(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKALogger.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKALogger.test_GetVersionInfo # PROTECTED REGION ID(SKALogger.test_buildState_decorators) ENABLED START # diff --git a/tests/test_obs_device.py b/tests/test_obs_device.py index daceac14f357a0d17013f389caf847a4884abb5f..6114ff50e5c07953f58baef90f3f84b61be51dfb 100644 --- a/tests/test_obs_device.py +++ b/tests/test_obs_device.py @@ -84,11 +84,12 @@ class TestSKAObsDevice(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKAObsDevice.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKAObsDevice.test_GetVersionInfo # PROTECTED REGION ID(SKAObsDevice.test_obsState_decorators) ENABLED START # diff --git a/tests/test_subarray_device.py b/tests/test_subarray_device.py index cceb1bdf35344267b3e89fdbe77edfb9571667ed..420e4608ed7ba084114a018a3bbd70b39bbfccc9 100644 --- a/tests/test_subarray_device.py +++ b/tests/test_subarray_device.py @@ -122,11 +122,12 @@ class TestSKASubarray: """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKASubarray.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKASubarray.test_GetVersionInfo # PROTECTED REGION ID(SKASubarray.test_Status_decorators) ENABLED START # diff --git a/tests/test_tel_state_device.py b/tests/test_tel_state_device.py index e771eb828a42e213b62db69896780b561e9cdb15..a6b148917cf375c85ec13978b53b5b85ff9f5417 100644 --- a/tests/test_tel_state_device.py +++ b/tests/test_tel_state_device.py @@ -77,11 +77,12 @@ class TestSKATelState(object): """Test for GetVersionInfo.""" # PROTECTED REGION ID(SKATelState.test_GetVersionInfo) ENABLED START # versionPattern = re.compile( - f"{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " - "A set of generic base devices for SKA Telescope." + f"['{device_under_test.info().dev_class}, ska_tango_base, [0-9]+.[0-9]+.[0-9]+, " + "A set of generic base devices for SKA Telescope.']" ) - versionInfo = device_under_test.GetVersionInfo() - assert (re.match(versionPattern, versionInfo[0])) is not None + device_under_test.GetVersionInfo() + versionInfo = device_under_test.longRunningCommandResult[2] + assert (re.match(versionPattern, versionInfo)) is not None # PROTECTED REGION END # // SKATelState.test_GetVersionInfo # PROTECTED REGION ID(SKATelState.test_buildState_decorators) ENABLED START #