19 from robot.utils import (get_env_var, get_env_vars, get_error_message, normalize,
22 from .evaluation
import evaluate_expression
23 from .notfound
import variable_not_found
24 from .search
import search_variable, VariableMatch
45 if match.identifier
in finder.identifiers:
46 result = finder.find(name)
47 if result
is not NOT_FOUND:
52 if isinstance(variable, VariableMatch):
55 if not match.is_variable()
or match.items:
56 raise DataError(
"Invalid variable name '%s'." % variable)
67 return self.
_store_store.get(name, NOT_FOUND)
75 for converter
in self.
_get_int_get_int, float:
77 return converter(number)
83 bases = {
'0b': 2,
'0o': 8,
'0x': 16}
84 if number.startswith(tuple(bases)):
85 return int(number[2:], bases[number[:2]])
91 empty =
NormalizedDict({
'${EMPTY}':
'',
'@{EMPTY}': (),
'&{EMPTY}': {}}, ignore=
'_')
94 return self.
emptyempty.get(name, NOT_FOUND)
105 if not base
or base[0] !=
'{' or base[-1] !=
'}':
109 except DataError
as err:
110 raise VariableError(
"Resolving variable '%s' failed: %s" % (name, err))
118 _match_extended = re.compile(
r'''
119 (.+?) # base name (group 1)
120 ([^\s\w].+) # extended part (group 2)
121 ''', re.UNICODE|re.VERBOSE).match
130 base_name, extended = match.groups()
133 except DataError
as err:
135 % (name, err.message))
137 return eval(
'_BASE_VAR_' + extended, {
'_BASE_VAR_': variable})
147 var_name, has_default, default_value = name[2:-1].partition(
'=')
149 if value
is not None:
154 "Environment variable '%s' not found." % name)
Used when variable does not exist.
Custom dictionary implementation automatically normalizing keys.
def __init__(self, finder)
def __init__(self, variables)
def _get_int(self, number)
def __init__(self, store)
def _get_match(self, variable)
def __init__(self, variable_store)
def get_error_message()
Returns error message of the last occurred exception.
def normalize(string, ignore=(), caseless=True, spaceless=True)
Normalizes given string according to given spec.
def get_env_var(name, default=None)
def get_env_vars(upper=os.sep !='/')
def evaluate_expression(expression, variable_store, modules=None, namespace=None)
def variable_not_found(name, candidates, message=None, deco_braces=True)
Raise DataError for missing variable name.
def search_variable(string, identifiers='$@&% *', ignore_errors=False)