def check_cmd_parameter_diff()

in azure-cli-diff-tool/azure_cli_diff_tool/meta_change_detect.py [0:0]


    def check_cmd_parameter_diff(self, cmd_name, base_parameters, cmp_parameters):
        """check cmd parameter diff"""
        for base_para_obj in base_parameters:
            base_para_obj["checked"] = True
            cmp_para_obj = self.__search_para_with_name_and_options(base_para_obj, cmp_parameters)
            if cmp_para_obj is None:
                # cmd lost parameter obj, is break
                diff_obj = ParaRemove(cmd_name, base_para_obj["name"], True, DiffLevel.BREAK)
                # add flag to avoid duplicate compare
                self.diff_objs.append(diff_obj)
                continue
            cmp_para_obj["checked"] = True
            for prop in self.CHECKED_PARA_PROPERTY:
                if prop not in base_para_obj and prop not in cmp_para_obj:
                    continue
                if prop in base_para_obj and prop not in cmp_para_obj:
                    # prop dropped in new para obj
                    prop_value = base_para_obj[prop]
                    if prop in PARA_PROPERTY_REMOVE_WARN_LIST:
                        diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
                                                  False, DiffLevel.WARN)
                    elif prop in PARA_PROPERTY_REMOVE_BREAK_LIST:
                        diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
                                                  True, DiffLevel.BREAK)
                    else:
                        diff_obj = ParaPropRemove(cmd_name, base_para_obj["name"], prop, prop_value,
                                                  False, DiffLevel.INFO)
                    self.diff_objs.append(diff_obj)
                    continue
                if prop not in base_para_obj and prop in cmp_para_obj:
                    # prop added in new para obj
                    prop_value = cmp_para_obj[prop]
                    if prop in PARA_PROPERTY_ADD_WARN_LIST:
                        diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
                                               False, DiffLevel.WARN)
                    elif prop in PARA_PROPERTY_ADD_BREAK_LIST:
                        diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
                                               True, DiffLevel.BREAK)
                    else:
                        diff_obj = ParaPropAdd(cmd_name, base_para_obj["name"], prop, prop_value,
                                               False, DiffLevel.INFO)
                    self.diff_objs.append(diff_obj)
                    continue
                # prop exists in both new and old para obj, value needs to be checked
                base_val = base_para_obj[prop]
                cmp_val = cmp_para_obj[prop]
                self.__process_parameter_value_update(cmd_name, prop, base_para_obj, base_val, cmp_val)
                continue

        # check added parameter obj, if obj is required, then is break
        for cmp_para_obj in cmp_parameters:
            if "checked" in cmp_para_obj and cmp_para_obj["checked"]:
                continue
            para_name = cmp_para_obj["name"]
            required = cmp_para_obj.get("required", None)
            if required:
                diff_obj = ParaAdd(cmd_name, para_name, True, DiffLevel.BREAK)
            else:
                diff_obj = ParaAdd(cmd_name, para_name, False, DiffLevel.INFO)
            self.diff_objs.append(diff_obj)