 Chromium Code Reviews
 Chromium Code Reviews Issue 12685010:
  Added gsutil/gslib to depot_tools/third_party  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
    
  
    Issue 12685010:
  Added gsutil/gslib to depot_tools/third_party  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master| OLD | NEW | 
|---|---|
| (Empty) | |
| 1 #!/usr/bin/env python | |
| 2 # coding=utf8 | |
| 3 # Copyright 2011 Google Inc. All Rights Reserved. | |
| 4 # | |
| 5 # Licensed under the Apache License, Version 2.0 (the "License"); | |
| 6 # you may not use this file except in compliance with the License. | |
| 7 # You may obtain a copy of the License at | |
| 8 # | |
| 9 # http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 # | |
| 11 # Unless required by applicable law or agreed to in writing, software | |
| 12 # distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 # See the License for the specific language governing permissions and | |
| 15 # limitations under the License. | |
| 16 | |
| 17 """Class that runs a named gsutil command.""" | |
| 18 | |
| 19 import boto | |
| 20 import os | |
| 21 | |
| 22 from boto.storage_uri import BucketStorageUri | |
| 23 from gslib.command import Command | |
| 24 from gslib.command import COMMAND_NAME | |
| 25 from gslib.command import COMMAND_NAME_ALIASES | |
| 26 from gslib.exception import CommandException | |
| 27 | |
| 28 | |
| 29 class CommandRunner(object): | |
| 30 | |
| 31 def __init__(self, gsutil_bin_dir, boto_lib_dir, config_file_list, | |
| 32 gsutil_ver, bucket_storage_uri_class=BucketStorageUri): | |
| 33 """ | |
| 34 Args: | |
| 35 gsutil_bin_dir: Bin dir from which gsutil is running. | |
| 36 boto_lib_dir: Lib dir where boto runs. | |
| 37 config_file_list: Config file list returned by _GetBotoConfigFileList(). | |
| 38 gsutil_ver: Version string of currently running gsutil command. | |
| 39 bucket_storage_uri_class: Class to instantiate for cloud StorageUris. | |
| 40 Settable for testing/mocking. | |
| 41 """ | |
| 42 self.gsutil_bin_dir = gsutil_bin_dir | |
| 43 self.boto_lib_dir = boto_lib_dir | |
| 44 self.config_file_list = config_file_list | |
| 45 self.gsutil_ver = gsutil_ver | |
| 46 self.bucket_storage_uri_class = bucket_storage_uri_class | |
| 47 self.command_map = self._LoadCommandMap() | |
| 48 | |
| 49 def _LoadCommandMap(self): | |
| 50 """Returns dict mapping each command_name to implementing class.""" | |
| 51 # Walk gslib/commands and find all commands. | |
| 52 commands_dir = os.path.join(self.gsutil_bin_dir, 'gslib', 'commands') | |
| 
Ryan Tseng
2013/03/15 01:52:53
gslib is assumbed to be nested under gsutil
 
M-A Ruel
2013/03/18 18:28:40
Lovely. :)
 | |
| 53 for f in os.listdir(commands_dir): | |
| 54 # Handles no-extension files, etc. | |
| 55 (module_name, ext) = os.path.splitext(f) | |
| 56 if ext == '.py': | |
| 57 __import__('gslib.commands.%s' % module_name) | |
| 58 command_map = {} | |
| 59 # Only include Command subclasses in the dict. | |
| 60 for command in Command.__subclasses__(): | |
| 61 command_map[command.command_spec[COMMAND_NAME]] = command | |
| 62 for command_name_aliases in command.command_spec[COMMAND_NAME_ALIASES]: | |
| 63 command_map[command_name_aliases] = command | |
| 64 return command_map | |
| 65 | |
| 66 def RunNamedCommand(self, command_name, args=None, headers=None, debug=0, | |
| 67 parallel_operations=False, test_method=None): | |
| 68 """Runs the named command. Used by gsutil main, commands built atop | |
| 69 other commands, and tests . | |
| 70 | |
| 71 Args: | |
| 72 command_name: The name of the command being run. | |
| 73 args: Command-line args (arg0 = actual arg, not command name ala bash). | |
| 74 headers: Dictionary containing optional HTTP headers to pass to boto. | |
| 75 debug: Debug level to pass in to boto connection (range 0..3). | |
| 76 parallel_operations: Should command operations be executed in parallel? | |
| 77 test_method: Optional general purpose method for testing purposes. | |
| 78 Application and semantics of this method will vary by | |
| 79 command and test type. | |
| 80 | |
| 81 Raises: | |
| 82 CommandException: if errors encountered. | |
| 83 """ | |
| 84 if not args: | |
| 85 args = [] | |
| 86 | |
| 87 # Include api_version header in all commands. | |
| 88 api_version = boto.config.get_value('GSUtil', 'default_api_version', '1') | |
| 89 if not headers: | |
| 90 headers = {} | |
| 91 headers['x-goog-api-version'] = api_version | |
| 92 | |
| 93 if command_name not in self.command_map: | |
| 94 raise CommandException('Invalid command "%s".' % command_name) | |
| 95 command_class = self.command_map[command_name] | |
| 96 command_inst = command_class(self, args, headers, debug, | |
| 97 parallel_operations, self.gsutil_bin_dir, | |
| 98 self.boto_lib_dir, self.config_file_list, | |
| 99 self.gsutil_ver, self.bucket_storage_uri_class, | |
| 100 test_method) | |
| 101 return command_inst.RunCommand() | |
| OLD | NEW |