def _eval_content_variables(self, content): """ replace all variables of string content with mapping value. @param (str) content @return (str) parsed content e.g. variable_mapping = { "var_1": "abc", "var_2": "def" } $var_1 => "abc" $var_1#XYZ => "abc#XYZ" /$var_1/$var_2/var3 => "/abc/def/var3" ${func($var_1, $var_2, xyz)} => "${func(abc, def, xyz)}" """ variables_list = extract_variables(content) for variable_name in variables_list: variable_value = self.get_bind_variable(variable_name) if "${}".format(variable_name) == content: # content is a variable content = variable_value else: # content contains one or several variables if not isinstance(variable_value, str): variable_value = builtin_str(variable_value) content = content.replace("${}".format(variable_name), variable_value, 1) return content
def get_timestamp(str_len=13): """ get timestamp string, length can only between 0 and 16 """ if isinstance(str_len, integer_types) and 0 < str_len < 17: return builtin_str(time.time()).replace(".", "")[:str_len] raise ParamsError("timestamp length can only between 0 and 16.")
def get_timestamp(str_len=13): """ get timestamp string, length can only between 0 and 16 """ if isinstance(str_len, integer_types) and 0 < str_len < 17: return builtin_str(time.time()).replace(".", "")[:str_len] raise ParamsError("timestamp length can only between 0 and 16.")
def parse_string_variables(content, variables_mapping): """ parse string content with variables mapping. Args: content (str): string content to be parsed. variables_mapping (dict): variables mapping. Returns: str: parsed string content. Examples: >>> content = "/api/users/$uid" >>> variables_mapping = {"$uid": 1000} >>> parse_string_variables(content, variables_mapping) "/api/users/1000" """ variables_list = extract_variables(content) for variable_name in variables_list: variable_value = get_mapping_variable(variable_name, variables_mapping) # TODO: replace variable label from $var to {{var}} if "${}".format(variable_name) == content: # content is a variable content = variable_value else: # content contains one or several variables if not isinstance(variable_value, str): variable_value = builtin_str(variable_value) content = content.replace("${}".format(variable_name), variable_value, 1) return content
def parse_string_variables(content, variables_mapping, functions_mapping): """ parse string content with variables mapping. Args: content (str): string content to be parsed. variables_mapping (dict): variables mapping. Returns: str: parsed string content. Examples: >>> content = "/api/users/$uid" >>> variables_mapping = {"$uid": 1000} >>> parse_string_variables(content, variables_mapping, {}) "/api/users/1000" """ variables_list = extract_variables(content) for variable_name in variables_list: variable_value = get_mapping_variable(variable_name, variables_mapping) if variable_name == "request" and isinstance(variable_value, dict) \ and "url" in variable_value and "method" in variable_value: # call setup_hooks action with $request for key, value in variable_value.items(): variable_value[key] = parse_data( value, variables_mapping, functions_mapping ) parsed_variable_value = variable_value elif "${}".format(variable_name) == variable_value: # variable_name = "token" # variables_mapping = {"token": "$token"} parsed_variable_value = variable_value else: parsed_variable_value = parse_data( variable_value, variables_mapping, functions_mapping, raise_if_variable_not_found=False ) variables_mapping[variable_name] = parsed_variable_value # TODO: replace variable label from $var to {{var}} if "${}".format(variable_name) == content: # content is a variable content = parsed_variable_value else: # content contains one or several variables if not isinstance(parsed_variable_value, str): parsed_variable_value = builtin_str(parsed_variable_value) content = content.replace( "${}".format(variable_name), parsed_variable_value, 1 ) return content
def get_timestamp(str_len=13): """ 获取时间戳字符串,长度只能在0到16之间 :param str_len: :return: """ if isinstance(str_len, integer_types) and 0 < str_len < 17: return builtin_str(time.time()).replace(".", "")[:str_len] raise ParamsError("时间戳长度只能在0到16之间.")
def substitute_variables_with_mapping(content, mapping): """ substitute variables in content with mapping e.g. @params content = { 'request': { 'url': '/api/users/$uid', 'headers': {'token': '$token'} } } mapping = {"$uid": 1000} @return { 'request': { 'url': '/api/users/1000', 'headers': {'token': '$token'} } } """ # TODO: refactor type check if isinstance(content, bool): return content if isinstance(content, (numeric_types, type)): return content if not content: return content if isinstance(content, (list, set, tuple)): return [ substitute_variables_with_mapping(item, mapping) for item in content ] if isinstance(content, dict): substituted_data = {} for key, value in content.items(): eval_key = substitute_variables_with_mapping(key, mapping) eval_value = substitute_variables_with_mapping(value, mapping) substituted_data[eval_key] = eval_value return substituted_data # content is in string format here for var, value in mapping.items(): if content == var: # content is a variable content = value else: if not isinstance(value, str): value = builtin_str(value) content = content.replace(var, value) return content
def substitute_variables(content, variables_mapping): """ substitute variables in content with variables_mapping Args: content (str/dict/list/numeric/bool/type): content to be substituted. variables_mapping (dict): variables mapping. Returns: substituted content. Examples: >>> content = { 'request': { 'url': '/api/users/$uid', 'headers': {'token': '$token'} } } >>> variables_mapping = {"$uid": 1000} >>> substitute_variables(content, variables_mapping) { 'request': { 'url': '/api/users/1000', 'headers': {'token': '$token'} } } """ if isinstance(content, (list, set, tuple)): return [ substitute_variables(item, variables_mapping) for item in content ] if isinstance(content, dict): substituted_data = {} for key, value in content.items(): eval_key = substitute_variables(key, variables_mapping) eval_value = substitute_variables(value, variables_mapping) substituted_data[eval_key] = eval_value return substituted_data if isinstance(content, basestring): # content is in string format here for var, value in variables_mapping.items(): if content == var: # content is a variable content = value else: if not isinstance(value, str): value = builtin_str(value) content = content.replace(var, value) return content
def endswith(check_value, expect_value): assert builtin_str(check_value).endswith(builtin_str(expect_value))
def startswith(check_value, expect_value): assert builtin_str(check_value).startswith(builtin_str(expect_value))
def string_equals(check_value, expect_value): assert builtin_str(check_value) == builtin_str(expect_value)
def string_equals(check_value, expect_value): assert builtin_str(check_value) == builtin_str(expect_value)
def endswith(check_value, expect_value): assert builtin_str(check_value).endswith(builtin_str(expect_value))
def startswith(check_value, expect_value): assert builtin_str(check_value).startswith(builtin_str(expect_value))