|
1 | 1 | import gzip |
2 | 2 | import json |
| 3 | +import re |
3 | 4 |
|
4 | 5 | import requests |
5 | 6 | import yaml |
@@ -224,29 +225,45 @@ def filter_out_by_hardware(test, filter_data): |
224 | 225 | if "hardware" not in filter_data: |
225 | 226 | return False |
226 | 227 |
|
227 | | - hardware_list = filter_data["hardware"] |
228 | | - if test["environment_misc"]["platform"] in hardware_list: |
| 228 | + hardware_list_re = re.compile(filter_data["hardware"]) |
| 229 | + if hardware_list_re.match(test["environment_misc"]["platform"]): |
229 | 230 | return False |
230 | 231 |
|
231 | 232 | if test["environment_compatible"]: |
232 | 233 | for compatible in test["environment_compatible"]: |
233 | | - if compatible in hardware_list: |
| 234 | + if hardware_list_re.match(compatible): |
234 | 235 | return False |
235 | 236 |
|
236 | 237 | return True |
237 | 238 |
|
238 | 239 |
|
239 | 240 | def filter_out_by_test(test, filter_data): |
240 | 241 | # Check if the test name is in the list |
241 | | - test_list = filter_data["test"] |
242 | | - if test["path"] in test_list: |
| 242 | + test_list_re = re.compile(filter_data["test"]) |
| 243 | + if test_list_re.match(test["path"]): |
243 | 244 | return False |
244 | 245 |
|
245 | 246 | return True |
246 | 247 |
|
247 | 248 |
|
248 | | -def cmd_tests(data, id, download_logs, status_filter, filter, count, use_json): |
| 249 | +def filter_array2regex(filter_array): |
| 250 | + return f"^({'|'.join(filter_array)})$".replace(".", r"\.").replace("*", ".*") |
| 251 | + |
| 252 | + |
| 253 | +def parse_filter_file(filter): |
249 | 254 | filter_data = yaml.safe_load(filter) if filter else None |
| 255 | + if filter_data is None: |
| 256 | + return None |
| 257 | + parsed_filter = {} |
| 258 | + if "hardware" in filter_data: |
| 259 | + parsed_filter["hardware"] = filter_array2regex(filter_data["hardware"]) |
| 260 | + if "test" in filter_data: |
| 261 | + parsed_filter["test"] = filter_array2regex(filter_data["test"]) |
| 262 | + return parsed_filter |
| 263 | + |
| 264 | + |
| 265 | +def cmd_tests(data, id, download_logs, status_filter, filter, count, use_json): |
| 266 | + filter_data = parse_filter_file(filter) |
250 | 267 | filtered_tests = 0 |
251 | 268 | tests = [] |
252 | 269 | for test in data: |
|
0 commit comments