Index: gm/rebaseline_server/download_actuals.py |
diff --git a/gm/rebaseline_server/download_actuals.py b/gm/rebaseline_server/download_actuals.py |
index 636958be6b545c2251628a3b0f65f2d2db0c25d1..96ea74cdfae0df66f9706f514e7a7b715d5ecd4f 100755 |
--- a/gm/rebaseline_server/download_actuals.py |
+++ b/gm/rebaseline_server/download_actuals.py |
@@ -105,8 +105,6 @@ class Download(object): |
test_name=test, hash_type=hash_type, hash_digest=hash_digest, |
gm_actuals_root_url=self._gm_actuals_root_url) |
dest_path = os.path.join(dest_dir, config, test + '.png') |
- # TODO(epoger): To speed this up, we should only download files that |
- # we don't already have on local disk. |
epoger
2014/06/03 20:11:03
This comment turns out to be misleading... downloa
|
copy_contents(source_url=source_url, dest_path=dest_path, |
create_subdirs_if_needed=True) |
@@ -162,12 +160,33 @@ def copy_contents(source_url, dest_path, create_subdirs_if_needed=False): |
shutil.copyfileobj(fsrc=source_handle, fdst=dest_handle) |
+def gcs_download_file(source_bucket, source_path, dest_path, |
+ create_subdirs_if_needed=False): |
+ """ Downloads a single file from Google Cloud Storage to local disk. |
+ |
+ EPOGER: move into a gcs utility module? |
epoger
2014/06/03 20:11:03
I think I should move gcs_download_file() and gcs_
borenet
2014/06/03 20:27:47
Yes, that SGTM, but what's the difference then bet
epoger
2014/06/03 20:39:04
In this case I went with "gcs_utils.py" because (a
|
+ |
+ Args: |
+ source_bucket: GCS bucket to download the file from |
+ source_path: full path (Posix-style) within that bucket |
+ dest_path: full path (local-OS-style) on local disk to copy the file to |
+ create_subdirs_if_needed: boolean; whether to create subdirectories as |
+ needed to create dest_path |
+ """ |
+ source_http_url = posixpath.join( |
+ 'http://storage.googleapis.com', source_bucket, source_path) |
+ copy_contents(source_url=source_http_url, dest_path=dest_path, |
+ create_subdirs_if_needed=create_subdirs_if_needed) |
+ |
+ |
def gcs_list_bucket_contents(bucket, subdir=None): |
""" Returns files in the Google Cloud Storage bucket as a (dirs, files) tuple. |
Uses the API documented at |
https://developers.google.com/storage/docs/json_api/v1/objects/list |
+ EPOGER: move into a gcs utility module? |
+ |
Args: |
bucket: name of the Google Storage bucket |
subdir: directory within the bucket to list, or None for root directory |
@@ -199,6 +218,17 @@ def gcs_list_bucket_contents(bucket, subdir=None): |
return (dirs, files) |
+def get_builders_list(summaries_bucket=GM_SUMMARIES_BUCKET): |
+ """ Returns the list of builders we have actual results for. |
+ |
+ Args: |
+ summaries_bucket: Google Cloud Storage bucket containing the summary |
+ JSON files |
+ """ |
+ dirs, _ = gcs_list_bucket_contents(bucket=GM_SUMMARIES_BUCKET) |
+ return dirs |
+ |
+ |
def main(): |
parser = optparse.OptionParser() |
required_params = [] |
@@ -234,8 +264,7 @@ def main(): |
(params, remaining_args) = parser.parse_args() |
if params.list_builders: |
- dirs, _ = gcs_list_bucket_contents(bucket=GM_SUMMARIES_BUCKET) |
- print '\n'.join(dirs) |
+ print '\n'.join(get_builders_list()) |
return |
# Make sure all required options were set, |