| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 # -*- coding: utf-8 -*- | |
| 3 # Copyright 2010 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 """Wrapper module for running gslib.__main__.main() from the command line.""" | |
| 18 | |
| 19 import os | |
| 20 import sys | |
| 21 import warnings | |
| 22 | |
| 23 # TODO: gsutil-beta: Distribute a pylint rc file. | |
| 24 | |
| 25 if not (2, 6) <= sys.version_info[:3] < (3,): | |
| 26 sys.exit('gsutil requires python 2.6 or 2.7.') | |
| 27 | |
| 28 | |
| 29 def UsingCrcmodExtension(crcmod_module): | |
| 30 return (getattr(crcmod_module, 'crcmod', None) and | |
| 31 getattr(crcmod_module.crcmod, '_usingExtension', None)) | |
| 32 | |
| 33 | |
| 34 def OutputAndExit(message): | |
| 35 sys.stderr.write('%s\n' % message) | |
| 36 sys.exit(1) | |
| 37 | |
| 38 | |
| 39 GSUTIL_DIR = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) | |
| 40 if not GSUTIL_DIR: | |
| 41 OutputAndExit('Unable to determine where gsutil is installed. Sorry, ' | |
| 42 'cannot run correctly without this.\n') | |
| 43 | |
| 44 # The wrapper script adds all third_party libraries to the Python path, since | |
| 45 # we don't assume any third party libraries are installed system-wide. | |
| 46 THIRD_PARTY_DIR = os.path.join(GSUTIL_DIR, 'third_party') | |
| 47 | |
| 48 | |
| 49 # Filter out "module was already imported" warnings that get printed after we | |
| 50 # add our bundled version of modules to the Python path. | |
| 51 warnings.filterwarnings('ignore', category=UserWarning, | |
| 52 message=r'.* httplib2 was already imported from') | |
| 53 warnings.filterwarnings('ignore', category=UserWarning, | |
| 54 message=r'.* oauth2client was already imported from') | |
| 55 | |
| 56 | |
| 57 # List of third-party libraries. The first element of the tuple is the name of | |
| 58 # the directory under third_party and the second element is the subdirectory | |
| 59 # that needs to be added to sys.path. | |
| 60 THIRD_PARTY_LIBS = [ | |
| 61 ('oauth2client', ''), # oauth2client and dependencies must be before boto. | |
| 62 ('pyasn1', ''), # oauth2client dependency | |
| 63 ('pyasn1-modules', ''), # oauth2client dependency | |
| 64 ('rsa', ''), # oauth2client dependency | |
| 65 ('apitools', ''), | |
| 66 ('boto', ''), | |
| 67 ('gcs-oauth2-boto-plugin', ''), | |
| 68 ('httplib2', 'python2'), | |
| 69 ('protorpc', ''), | |
| 70 ('python-gflags', ''), | |
| 71 ('retry-decorator', ''), | |
| 72 ('six', ''), | |
| 73 ('socksipy-branch', ''), | |
| 74 ] | |
| 75 for libdir, subdir in THIRD_PARTY_LIBS: | |
| 76 if not os.path.isdir(os.path.join(THIRD_PARTY_DIR, libdir)): | |
| 77 OutputAndExit( | |
| 78 'There is no %s library under the gsutil third-party directory (%s).\n' | |
| 79 'The gsutil command cannot work properly when installed this way.\n' | |
| 80 'Please re-install gsutil per the installation instructions.' % ( | |
| 81 libdir, THIRD_PARTY_DIR)) | |
| 82 sys.path.insert(0, os.path.join(THIRD_PARTY_DIR, libdir, subdir)) | |
| 83 | |
| 84 # The wrapper script adds all third_party libraries to the Python path, since | |
| 85 # we don't assume any third party libraries are installed system-wide. | |
| 86 THIRD_PARTY_DIR = os.path.join(GSUTIL_DIR, 'third_party') | |
| 87 | |
| 88 CRCMOD_PATH = os.path.join(THIRD_PARTY_DIR, 'crcmod', 'python2') | |
| 89 CRCMOD_OSX_PATH = os.path.join(THIRD_PARTY_DIR, 'crcmod_osx') | |
| 90 | |
| 91 try: | |
| 92 # pylint: disable=g-import-not-at-top | |
| 93 import crcmod | |
| 94 except ImportError: | |
| 95 crcmod = None | |
| 96 | |
| 97 if not UsingCrcmodExtension(crcmod): | |
| 98 local_crcmod_path = (CRCMOD_OSX_PATH | |
| 99 if 'darwin' in str(sys.platform).lower() | |
| 100 else CRCMOD_PATH) | |
| 101 sys.path.insert(0, local_crcmod_path) | |
| 102 | |
| 103 | |
| 104 def RunMain(): | |
| 105 # pylint: disable=g-import-not-at-top | |
| 106 import gslib.__main__ | |
| 107 sys.exit(gslib.__main__.main()) | |
| 108 | |
| 109 if __name__ == '__main__': | |
| 110 RunMain() | |
| OLD | NEW |