def pr_builds(path): """Return {job: [(build, {started.json}, {finished.json})]} for each job under gcs path.""" jobs_dirs_fut = gcs_async.listdirs(path) def base(path): return os.path.basename(os.path.dirname(path)) jobs_futures = [(job, gcs_async.listdirs(job)) for job in jobs_dirs_fut.get_result()] futures = [] for job, builds_fut in jobs_futures: for build in builds_fut.get_result(): futures.append([ base(job), base(build), gcs_async.read('/%sstarted.json' % build), gcs_async.read('/%sfinished.json' % build)]) futures.sort(key=lambda (job, build, s, f): (job, view_base.pad_numbers(build)), reverse=True) jobs = {} for job, build, started_fut, finished_fut in futures: started, finished = view_build.normalize_metadata(started_fut, finished_fut) jobs.setdefault(job, []).append((build, started, finished)) return jobs
def pr_builds(path): """Return {job: [(build, {started.json}, {finished.json})]} for each job under gcs path.""" jobs_dirs_fut = gcs_async.listdirs(path) def base(path): return os.path.basename(os.path.dirname(path)) jobs_futures = [(job, gcs_async.listdirs(job)) for job in jobs_dirs_fut.get_result()] futures = [] for job, builds_fut in jobs_futures: for build in builds_fut.get_result(): futures.append([ base(job), base(build), gcs_async.read('/%sstarted.json' % build), gcs_async.read('/%sfinished.json' % build)]) futures.sort(key=lambda (job, build, s, f): (job, view_base.pad_numbers(build)), reverse=True) jobs = {} for job, build, started_fut, finished_fut in futures: started = started_fut.get_result() finished = finished_fut.get_result() if started is not None: started = json.loads(started) if finished is not None: finished = json.loads(finished) jobs.setdefault(job, []).append((build, started, finished)) return jobs
def test_listdirs(self): install_handler(self.testbed.get_stub('urlfetch'), {'foo/': ['bar', 'baz']}, base='base/') self.assertEqual( gcs_async.listdirs('buck/base/foo/').get_result(), ['buck/base/foo/bar/', 'buck/base/foo/baz/'])
def pr_builds(path, pr): """ Get information for all builds run by a PR. Args: pr: the PR number Returns: A dictionary of {job: [(build_number, started_json, finished.json)]} """ jobs_dirs_fut = gcs_async.listdirs('%s/%s%s' % (PR_PREFIX, path, pr)) print '%s/%s%s' % (PR_PREFIX, path, pr) def base(path): return os.path.basename(os.path.dirname(path)) jobs_futures = [(job, gcs_async.listdirs(job)) for job in jobs_dirs_fut.get_result()] futures = [] for job, builds_fut in jobs_futures: for build in builds_fut.get_result(): futures.append([ base(job), base(build), gcs_async.read('/%sstarted.json' % build), gcs_async.read('/%sfinished.json' % build) ]) futures.sort(key=lambda (job, build, s, f): (job, view_base.pad_numbers(build)), reverse=True) jobs = {} for job, build, started_fut, finished_fut in futures: started = started_fut.get_result() finished = finished_fut.get_result() if started is not None: started = json.loads(started) if finished is not None: finished = json.loads(finished) jobs.setdefault(job, []).append((build, started, finished)) return jobs
def pr_builds(path, pr): """ Get information for all builds run by a PR. Args: pr: the PR number Returns: A dictionary of {job: [(build_number, started_json, finished.json)]} """ jobs_dirs_fut = gcs_async.listdirs('%s/%s%s' % (PR_PREFIX, path, pr)) print '%s/%s%s' % (PR_PREFIX, path, pr) def base(path): return os.path.basename(os.path.dirname(path)) jobs_futures = [(job, gcs_async.listdirs(job)) for job in jobs_dirs_fut.get_result()] futures = [] for job, builds_fut in jobs_futures: for build in builds_fut.get_result(): futures.append([ base(job), base(build), gcs_async.read('/%sstarted.json' % build), gcs_async.read('/%sfinished.json' % build)]) futures.sort(key=lambda (job, build, s, f): (job, view_base.pad_numbers(build)), reverse=True) jobs = {} for job, build, started_fut, finished_fut in futures: started = started_fut.get_result() finished = finished_fut.get_result() if started is not None: started = json.loads(started) if finished is not None: finished = json.loads(finished) jobs.setdefault(job, []).append((build, started, finished)) return jobs
def test_listdirs(self): install_handler(self.testbed.get_stub('urlfetch'), {'foo/': ['bar', 'baz']}, base='base/') self.assertEqual(gcs_async.listdirs('buck/base/foo/').get_result(), ['buck/base/foo/bar/', 'buck/base/foo/baz/'])