Commit 6248e3df authored by Elisabetta Giani's avatar Elisabetta Giani
Browse files

AT5-259: MidCspMaster is no more a multiclass server. CspCapabilityMonitor devices run

separately.
MidCspSubarray defined as a multiclass server: it runs MidCspSubarrayMaster and
MidCsp Inherent Capability devices.
parent e0a9e657
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -6,10 +6,10 @@ import sys
#sys.path.insert(0, pkg_path)

from MidCspMasterBase import MidCspMasterBase
from csp_lmc_common.CspCapabilityMonitor import CspCapabilityMonitor
from MidCspCapabilityMonitor import MidCspCapabilityMonitor

def main(args=None, **kwargs):
    return run(classes=(MidCspMasterBase, CspCapabilityMonitor), args=args, **kwargs)
    return run(classes=(MidCspMasterBase,), args=args, **kwargs)


if __name__ == '__main__':
+6 −8
Original line number Diff line number Diff line
from tango.server import run
import os
import sys
#file_path = os.path.dirname(os.path.abspath(__file__))
#pkg_path = os.path.abspath(os.path.join(file_path, "./"))
#sys.path.insert(0, pkg_path)

from MidCspSubarrayBase import MidCspSubarrayBase
from csp_lmc_common.CspCapabilityMonitor import CspCapabilityMonitor
from MidCspSubarrayProcModeCorrelation import MidCspSubarrayProcModeCorrelation
from MidCspSubarrayProcModePss import MidCspSubarrayProcModePss
from MidCspSubarrayProcModePst import MidCspSubarrayProcModePst
from MidCspSubarrayProcModeVlbi import MidCspSubarrayProcModeVlbi

def main(args=None, **kwargs):
    return run(classes=(MidCspSubarrayBase, MidCspSubarrayProcModeCorrelation,
    return run(classes=(MidCspSubarrayProcModeCorrelation,
               MidCspSubarrayProcModePss, MidCspSubarrayProcModePst,
               MidCspSubarrayProcModeVlbi,), args=args, **kwargs)
               MidCspSubarrayProcModeVlbi,MidCspSubarrayBase), args=args, **kwargs)


if __name__ == '__main__':
+62 −7
Original line number Diff line number Diff line
@@ -22,8 +22,9 @@ from future.utils import with_metaclass
from collections import defaultdict
import threading
import time

import json
file_path = os.path.dirname(os.path.abspath(__file__))
print(file_path)
# PROTECTED REGION END# //MidCspSubarrayBase.standardlibray_import

# tango imports
@@ -40,7 +41,8 @@ from tango import AttrWriteType, DeviceProxy
from skabase.SKAMaster  import SKAMaster
from skabase.auxiliary import utils
# import CSP.LMC Common package
from csp_lmc_common.utils.cspcommons import HealthState, AdminMode
from csp_lmc_common.utils.cspcommons import HealthState, AdminMode, CmdExecState, ObsState
from csp_lmc_common.utils.decorators import AdminModeCheck, ObsStateCheck, SubarrayRejectCmd
from csp_lmc_common.CspSubarray import CspSubarray
# PROTECTED REGION END #    //  MidCspSubarrayBase.additionnal_import

