Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1996)

Unified Diff: tools/telemetry/catapult_base/dependency_manager/dependency_info.py

Issue 1620023002: Revert of Remove catapult_base from telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perf_cb_move
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/catapult_base/dependency_manager/dependency_info.py
diff --git a/tools/telemetry/catapult_base/dependency_manager/dependency_info.py b/tools/telemetry/catapult_base/dependency_manager/dependency_info.py
new file mode 100644
index 0000000000000000000000000000000000000000..2821eded3ef33ec0a5633ba2b6a4bcc949a94734
--- /dev/null
+++ b/tools/telemetry/catapult_base/dependency_manager/dependency_info.py
@@ -0,0 +1,123 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+class DependencyInfo(object):
+ def __init__(self, dependency, platform, config_path, local_path_info=None,
+ cloud_storage_info=None):
+ """ Container for the information needed for each dependency/platform pair
+ in the dependency_manager.
+
+ Args:
+ Required:
+ dependency: Name of the dependency.
+ platform: Name of the platform to be run on.
+ config_path: Path to the config_path this information came from. Used
+ for error messages to improve debugging.
+
+ Optional:
+ local_paths: A list of paths to search in order for a local file.
+ cloud_storage_info: An instance of CloudStorageInfo.
+ """
+ # TODO(aiolos): update the above doc string for A) the usage of zip files
+ # and B) supporting lists of local_paths to be checked for most recently
+ # changed files.
+ if not dependency or not platform:
+ raise ValueError(
+ 'Must supply both a dependency and platform to DependencyInfo')
+
+ self._dependency = dependency
+ self._platform = platform
+ self._config_paths = [config_path]
+ self._local_path_info = local_path_info
+ self._cloud_storage_info = cloud_storage_info
+
+ def Update(self, new_dep_info):
+ """Add the information from |new_dep_info| to this instance.
+ """
+ self._config_paths.extend(new_dep_info.config_paths)
+ if (self.dependency != new_dep_info.dependency or
+ self.platform != new_dep_info.platform):
+ raise ValueError(
+ 'Cannot update DependencyInfo with different dependency or platform.'
+ 'Existing dep: %s, existing platform: %s. New dep: %s, new platform:'
+ '%s. Config_paths conflicting: %s' % (
+ self.dependency, self.platform, new_dep_info.dependency,
+ new_dep_info.platform, self.config_paths))
+ if new_dep_info.has_cloud_storage_info:
+ if self.has_cloud_storage_info:
+ raise ValueError(
+ 'Overriding cloud storage data is not allowed when updating a '
+ 'DependencyInfo. Conflict in dependency %s on platform %s in '
+ 'config_paths: %s.' % (self.dependency, self.platform,
+ self.config_paths))
+ else:
+ self._cloud_storage_info = new_dep_info._cloud_storage_info
+ if not self._local_path_info:
+ self._local_path_info = new_dep_info._local_path_info
+ else:
+ self._local_path_info.Update(new_dep_info._local_path_info)
+
+ def GetRemotePath(self):
+ """Gets the path to a downloaded version of the dependency.
+
+ May not download the file if it has already been downloaded.
+ Will unzip the downloaded file if specified in the config
+ via unzipped_hash.
+
+ Returns: A path to an executable that was stored in cloud_storage, or None
+ if not found.
+
+ Raises:
+ CredentialsError: If cloud_storage credentials aren't configured.
+ PermissionError: If cloud_storage credentials are configured, but not
+ with an account that has permission to download the needed file.
+ NotFoundError: If the needed file does not exist where expected in
+ cloud_storage or the downloaded zip file.
+ ServerError: If an internal server error is hit while downloading the
+ needed file.
+ CloudStorageError: If another error occured while downloading the remote
+ path.
+ FileNotFoundError: If the download was otherwise unsuccessful.
+ """
+ if self.has_cloud_storage_info:
+ return self._cloud_storage_info.GetRemotePath()
+ return None
+
+ def GetLocalPath(self):
+ """Gets the path to a local version of the dependency.
+
+ Returns: A path to a local dependency, or None if not found.
+
+ """
+ if self.has_local_path_info:
+ return self._local_path_info.GetLocalPath()
+ return None
+
+ @property
+ def dependency(self):
+ return self._dependency
+
+ @property
+ def platform(self):
+ return self._platform
+
+ @property
+ def config_paths(self):
+ return self._config_paths
+
+ @property
+ def local_path_info(self):
+ return self._local_path_info
+
+ @property
+ def has_cloud_storage_info(self):
+ return bool(self._cloud_storage_info)
+
+ @property
+ def has_local_path_info(self):
+ return bool(self._local_path_info)
+
+ @property
+ def cloud_storage_info(self):
+ return self._cloud_storage_info

Powered by Google App Engine
This is Rietveld 408576698