| Index: third_party/protobuf/python/google/protobuf/internal/api_implementation.py
|
| diff --git a/third_party/protobuf/python/google/protobuf/internal/api_implementation.py b/third_party/protobuf/python/google/protobuf/internal/api_implementation.py
|
| old mode 100644
|
| new mode 100755
|
| index ce02a32924c48c02d52427ed931deb27c855d28b..ffcf751167a5a973fa2e48f06a7b2920802fa494
|
| --- a/third_party/protobuf/python/google/protobuf/internal/api_implementation.py
|
| +++ b/third_party/protobuf/python/google/protobuf/internal/api_implementation.py
|
| @@ -1,6 +1,6 @@
|
| # Protocol Buffers - Google's data interchange format
|
| # Copyright 2008 Google Inc. All rights reserved.
|
| -# http://code.google.com/p/protobuf/
|
| +# https://developers.google.com/protocol-buffers/
|
| #
|
| # Redistribution and use in source and binary forms, with or without
|
| # modification, are permitted provided that the following conditions are
|
| @@ -28,53 +28,72 @@
|
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| +"""Determine which implementation of the protobuf API is used in this process.
|
| """
|
| -This module is the central entity that determines which implementation of the
|
| -API is used.
|
| -"""
|
| -
|
| -__author__ = 'petar@google.com (Petar Petrov)'
|
|
|
| import os
|
| +import sys
|
| +
|
| +try:
|
| + # pylint: disable=g-import-not-at-top
|
| + from google.protobuf.internal import _api_implementation
|
| + # The compile-time constants in the _api_implementation module can be used to
|
| + # switch to a certain implementation of the Python API at build time.
|
| + _api_version = _api_implementation.api_version
|
| + _proto_extension_modules_exist_in_build = True
|
| +except ImportError:
|
| + _api_version = -1 # Unspecified by compiler flags.
|
| + _proto_extension_modules_exist_in_build = False
|
| +
|
| +if _api_version == 1:
|
| + raise ValueError('api_version=1 is no longer supported.')
|
| +if _api_version < 0: # Still unspecified?
|
| + try:
|
| + # The presence of this module in a build allows the proto implementation to
|
| + # be upgraded merely via build deps rather than a compiler flag or the
|
| + # runtime environment variable.
|
| + # pylint: disable=g-import-not-at-top
|
| + from google.protobuf import _use_fast_cpp_protos
|
| + # Work around a known issue in the classic bootstrap .par import hook.
|
| + if not _use_fast_cpp_protos:
|
| + raise ImportError('_use_fast_cpp_protos import succeeded but was None')
|
| + del _use_fast_cpp_protos
|
| + _api_version = 2
|
| + except ImportError:
|
| + if _proto_extension_modules_exist_in_build:
|
| + if sys.version_info[0] >= 3: # Python 3 defaults to C++ impl v2.
|
| + _api_version = 2
|
| + # TODO(b/17427486): Make Python 2 default to C++ impl v2.
|
| +
|
| +_default_implementation_type = (
|
| + 'python' if _api_version <= 0 else 'cpp')
|
| +
|
| # This environment variable can be used to switch to a certain implementation
|
| -# of the Python API. Right now only 'python' and 'cpp' are valid values. Any
|
| -# other value will be ignored.
|
| +# of the Python API, overriding the compile-time constants in the
|
| +# _api_implementation module. Right now only 'python' and 'cpp' are valid
|
| +# values. Any other value will be ignored.
|
| _implementation_type = os.getenv('PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION',
|
| - 'python')
|
| -
|
| + _default_implementation_type)
|
|
|
| if _implementation_type != 'python':
|
| - # For now, by default use the pure-Python implementation.
|
| - # The code below checks if the C extension is available and
|
| - # uses it if it is available.
|
| _implementation_type = 'cpp'
|
| - ## Determine automatically which implementation to use.
|
| - #try:
|
| - # from google.protobuf.internal import cpp_message
|
| - # _implementation_type = 'cpp'
|
| - #except ImportError, e:
|
| - # _implementation_type = 'python'
|
| -
|
|
|
| # This environment variable can be used to switch between the two
|
| -# 'cpp' implementations. Right now only 1 and 2 are valid values. Any
|
| -# other value will be ignored.
|
| +# 'cpp' implementations, overriding the compile-time constants in the
|
| +# _api_implementation module. Right now only '2' is supported. Any other
|
| +# value will cause an error to be raised.
|
| _implementation_version_str = os.getenv(
|
| - 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION',
|
| - '1')
|
| -
|
| + 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION', '2')
|
|
|
| -if _implementation_version_str not in ('1', '2'):
|
| +if _implementation_version_str != '2':
|
| raise ValueError(
|
| - "unsupported PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION: '" +
|
| - _implementation_version_str + "' (supported versions: 1, 2)"
|
| + 'unsupported PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION: "' +
|
| + _implementation_version_str + '" (supported versions: 2)'
|
| )
|
|
|
| -
|
| _implementation_version = int(_implementation_version_str)
|
|
|
|
|
| -
|
| # Usage of this function is discouraged. Clients shouldn't care which
|
| # implementation of the API is in use. Note that there is no guarantee
|
| # that differences between APIs will be maintained.
|
| @@ -82,6 +101,7 @@ _implementation_version = int(_implementation_version_str)
|
| def Type():
|
| return _implementation_type
|
|
|
| +
|
| # See comment on 'Type' above.
|
| def Version():
|
| return _implementation_version
|
|
|