@@ -188,19 +190,72 @@ class MidCspSubarrayBase(with_metaclass(DeviceMeta, CspSubarray)):
        self._sc_subarray_cmd_exec_state[device][cmd_name] = CmdExecState.IDLE
        self._cmd_execution_state[cmd_name] = CmdExecState.IDLE
    
    def _validate_scan_configuration(self, json_config):
    def _validate_scan_configuration(self, argin):
        """
        Overwritten method.
        Validate the MID scan configuration file.
        Currently it only copies the received configuration because it does not
        still exist any "cbf" block inside the JSON script.

        TODO:
        - look for the sub-element entries
        - add eventual information to the sub-element blocks (for example for PSS add the
        addresses of the PSS pipelines or the IDs of the SearchBeams)
        - set the observing mode for each sub-element sub-array/PSTBeam
        json_config = {}
        try:
            json_config = json.loads(argin)                               
        except json.JSONDecodeError as e:  # argument not a valid JSON object
            # this is a fatal error
            msg = ("Scan configuration object is not a valid JSON object."
                   "Aborting configuration:{}".format(str(e)))
            self.logger.error(msg)
            tango.Except.throw_exception("Command failed",
                                         msg,
                                         "ConfigureScan execution",
                                         tango.ErrSeverity.ERR)
        if "cbf" in json_config:
            if self._sc_subarray_state[self.CbfSubarray] != tango.DevState.ON:
                pass
                # throw exception
            self._sc_subarray_obs_mode[self.CbfSubarray] = ObsMode.CORRELATION
            self._sc_scan_configuration[self.CbfSubarray] = json.dumps(json_config["cbf"])
            self._sc_subarray_assigned_fqdn.append(self.CbfSubarray)
        if "pss" in json_config:
            if self._sc_subarray_state[self.PssSubarray] != tango.DevState.ON:
                pass
                # throw exception
            #self._sc_subarray_obs_mode[self.PssSubarray] = ??
            self._sc_subarray_assigned_fqdn.append(self.PssSubarray)
            pss_json = json_config["pss"]
            if "searchbeams" not in self._sc_scan_configuration[self.PssSubarray]: 
                pss_json["searchbeams"] = self._assigned_search_beams
            self._sc_scan_configuration[self.PssSubarray] = json.dumps(pss_json)
            
        if "pst" in json_config:
            ....
        :param json_config: the input JSON formatted string with the configuration
                            for a scan
            
        """
        json_dict = {}
        try:
            json_dict = json.loads(argin)                              
        except json.JSONDecodeError as e:  # argument not a valid JSON object
            # this is a fatal error
            msg = ("Scan configuration object is not a valid JSON object."
                   "Aborting configuration:{}".format(str(e)))
            self.logger.error(msg)
            tango.Except.throw_exception("Command failed",
                                         msg,
                                         "ConfigureScan execution",
                                         tango.ErrSeverity.ERR)
        #TODO:
        # validate some entries of json_dict
        self.logger.debug("Validate scan configuration for MID CSP")
        #self._sc_subarray_obs_mode[self.CbfSubarray] = ObsMode.IMAGING
        #self._sc_scan_configuration[self.CbfSubarray] = json_config["cbf"]
        self._sc_subarray_scan_configuration[self.CbfSubarray] = json_config
        self._sc_subarray_scan_configuration[self.CbfSubarray] = argin
        self._sc_subarray_assigned_fqdn.append(self.CbfSubarray)
             
    # PROTECTED REGION END #    //  MidCspSubarrayBase.private_methods
@@ -383,7 +438,7 @@ class MidCspSubarrayBase(with_metaclass(DeviceMeta, CspSubarray)):
        doc_in="List of the receptor IDs to add to the subarray.",
    )
    @DebugIt()
    #@SubarrayRejectCmd(['RemoveReceptors', 'Configure'])
    @SubarrayRejectCmd(['RemoveReceptors', 'Configure'])
    def AddReceptors(self, argin):
        # PROTECTED REGION ID(MidCspSubarrayBase.AddReceptors) ENABLED START #
        """
@@ -633,7 +688,7 @@ class MidCspSubarrayBase(with_metaclass(DeviceMeta, CspSubarray)):
                                                "Command()",
                                                tango.ErrSeverity.ERR)
        else:
            log_msg = "Subarray {} not registered!".format(str(self._cbf_subarray_fqdn))
            log_msg = "Subarray {} not registered!".format(str(self.CbfSubarray))
            self.dev_logging(log_msg, tango.LogLevel.LOG_ERROR)
            tango.Except.throw_exception("Command failed",
                                         log_msg,