19 from robot.utils import get_error_message, is_string
23 ENABLE_STRICT_ARGUMENT_VALIDATION =
False
28 def __init__(self, name=None, args=(), custom_patterns=
None):
40 def map(self, values):
42 return list(zip(self.
argsargs, values))
60 if not ENABLE_STRICT_ARGUMENT_VALIDATION:
64 for arg, value
in zip(self.
argsargs, values):
67 if not re.fullmatch(pattern, value):
68 raise ValueError(f
"Embedded argument '{arg}' got value '{value}' "
69 f
"that does not match custom pattern '{pattern}'.")
72 return self.
namename
is not None
79 _regexp_extension = re.compile(
r'(?<!\\)\(\?.+\)')
83 _regexp_group_start = re.compile(
r'(?<!\\)\((.*?)\)')
87 _escaped_curly = re.compile(
r'(\\+)([{}])')
91 _regexp_group_escape =
r'(?:\1)'
95 _default_pattern =
'.*?'
99 _variable_pattern =
r'\$\{[^\}]+\}'
105 for before, variable, string
in VariableIterator(string, identifiers=
'$'):
109 custom_patterns[name] = pattern
111 name_regexp.extend([re.escape(before), f
'({pattern})'])
112 name_regexp.extend([re.escape(string),
'$'])
113 name = self.
_compile_regexp_compile_regexp(name_regexp)
if args
else None
118 name, pattern = name.split(
':', 1)
123 return name, pattern, custom
131 pattern = formatter(pattern)
136 raise DataError(
'Regexp extensions are not allowed in embedded arguments.')
146 backslashes = len(match.group(1))
147 return '\\' * (backslashes // 2 * 2) + match.group(2)
154 return pattern.replace(
r'\\',
r'\\\\')
157 return f
'{pattern}|{self._variable_pattern}'
161 return re.compile(
''.join(pattern), re.IGNORECASE)
163 raise DataError(
"Compiling embedded arguments regexp failed: %s"
def _regexp_extensions_are_not_allowed(self, pattern)
def _make_groups_non_capturing(self, pattern)
def _add_automatic_variable_pattern(self, pattern)
def _escape_escapes(self, pattern)
def _compile_regexp(self, pattern)
def _unescape_curly_braces(self, pattern)
def _get_name_and_pattern(self, name)
string _regexp_group_escape
def _format_custom_regexp(self, pattern)
def validate(self, values)
def __init__(self, name=None, args=(), custom_patterns=None)
def get_error_message()
Returns error message of the last occurred exception.