Index: tools/telemetry/telemetry/wpr/archive_info.py |
diff --git a/tools/telemetry/telemetry/wpr/archive_info.py b/tools/telemetry/telemetry/wpr/archive_info.py |
index d239a5bab395fc9eeb4c63f67c0a9a4b88d9d1a0..c94bd7ba6f6117f1a295484ed4df843cf52115e2 100644 |
--- a/tools/telemetry/telemetry/wpr/archive_info.py |
+++ b/tools/telemetry/telemetry/wpr/archive_info.py |
@@ -22,43 +22,22 @@ def AssertValidCloudStorageBucket(bucket): |
raise ValueError("Cloud storage privacy bucket %s is invalid" % bucket) |
+class ArchiveError(Exception): |
+ pass |
+ |
+ |
class WprArchiveInfo(object): |
- def __init__(self, file_path, data, bucket, ignore_archive=False): |
+ def __init__(self, file_path, data, bucket): |
AssertValidCloudStorageBucket(bucket) |
self._file_path = file_path |
self._base_dir = os.path.dirname(file_path) |
+ self._data = data |
self._bucket = bucket |
# Ensure directory exists. |
if not os.path.exists(self._base_dir): |
os.makedirs(self._base_dir) |
- # TODO(aiolos): We should take this out of init if we reduce the number of |
- # supported code paths/configs using archive_info when switching over to |
- # user_stories. |
- # Download all .wpr files. |
- if not ignore_archive: |
- if not self._bucket: |
- logging.warning('User story set in %s has no bucket specified, and ' |
- 'cannot be downloaded from cloud_storage.', file_path) |
- else: |
- for archive_path in data['archives']: |
- archive_path = self._WprFileNameToPath(archive_path) |
- try: |
- cloud_storage.GetIfChanged(archive_path, bucket) |
- except (cloud_storage.CredentialsError, |
- cloud_storage.PermissionError): |
- if os.path.exists(archive_path): |
- # If the archive exists, assume the user recorded their own and |
- # simply warn. |
- logging.warning('Need credentials to update WPR archive: %s', |
- archive_path) |
- else: |
- logging.error("You either aren't authenticated or don't have " |
- "permission to use the archives for this page set." |
- "\nYou may need to run gsutil config") |
- raise |
- |
# Map from the relative path (as it appears in the metadata file) of the |
# .wpr file to a list of user story names it supports. |
self._wpr_file_to_user_story_names = data['archives'] |
@@ -74,13 +53,47 @@ class WprArchiveInfo(object): |
self.temp_target_wpr_file_path = None |
@classmethod |
- def FromFile(cls, file_path, bucket, ignore_archive=False): |
+ def FromFile(cls, file_path, bucket): |
if os.path.exists(file_path): |
with open(file_path, 'r') as f: |
data = json.load(f) |
- return cls(file_path, data, bucket, ignore_archive=ignore_archive) |
- return cls(file_path, {'archives': {}}, bucket, |
- ignore_archive=ignore_archive) |
+ return cls(file_path, data, bucket) |
+ return cls(file_path, {'archives': {}}, bucket) |
+ |
+ def DownloadArchivesIfNeeded(self): |
+ """Downloads archives iff the Archive has a bucket parameter and the user |
+ has permission to access the bucket. |
+ |
+ Raises cloud storage Permissions or Credentials error when there is no |
+ local copy of the archive and the user doesn't have permission to access |
+ the archive's bucket. |
+ |
+ Warns when a bucket is not specified or when the user doesn't have |
+ permission to access the archive's bucket but a local copy of the archive |
+ exists. |
+ """ |
+ # Download all .wpr files. |
+ if self._data: |
+ return |
+ if not self._bucket: |
+ logging.warning('User story set in %s has no bucket specified, and ' |
+ 'cannot be downloaded from cloud_storage.', ) |
+ |
+ for archive_path in self._data['archives']: |
+ archive_path = self._WprFileNameToPath(archive_path) |
+ try: |
+ cloud_storage.GetIfChanged(archive_path, self._bucket) |
+ except (cloud_storage.CredentialsError, cloud_storage.PermissionError): |
+ if os.path.exists(archive_path): |
+ # If the archive exists, assume the user recorded their own and |
+ # simply warn. |
+ logging.warning('Need credentials to update WPR archive: %s', |
+ archive_path) |
+ else: |
+ logging.error("You either aren't authenticated or don't have " |
+ "permission to use the archives for this page set." |
+ "\nYou may need to run gsutil config.") |
+ raise |
def WprFilePathForUserStory(self, story): |
if self.temp_target_wpr_file_path: |