| 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
|
|
|