Commit c45278bc authored by Gianluca Marotta's avatar Gianluca Marotta
Browse files

CT-220 Implemented get_id in JsonConfiguration class with test, Updated...

CT-220 Implemented get_id in JsonConfiguration class with test, Updated ConfigureScan method in CspSubarray.py
parent 6300f9cf
Loading
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ from ska.base.control_model import HealthState, AdminMode, ObsState, ObsMode
from .utils.cspcommons import CmdExecState
from .utils.decorators import transaction_id
from . import release
from .csp_manage_json import JsonConfiguration
# PROTECTED REGION END #    //  CspSubarray.additionnal_import

__all__ = ["CspSubarray", "main"]
@@ -660,8 +661,6 @@ class CspSubarray(SKASubarray):
                    self.logger.info("Configure ends with success!!")
                    return target_device.configure_cmd_obj.succeeded()

                

        def validate_scan_configuration(self, argin):
            """
            This method is overwritten in each CspSubarray instance.
@@ -673,21 +672,19 @@ class CspSubarray(SKASubarray):

            target_device = self.target
            try:
                json_dict = json.loads(argin)
                if "id" not in json_dict:
                    msg = ("Command failed: No configuration ID in JSON object")
                    self.logger.error(msg)
                    tango.Except.throw_exception("Command failed",
                                                 msg,
                                                 "ConfigureScan execution",
                                                 tango.ErrSeverity.ERR)
                self._configuration_id = json_dict["id"]
                json_config = JsonConfiguration(argin, self.logger)
                target_device._configuration_id = json_config.get_id()
                self.logger.info("Processing configuration {}".format(target_device._configuration_id))

            except json.JSONDecodeError as e:  # argument not a valid JSON object
            except Exception as e:  # argument not a valid JSON object
                # this is a fatal error
                if isinstance(e, json.JSONDecodeError):
                    msg = ("Scan configuration object is not a valid JSON object."
                           "Aborting configuration:{}".format(str(e)))
                elif isinstance(e, ValueError):
                    msg = "Command failed: No configuration ID in JSON object"
                else:
                    msg = 'Unknown Error'
                self.logger.error(msg)
                tango.Except.throw_exception("Command failed",
                                             msg,
+15 −1
Original line number Diff line number Diff line
@@ -9,8 +9,8 @@ class JsonConfiguration:
    def __init__(self, json_config:str, logger):
        self.major_version = None
        self.minor_version = None
        self.config = json.loads(json_config)
        self.logger = logger
        self.config = json.loads(json_config)

    def detect_version(self):
        """
@@ -45,6 +45,20 @@ class JsonConfiguration:
            self.logger.error(e)
            raise ValueError(e) from e

    def get_id(self):
        """
        Return the json configuration id
        """
        try:
            common_sec = self.get_section('common')
            config_id = common_sec['id']
        except ValueError as e:
            if 'id' in self.config:
                config_id = self.config['id']
            else:
                raise ValueError(e) from e
        return config_id

    def conversion_10_01(self):
        """
        Converts the json from version 1.0 (ADR-18) to version 0.1.
+14 −1
Original line number Diff line number Diff line
import json
from csp_lmc_common.csp_manage_json import JsonConfiguration
import logging
import pytest
@@ -64,7 +65,7 @@ json_string_test_ADR_18_invalid = """
    "common": {

        "id": "sbi-mvp01-20200325-00001-science_A",     
        "frequencyBand": "1", 
        "frequencyBand": "1" 
    },
    "cbf": {
        "fsp": [       
@@ -173,3 +174,15 @@ class TestJsonConfiguration:
        with pytest.raises(ValueError, match=r'version.*is not supported'):
            self.json_config_ADR22.build_json_cbf()

    def test_get_id(self):
        self.init_config()
        assert self.json_config_pre_ADR18.get_id() == "sbi-mvp01-20200325-00001-science_A"
        assert self.json_config_ADR18.get_id() == "sbi-mvp01-20200325-00001-science_A"

    def test_get_id_NOT_PRESENT(self):
        self.init_config()
        self.json_config_pre_ADR18.config.pop('id')
        json_config_with_no_id = json.dumps(self.json_config_pre_ADR18.config)
        json_config_with_no_id = JsonConfiguration(json_config_with_no_id, LOGGER)
        with pytest.raises(ValueError):
            json_config_with_no_id.get_id()