def validate(self, positional, named, dryrun=False): if dryrun and any(is_list_var(arg) for arg in positional): return named = set(name for name, value in named) self._validate_no_multiple_values(positional, named, self._argspec) self._validate_positional_limits(positional, named, self._argspec) self._validate_no_mandatory_missing(positional, named, self._argspec) self._validate_no_named_only_missing(named, self._argspec) self._validate_no_extra_named(named, self._argspec)
def _split_run_kw_if_args(self, given_args, control_word, required_after): index = list(given_args).index(control_word) expr_and_call = given_args[:index] remaining = given_args[index + 1:] if not (self._validate_kw_call(expr_and_call) and self._validate_kw_call(remaining, required_after)): raise DataError("Invalid 'Run Keyword If' usage.") if is_list_var(expr_and_call[0]): return (), remaining return expr_and_call[1:], remaining
def _split_run_kw_if_args(self, given_args, control_word, required_after): index = list(given_args).index(control_word) expr_and_call = given_args[:index] remaining = given_args[index+1:] if not (self._validate_kw_call(expr_and_call) and self._validate_kw_call(remaining, required_after)): raise DataError("Invalid 'Run Keyword If' usage.") if is_list_var(expr_and_call[0]): return (), remaining return expr_and_call[1:], remaining
def _get_run_kw_if_calls(self, given_args): while 'ELSE IF' in given_args: kw_call, given_args = self._split_run_kw_if_args(given_args, 'ELSE IF', 2) yield kw_call if 'ELSE' in given_args: kw_call, else_call = self._split_run_kw_if_args(given_args, 'ELSE', 1) yield kw_call yield else_call elif self._validate_kw_call(given_args): expr, kw_call = given_args[0], given_args[1:] if not is_list_var(expr): yield kw_call
def _get_return_value(self, variables, return_): ret = self.return_value if not return_ else return_.return_value if not ret: return None contains_list_var = any(is_list_var(item) for item in ret) try: ret = variables.replace_list(ret) except DataError as err: raise DataError('Replacing variables from keyword return value ' 'failed: %s' % unicode(err)) if len(ret) != 1 or contains_list_var: return ret return ret[0]
def _is_varargs(self, arg): return is_list_var(arg)
def _validate_kw_call(self, kw_call, min_length=2): if len(kw_call) >= min_length: return True return any(is_list_var(item) for item in kw_call)
def validate(self, positional, named, dryrun=False): if dryrun and any(is_list_var(arg) for arg in positional): return self._validate_no_multiple_values(positional, named, self._argspec) self._validate_limits(positional, named, self._argspec) self._validate_no_mandatory_missing(positional, named, self._argspec)