源碼結構目錄
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iN4YDNyIGOkNGNiJjY5EGOxYzXzQDMwADMwEzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
可以看到此子產品定義了4個屬性和12個函數,我們依次來講解
屬性源碼分析
# 比對http://或https://
absolute_http_url_regexp = re.compile(r"^https?://", re.I)
# 使用$$轉義$符号
dolloar_regex_compile = re.compile(r"\$\$")
# 變量符号, e.g. ${var} or $var
variable_regex_compile = re.compile(r"\$\{(\w+)\}|\$(\w+)")
# 函數符号, e.g. ${func1($var_1, $var_3)}
function_regex_compile = re.compile(r"\$\{(\w+)\(([\$\w\.\-/\s=,]*)\)\}")
函數源碼分析
parse_string_value
作用:将字元串轉換為數字
"123" => 123
"12.2" => 12.3
"abc" => "abc"
"$var" => "$var"
build_url
作用:在url前面加上
base_url
,除非它已經是絕對url
regex_findall_variables
作用:從内容中提取所有變量名,格式為
$variable
Examples:
>>> regex_findall_variables("$variable")
["variable"]
>>> regex_findall_variables("/blog/$postid")
["postid"]
>>> regex_findall_variables("/$var1/$var2")
["var1", "var2"]
>>> regex_findall_variables("abc")
[]
regex_findall_functions
作用:從字元串内容中提取所有函數,格式為
${fun()}
Examples:
>>> regex_findall_functions("${func(5)}")
["func(5)"]
>>> regex_findall_functions("${func(a=1, b=2)}")
["func(a=1, b=2)"]
>>> regex_findall_functions("/api/1000?_t=${get_timestamp()}")
["get_timestamp()"]
>>> regex_findall_functions("/api/${add(1, 2)}")
["add(1, 2)"]
>>> regex_findall_functions("/api/${add(1, 2)}?_t=${get_timestamp()}")
["add(1, 2)", "get_timestamp()"]
extract_variables
作用:遞歸提取内容中的所有變量
parse_function_params
作用:将函數參數解析到
args
和
kwargs
Examples:
>>> parse_function_params("")
{'args': [], 'kwargs': {}}
>>> parse_function_params("5")
{'args': [5], 'kwargs': {}}
>>> parse_function_params("1, 2")
{'args': [1, 2], 'kwargs': {}}
>>> parse_function_params("a=1, b=2")
{'args': [], 'kwargs': {'a': 1, 'b': 2}}
>>> parse_function_params("1, 2, a=3, b=4")
{'args': [1, 2], 'kwargs': {'a':3, 'b':4}}
get_mapping_variable
作用:擷取映射變量
get_mapping_function
作用:擷取映射函數
parse_string
作用:将帶有變量和方法的字元串,轉為字元串實際内容
Examples:
>>> raw_string = "abc${add_one($num)}def"
>>> variables_mapping = {"num": 3}
>>> functions_mapping = {"add_one": lambda x: x + 1}
>>> parse_string(raw_string, variables_mapping, functions_mapping)
"abc4def"
parse_data
作用:封裝
parse_string
提供給外部調用
parse_variables_mapping
作用:解析變量映射
parse_parameters
作用:解析參數,參數有3種形式
1. list清單:
e.g. ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
2.csv檔案上傳:
"${parameterize(account.csv)}"
3.從
debugtalk.py
函數中生成:
${gen_app_version()}