Index: tools/telemetry/catapult_base/dependency_manager/dependency_manager.py |
diff --git a/tools/telemetry/catapult_base/dependency_manager/dependency_manager.py b/tools/telemetry/catapult_base/dependency_manager/dependency_manager.py |
deleted file mode 100644 |
index 147c5c4f066b171005afef1809fa82f99fce9a97..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/catapult_base/dependency_manager/dependency_manager.py |
+++ /dev/null |
@@ -1,172 +0,0 @@ |
-# 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. |
- |
-import os |
-import sys |
- |
-sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname( |
- os.path.abspath(__file__))))) |
-from catapult_base.dependency_manager import base_config |
-from catapult_base.dependency_manager import exceptions |
- |
- |
-DEFAULT_TYPE = 'default' |
- |
- |
-class DependencyManager(object): |
- def __init__(self, configs, supported_config_types=None): |
- """Manages file dependencies found locally or in cloud_storage. |
- |
- Args: |
- configs: A list of instances of BaseConfig or it's subclasses, passed |
- in decreasing order of precedence. |
- supported_config_types: A list of whitelisted config_types. |
- No restrictions if None is specified. |
- |
- Raises: |
- ValueError: If |configs| is not a list of instances of BaseConfig or |
- its subclasses. |
- UnsupportedConfigFormatError: If supported_config_types is specified and |
- configs contains a config not in the supported config_types. |
- |
- Example: DependencyManager([config1, config2, config3]) |
- No requirements on the type of Config, and any dependencies that have |
- local files for the same platform will first look in those from |
- config1, then those from config2, and finally those from config3. |
- """ |
- if configs is None or type(configs) != list: |
- raise ValueError( |
- 'Must supply a list of config files to DependencyManager') |
- # self._lookup_dict is a dictionary with the following format: |
- # { dependency1: {platform1: dependency_info1, |
- # platform2: dependency_info2} |
- # dependency2: {platform1: dependency_info3, |
- # ...} |
- # ...} |
- # |
- # Where the dependencies and platforms are strings, and the |
- # dependency_info's are DependencyInfo instances. |
- self._lookup_dict = {} |
- self.supported_configs = supported_config_types or [] |
- for config in configs: |
- self._UpdateDependencies(config) |
- |
- def FetchPath(self, dependency, platform): |
- """Get a path to an executable for |dependency|, downloading as needed. |
- |
- A path to a default executable may be returned if a platform specific |
- version is not specified in the config(s). |
- |
- Args: |
- dependency: Name of the desired dependency, as given in the config(s) |
- used in this DependencyManager. |
- platform: Name of the platform the dependency will run on. Often of the |
- form 'os_architecture'. Must match those specified in the config(s) |
- used in this DependencyManager. |
- Returns: |
- A path to an executable of |dependency| that will run on |platform|, |
- downloading from cloud storage if needed. |
- |
- Raises: |
- NoPathFoundError: If a local copy of the executable cannot be found and |
- a remote path could not be downloaded from cloud_storage. |
- 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 remote file. |
- NotFoundError: If the remote file does not exist where expected in |
- cloud_storage. |
- ServerError: If an internal server error is hit while downloading the |
- remote file. |
- CloudStorageError: If another error occured while downloading the remote |
- path. |
- FileNotFoundError: If an attempted download was otherwise unsuccessful. |
- |
- """ |
- dependency_info = self._GetDependencyInfo(dependency, platform) |
- if not dependency_info: |
- raise exceptions.NoPathFoundError(dependency, platform) |
- path = dependency_info.GetLocalPath() |
- if not path or not os.path.exists(path): |
- path = dependency_info.GetRemotePath() |
- if not path or not os.path.exists(path): |
- raise exceptions.NoPathFoundError(dependency, platform) |
- return path |
- |
- def LocalPath(self, dependency, platform): |
- """Get a path to a locally stored executable for |dependency|. |
- |
- A path to a default executable may be returned if a platform specific |
- version is not specified in the config(s). |
- Will not download the executable. |
- |
- Args: |
- dependency: Name of the desired dependency, as given in the config(s) |
- used in this DependencyManager. |
- platform: Name of the platform the dependency will run on. Often of the |
- form 'os_architecture'. Must match those specified in the config(s) |
- used in this DependencyManager. |
- Returns: |
- A path to an executable for |dependency| that will run on |platform|. |
- |
- Raises: |
- NoPathFoundError: If a local copy of the executable cannot be found. |
- """ |
- dependency_info = self._GetDependencyInfo(dependency, platform) |
- if not dependency_info: |
- raise exceptions.NoPathFoundError(dependency, platform) |
- local_path = dependency_info.GetLocalPath() |
- if not local_path or not os.path.exists(local_path): |
- raise exceptions.NoPathFoundError(dependency, platform) |
- return local_path |
- |
- def _UpdateDependencies(self, config): |
- """Add the dependency information stored in |config| to this instance. |
- |
- Args: |
- config: An instances of BaseConfig or a subclasses. |
- |
- Raises: |
- UnsupportedConfigFormatError: If supported_config_types was specified |
- and config is not in the supported config_types. |
- """ |
- if not isinstance(config, base_config.BaseConfig): |
- raise ValueError('Must use a BaseConfig or subclass instance with the ' |
- 'DependencyManager.') |
- if (self.supported_configs and |
- config.GetConfigType() not in self.supported_configs): |
- raise exceptions.UnsupportedConfigFormatError(config.GetConfigType(), |
- config.config_path) |
- for dep_info in config.IterDependencyInfo(): |
- dependency = dep_info.dependency |
- platform = dep_info.platform |
- if dependency not in self._lookup_dict: |
- self._lookup_dict[dependency] = {} |
- if platform not in self._lookup_dict[dependency]: |
- self._lookup_dict[dependency][platform] = dep_info |
- else: |
- self._lookup_dict[dependency][platform].Update(dep_info) |
- |
- |
- def _GetDependencyInfo(self, dependency, platform): |
- """Get information for |dependency| on |platform|, or a default if needed. |
- |
- Args: |
- dependency: Name of the desired dependency, as given in the config(s) |
- used in this DependencyManager. |
- platform: Name of the platform the dependency will run on. Often of the |
- form 'os_architecture'. Must match those specified in the config(s) |
- used in this DependencyManager. |
- |
- Returns: The dependency_info for |dependency| on |platform| if it exists. |
- Or the default version of |dependency| if it exists, or None if neither |
- exist. |
- """ |
- if not self._lookup_dict or dependency not in self._lookup_dict: |
- return None |
- dependency_dict = self._lookup_dict[dependency] |
- device_type = platform |
- if not device_type in dependency_dict: |
- device_type = DEFAULT_TYPE |
- return dependency_dict.get(device_type) |
- |