1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2024 Google LLC 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker'''Simple tool for finding tasks in tasks.json which match search terms. 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard WorkerExample usage: 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard WorkerFind tasks with dimension "os:Mac-14.5" 14*c8dee2aaSAndroid Build Coastguard Worker$ find_tasks.py ^os:Mac-14.5$ 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard WorkerFind tasks with "ANGLE" in dimensions or name: 17*c8dee2aaSAndroid Build Coastguard Worker$ find_tasks.py ANGLE 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard WorkerFind tasks with dimension "os:Mac-14.5" and "ANGLE" in dimensions or name: 20*c8dee2aaSAndroid Build Coastguard Worker$ find_tasks.py ^os:Mac-14.5$ ANGLE 21*c8dee2aaSAndroid Build Coastguard Worker''' 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Workerimport json 25*c8dee2aaSAndroid Build Coastguard Workerimport os 26*c8dee2aaSAndroid Build Coastguard Workerimport re 27*c8dee2aaSAndroid Build Coastguard Workerimport sys 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker# match_dimensions returns true iff the given search term matches at least one 31*c8dee2aaSAndroid Build Coastguard Worker# of the task's dimensions. 32*c8dee2aaSAndroid Build Coastguard Workerdef match_dimensions(term, task): 33*c8dee2aaSAndroid Build Coastguard Worker for dim in task['dimensions']: 34*c8dee2aaSAndroid Build Coastguard Worker if re.search(term, dim): 35*c8dee2aaSAndroid Build Coastguard Worker return True 36*c8dee2aaSAndroid Build Coastguard Worker return False 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker# match_name returns true iff the given search term matches the task's name. 40*c8dee2aaSAndroid Build Coastguard Workerdef match_name(term, name): 41*c8dee2aaSAndroid Build Coastguard Worker return re.search(term, name) 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker# match_task returns true iff all search terms match some part of the task. 45*c8dee2aaSAndroid Build Coastguard Workerdef match_task(terms, name, task): 46*c8dee2aaSAndroid Build Coastguard Worker for term in terms: 47*c8dee2aaSAndroid Build Coastguard Worker if not (match_name(term, name) 48*c8dee2aaSAndroid Build Coastguard Worker or match_dimensions(term, task)): 49*c8dee2aaSAndroid Build Coastguard Worker return False 50*c8dee2aaSAndroid Build Coastguard Worker return True 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker 53*c8dee2aaSAndroid Build Coastguard Workerdef main(terms): 54*c8dee2aaSAndroid Build Coastguard Worker dir = os.path.dirname(os.path.realpath(__file__)) 55*c8dee2aaSAndroid Build Coastguard Worker tasks_json = os.path.join(dir, 'tasks.json') 56*c8dee2aaSAndroid Build Coastguard Worker with open(tasks_json) as f: 57*c8dee2aaSAndroid Build Coastguard Worker taskCfg = json.load(f) 58*c8dee2aaSAndroid Build Coastguard Worker for name, task in taskCfg['tasks'].items(): 59*c8dee2aaSAndroid Build Coastguard Worker if match_task(terms, name, task): 60*c8dee2aaSAndroid Build Coastguard Worker print(name) 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Workerif __name__ == '__main__': 64*c8dee2aaSAndroid Build Coastguard Worker main(sys.argv[1:]) 65