| Index: third_party/google-endpoints/endpoints/_endpointscfg_setup.py
|
| diff --git a/third_party/google-endpoints/endpoints/_endpointscfg_setup.py b/third_party/google-endpoints/endpoints/_endpointscfg_setup.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a286056f49030d2ac9c39fa8febd6c63d6d9e4d2
|
| --- /dev/null
|
| +++ b/third_party/google-endpoints/endpoints/_endpointscfg_setup.py
|
| @@ -0,0 +1,107 @@
|
| +# Copyright 2016 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.
|
| +"""Module for setting up App Engine library paths.
|
| +
|
| +This module searches for the root of the App Engine Python SDK or Google Cloud
|
| +SDK and computes a list of library paths and adds them to sys.path. This is
|
| +necessary for two reasons:
|
| +
|
| +1. The endpointscfg tool imports user code and therefore must be able to
|
| + import modules used in the app.
|
| +2. As a consequence of the first item, we must call an App Engine method to
|
| + set up service stubs in case an app's initialization code utilizes an App
|
| + Engine service. For example, there exists an App Engine version of pytz
|
| + which uses memcache and users may use it at the global level because it
|
| + seems to be declarative.
|
| +"""
|
| +import logging
|
| +import os
|
| +import sys
|
| +
|
| +_PYTHON_EXTENSIONS_WARNING = """
|
| +Found Cloud SDK, but App Engine Python Extensions are not
|
| +installed. If you encounter errors, please run:
|
| + $ gcloud components install app-engine-python
|
| +""".strip()
|
| +
|
| +
|
| +_IMPORT_ERROR_WARNING = """
|
| +Could not import App Engine Python libraries. If you encounter
|
| +errors, please make sure that the SDK binary path is in your PATH environment
|
| +variable or that the ENDPOINTS_GAE_SDK variable points to a valid SDK root.
|
| +""".strip()
|
| +
|
| +
|
| +_NOT_FOUND_WARNING = """
|
| +Could not find either the Cloud SDK or the App Engine Python SDK.
|
| +If you encounter errors, please make sure that the SDK binary path is in your
|
| +PATH environment variable or that the ENDPOINTS_GAE_SDK variable points to a
|
| +valid SDK root.""".strip()
|
| +
|
| +
|
| +_NO_FIX_SYS_PATH_WARNING = """
|
| +Could not find the fix_sys_path() function in dev_appserver.
|
| +If you encounter errors, please make sure that your Google App Engine SDK is
|
| +up-to-date.""".strip()
|
| +
|
| +
|
| +def _FindSdkPath():
|
| + environ_sdk = os.environ.get('ENDPOINTS_GAE_SDK')
|
| + if environ_sdk:
|
| + maybe_cloud_sdk = os.path.join(environ_sdk, 'platform', 'google_appengine')
|
| + if os.path.exists(maybe_cloud_sdk):
|
| + return maybe_cloud_sdk
|
| + return environ_sdk
|
| +
|
| + for path in os.environ['PATH'].split(os.pathsep):
|
| + if os.path.exists(os.path.join(path, 'dev_appserver.py')):
|
| + if (path.endswith('bin') and
|
| + os.path.exists(os.path.join(path, 'gcloud'))):
|
| + # Cloud SDK ships with dev_appserver.py in a bin directory. In the
|
| + # root directory, we can find the Python SDK in
|
| + # platform/google_appengine provided that it's installed.
|
| + sdk_path = os.path.join(os.path.dirname(path),
|
| + 'platform',
|
| + 'google_appengine')
|
| + if not os.path.exists(sdk_path):
|
| + logging.warning(_PYTHON_EXTENSIONS_WARNING)
|
| + return sdk_path
|
| + # App Engine SDK ships withd dev_appserver.py in the root directory.
|
| + return path
|
| +
|
| +
|
| +def _SetupPaths():
|
| + """Sets up the sys.path with special directories for endpointscfg.py."""
|
| + sdk_path = _FindSdkPath()
|
| + if sdk_path:
|
| + sys.path.append(sdk_path)
|
| + try:
|
| + import dev_appserver # pylint: disable=g-import-not-at-top
|
| + if hasattr(dev_appserver, 'fix_sys_path'):
|
| + dev_appserver.fix_sys_path()
|
| + else:
|
| + logging.warning(_NO_FIX_SYS_PATH_WARNING)
|
| + except ImportError:
|
| + logging.warning(_IMPORT_ERROR_WARNING)
|
| + else:
|
| + logging.warning(_NOT_FOUND_WARNING)
|
| +
|
| + # Add the path above this directory, so we can import the endpoints package
|
| + # from the user's app code (rather than from another, possibly outdated SDK).
|
| + # pylint: disable=g-import-not-at-top
|
| + from google.appengine.ext import vendor
|
| + vendor.add(os.path.dirname(os.path.dirname(__file__)))
|
| +
|
| +
|
| +_SetupPaths()
|
|
|