| #!/usr/bin/env python |
| # |
| # Copyright 2024 Google LLC |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| |
| '''Simple tool for finding tasks in tasks.json which match search terms. |
| |
| Example usage: |
| |
| Find tasks with dimension "os:Mac-14.5" |
| $ find_tasks.py ^os:Mac-14.5$ |
| |
| Find tasks with "ANGLE" in dimensions or name: |
| $ find_tasks.py ANGLE |
| |
| Find tasks with dimension "os:Mac-14.5" and "ANGLE" in dimensions or name: |
| $ find_tasks.py ^os:Mac-14.5$ ANGLE |
| ''' |
| |
| |
| import json |
| import os |
| import re |
| import sys |
| |
| |
| # match_dimensions returns true iff the given search term matches at least one |
| # of the task's dimensions. |
| def match_dimensions(term, task): |
| for dim in task['dimensions']: |
| if re.search(term, dim): |
| return True |
| return False |
| |
| |
| # match_name returns true iff the given search term matches the task's name. |
| def match_name(term, name): |
| return re.search(term, name) |
| |
| |
| # match_task returns true iff all search terms match some part of the task. |
| def match_task(terms, name, task): |
| for term in terms: |
| if not (match_name(term, name) |
| or match_dimensions(term, task)): |
| return False |
| return True |
| |
| |
| def main(terms): |
| dir = os.path.dirname(os.path.realpath(__file__)) |
| tasks_json = os.path.join(dir, 'tasks.json') |
| with open(tasks_json) as f: |
| taskCfg = json.load(f) |
| for name, task in taskCfg['tasks'].items(): |
| if match_task(terms, name, task): |
| print(name) |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |