Index: third_party/gsutil/gsutil.py |
diff --git a/third_party/gsutil/gsutil.py b/third_party/gsutil/gsutil.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..8df3d7e1382e8ba5a2ff76da93e0357d74b5b0ec |
--- /dev/null |
+++ b/third_party/gsutil/gsutil.py |
@@ -0,0 +1,110 @@ |
+#!/usr/bin/env python |
+# -*- coding: utf-8 -*- |
+# Copyright 2010 Google Inc. All Rights Reserved. |
+# |
+# Licensed under the Apache License, Version 2.0 (the "License"); |
+# you may not use this file except in compliance with the License. |
+# You may obtain a copy of the License at |
+# |
+# http://www.apache.org/licenses/LICENSE-2.0 |
+# |
+# Unless required by applicable law or agreed to in writing, software |
+# distributed under the License is distributed on an "AS IS" BASIS, |
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+# See the License for the specific language governing permissions and |
+# limitations under the License. |
+ |
+"""Wrapper module for running gslib.__main__.main() from the command line.""" |
+ |
+import os |
+import sys |
+import warnings |
+ |
+# TODO: gsutil-beta: Distribute a pylint rc file. |
+ |
+if not (2, 6) <= sys.version_info[:3] < (3,): |
+ sys.exit('gsutil requires python 2.6 or 2.7.') |
+ |
+ |
+def UsingCrcmodExtension(crcmod_module): |
+ return (getattr(crcmod_module, 'crcmod', None) and |
+ getattr(crcmod_module.crcmod, '_usingExtension', None)) |
+ |
+ |
+def OutputAndExit(message): |
+ sys.stderr.write('%s\n' % message) |
+ sys.exit(1) |
+ |
+ |
+GSUTIL_DIR = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) |
+if not GSUTIL_DIR: |
+ OutputAndExit('Unable to determine where gsutil is installed. Sorry, ' |
+ 'cannot run correctly without this.\n') |
+ |
+# The wrapper script adds all third_party libraries to the Python path, since |
+# we don't assume any third party libraries are installed system-wide. |
+THIRD_PARTY_DIR = os.path.join(GSUTIL_DIR, 'third_party') |
+ |
+ |
+# Filter out "module was already imported" warnings that get printed after we |
+# add our bundled version of modules to the Python path. |
+warnings.filterwarnings('ignore', category=UserWarning, |
+ message=r'.* httplib2 was already imported from') |
+warnings.filterwarnings('ignore', category=UserWarning, |
+ message=r'.* oauth2client was already imported from') |
+ |
+ |
+# List of third-party libraries. The first element of the tuple is the name of |
+# the directory under third_party and the second element is the subdirectory |
+# that needs to be added to sys.path. |
+THIRD_PARTY_LIBS = [ |
+ ('oauth2client', ''), # oauth2client and dependencies must be before boto. |
+ ('pyasn1', ''), # oauth2client dependency |
+ ('pyasn1-modules', ''), # oauth2client dependency |
+ ('rsa', ''), # oauth2client dependency |
+ ('apitools', ''), |
+ ('boto', ''), |
+ ('gcs-oauth2-boto-plugin', ''), |
+ ('httplib2', 'python2'), |
+ ('protorpc', ''), |
+ ('python-gflags', ''), |
+ ('retry-decorator', ''), |
+ ('six', ''), |
+ ('socksipy-branch', ''), |
+] |
+for libdir, subdir in THIRD_PARTY_LIBS: |
+ if not os.path.isdir(os.path.join(THIRD_PARTY_DIR, libdir)): |
+ OutputAndExit( |
+ 'There is no %s library under the gsutil third-party directory (%s).\n' |
+ 'The gsutil command cannot work properly when installed this way.\n' |
+ 'Please re-install gsutil per the installation instructions.' % ( |
+ libdir, THIRD_PARTY_DIR)) |
+ sys.path.insert(0, os.path.join(THIRD_PARTY_DIR, libdir, subdir)) |
+ |
+# The wrapper script adds all third_party libraries to the Python path, since |
+# we don't assume any third party libraries are installed system-wide. |
+THIRD_PARTY_DIR = os.path.join(GSUTIL_DIR, 'third_party') |
+ |
+CRCMOD_PATH = os.path.join(THIRD_PARTY_DIR, 'crcmod', 'python2') |
+CRCMOD_OSX_PATH = os.path.join(THIRD_PARTY_DIR, 'crcmod_osx') |
+ |
+try: |
+ # pylint: disable=g-import-not-at-top |
+ import crcmod |
+except ImportError: |
+ crcmod = None |
+ |
+if not UsingCrcmodExtension(crcmod): |
+ local_crcmod_path = (CRCMOD_OSX_PATH |
+ if 'darwin' in str(sys.platform).lower() |
+ else CRCMOD_PATH) |
+ sys.path.insert(0, local_crcmod_path) |
+ |
+ |
+def RunMain(): |
+ # pylint: disable=g-import-not-at-top |
+ import gslib.__main__ |
+ sys.exit(gslib.__main__.main()) |
+ |
+if __name__ == '__main__': |
+ RunMain() |