OLD | NEW |
(Empty) | |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 class DependencyInfo(object): |
| 6 def __init__(self, dependency, platform, config_path, local_path_info=None, |
| 7 cloud_storage_info=None): |
| 8 """ Container for the information needed for each dependency/platform pair |
| 9 in the dependency_manager. |
| 10 |
| 11 Args: |
| 12 Required: |
| 13 dependency: Name of the dependency. |
| 14 platform: Name of the platform to be run on. |
| 15 config_path: Path to the config_path this information came from. Used |
| 16 for error messages to improve debugging. |
| 17 |
| 18 Optional: |
| 19 local_paths: A list of paths to search in order for a local file. |
| 20 cloud_storage_info: An instance of CloudStorageInfo. |
| 21 """ |
| 22 # TODO(aiolos): update the above doc string for A) the usage of zip files |
| 23 # and B) supporting lists of local_paths to be checked for most recently |
| 24 # changed files. |
| 25 if not dependency or not platform: |
| 26 raise ValueError( |
| 27 'Must supply both a dependency and platform to DependencyInfo') |
| 28 |
| 29 self._dependency = dependency |
| 30 self._platform = platform |
| 31 self._config_paths = [config_path] |
| 32 self._local_path_info = local_path_info |
| 33 self._cloud_storage_info = cloud_storage_info |
| 34 |
| 35 def Update(self, new_dep_info): |
| 36 """Add the information from |new_dep_info| to this instance. |
| 37 """ |
| 38 self._config_paths.extend(new_dep_info.config_paths) |
| 39 if (self.dependency != new_dep_info.dependency or |
| 40 self.platform != new_dep_info.platform): |
| 41 raise ValueError( |
| 42 'Cannot update DependencyInfo with different dependency or platform.' |
| 43 'Existing dep: %s, existing platform: %s. New dep: %s, new platform:' |
| 44 '%s. Config_paths conflicting: %s' % ( |
| 45 self.dependency, self.platform, new_dep_info.dependency, |
| 46 new_dep_info.platform, self.config_paths)) |
| 47 if new_dep_info.has_cloud_storage_info: |
| 48 if self.has_cloud_storage_info: |
| 49 raise ValueError( |
| 50 'Overriding cloud storage data is not allowed when updating a ' |
| 51 'DependencyInfo. Conflict in dependency %s on platform %s in ' |
| 52 'config_paths: %s.' % (self.dependency, self.platform, |
| 53 self.config_paths)) |
| 54 else: |
| 55 self._cloud_storage_info = new_dep_info._cloud_storage_info |
| 56 if not self._local_path_info: |
| 57 self._local_path_info = new_dep_info._local_path_info |
| 58 else: |
| 59 self._local_path_info.Update(new_dep_info._local_path_info) |
| 60 |
| 61 def GetRemotePath(self): |
| 62 """Gets the path to a downloaded version of the dependency. |
| 63 |
| 64 May not download the file if it has already been downloaded. |
| 65 Will unzip the downloaded file if specified in the config |
| 66 via unzipped_hash. |
| 67 |
| 68 Returns: A path to an executable that was stored in cloud_storage, or None |
| 69 if not found. |
| 70 |
| 71 Raises: |
| 72 CredentialsError: If cloud_storage credentials aren't configured. |
| 73 PermissionError: If cloud_storage credentials are configured, but not |
| 74 with an account that has permission to download the needed file. |
| 75 NotFoundError: If the needed file does not exist where expected in |
| 76 cloud_storage or the downloaded zip file. |
| 77 ServerError: If an internal server error is hit while downloading the |
| 78 needed file. |
| 79 CloudStorageError: If another error occured while downloading the remote |
| 80 path. |
| 81 FileNotFoundError: If the download was otherwise unsuccessful. |
| 82 """ |
| 83 if self.has_cloud_storage_info: |
| 84 return self._cloud_storage_info.GetRemotePath() |
| 85 return None |
| 86 |
| 87 def GetLocalPath(self): |
| 88 """Gets the path to a local version of the dependency. |
| 89 |
| 90 Returns: A path to a local dependency, or None if not found. |
| 91 |
| 92 """ |
| 93 if self.has_local_path_info: |
| 94 return self._local_path_info.GetLocalPath() |
| 95 return None |
| 96 |
| 97 @property |
| 98 def dependency(self): |
| 99 return self._dependency |
| 100 |
| 101 @property |
| 102 def platform(self): |
| 103 return self._platform |
| 104 |
| 105 @property |
| 106 def config_paths(self): |
| 107 return self._config_paths |
| 108 |
| 109 @property |
| 110 def local_path_info(self): |
| 111 return self._local_path_info |
| 112 |
| 113 @property |
| 114 def has_cloud_storage_info(self): |
| 115 return bool(self._cloud_storage_info) |
| 116 |
| 117 @property |
| 118 def has_local_path_info(self): |
| 119 return bool(self._local_path_info) |
| 120 |
| 121 @property |
| 122 def cloud_storage_info(self): |
| 123 return self._cloud_storage_info |
OLD | NEW |