예제 #1
0
    def __run_command(self, command, params):
        command = DataProvider.get_service_command(command)

        if ModuleManager.module_was_loaded('CORE'):
            for idx, param in enumerate(params):
                try:
                    CommonValidator.validate_name_variable(param)
                    CommonValidator.check_if_variable_exists(param)
                    variable = param[1:]
                    params[idx] = DataProvider.get_variable_value(variable)
                except Exception:
                    pass

        try:
            self.__validator.validate('command', (command.get_name(), params))
        except (Validator.ValidationError,
                CommonValidator.ValidationError) as exception:
            raise Interpreter.RunTimeError(
                f'Command: `{command.get_name()}`. ' + str(exception))

        param_types = command.get_param_types()
        for idx, param in enumerate(params):
            if inspect.isclass(param_types[idx]):
                params[idx] = param_types[idx](params[idx])
            else:
                break

        try:
            self.__validator.validate('command', (command.get_name(), params))
        except (Validator.ValidationError,
                CommonValidator.ValidationError) as exception:
            raise Interpreter.RunTimeError(
                f'Command: `{command.get_name()}`. ' + str(exception))

        if command.get_name() == Semantic.get_symbol('var'):
            new_command, *new_params = params[2:]
            self.__run_command(new_command, new_params)

            params = params[:2]
            params.append(DataProvider.get_returned_value())
            DataProvider.return_value(None)

        if command.get_name() == Semantic.get_symbol('import'):
            return

        try:
            command.get_exec_func()(*params)
        except CommonLogic.RunTimeError as exception:
            raise Interpreter.RunTimeError(f'Command: {command.get_name()}. '
                                           f'{str(exception)}')
예제 #2
0
 def get_variable(name: str):
     name = name.lstrip('%')
     return DataProvider.get_variable_value(name)