Coverage for lst_auto_rta/utils/string.py: 100%
27 statements
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-03 14:47 +0000
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-03 14:47 +0000
1from typing import List
4def split_string_around_template_var(string: str, var_identifier: str) -> List[str]:
5 """Return a list of substring in string, using `var_identifier{...}` as the delimiter, where ... can be anything
7 Parameters
8 ----------
9 string : str
10 Input string to split.
11 var_identifier : str
12 String used to indicate the start of a template variable. Eg "@" indicates that "@{t}" uses template variable `t`.
14 Returns
15 -------
16 List[str]
17 List of substrings in string, splitted using the template variables found with `var_identifier` as delimiter.
19 Examples
20 --------
21 >>> split_string_around_template_var("@{tel_id}_§{processIndex}_r0_dl1", "§")
22 ["@{tel_id}_", "_r0_dl1"]
23 """
24 # try to find delimiter
25 splitted_string = []
26 start = string.find(f"{var_identifier}" "{")
27 if start < 0:
28 return [string]
30 # if we found the start, find the end of the template variable
31 end = string.find("}", start)
32 if end < 0:
33 # could not find ending "}": there won't be any more template vars in string
34 return [string]
35 else:
36 # got a match: split start and run recusively on the remaining string
37 splitted_string.append(string[:start])
38 splitted_string.extend(split_string_around_template_var(string[end + 1 :], var_identifier))
39 return splitted_string
42def split_string_around_multiple_template_vars(string: str, var_identifiers: List[str]) -> List[str]:
43 """Returns a list of substring in string, using `var_identifier{...}` as the delimiter for all var_identifier
45 Parameters
46 ----------
47 string : str
48 String to split.
49 var_identifiers : List[str]
50 List of strings used to indicate the start of a template variable. For instance ["@", "$"] means that
51 "@{...}" and "${...}" will be used as delimiter to split the string.
53 Returns
54 -------
55 List[str]
56 List of substrings in string, splitted using the template variables found with `var_identifier` as delimiter.
57 """
58 # run split_string_around_template_var on the splitted string of previous delimiters
59 splitted_strings = [string]
60 for v in var_identifiers:
61 new_splitted_strings = []
62 for s in splitted_strings:
63 new_splitted_strings.extend(split_string_around_template_var(s, v))
64 splitted_strings = new_splitted_strings
65 return splitted_strings
68def substrings_in_string(string: str, substrings: List[str]) -> bool:
69 """Check if `substrings` appear in order in `string` (can be arbitrary content between substrings)
71 Parameters
72 ----------
73 string : str
74 String to check
75 substrings : List[str]
76 List of substrings to search in `string`
78 Returns
79 -------
80 bool
81 True if all sub-strings appear in order in `string`
82 """
84 for sub in substrings:
85 idx = string.find(sub)
86 if idx < 0:
87 return False
88 else:
89 string = string[idx + len(sub) :]
91 return True