OLD | NEW |
| (Empty) |
1 # Protocol Buffers - Google's data interchange format | |
2 # Copyright 2008 Google Inc. All rights reserved. | |
3 # http://code.google.com/p/protobuf/ | |
4 # | |
5 # Redistribution and use in source and binary forms, with or without | |
6 # modification, are permitted provided that the following conditions are | |
7 # met: | |
8 # | |
9 # * Redistributions of source code must retain the above copyright | |
10 # notice, this list of conditions and the following disclaimer. | |
11 # * Redistributions in binary form must reproduce the above | |
12 # copyright notice, this list of conditions and the following disclaimer | |
13 # in the documentation and/or other materials provided with the | |
14 # distribution. | |
15 # * Neither the name of Google Inc. nor the names of its | |
16 # contributors may be used to endorse or promote products derived from | |
17 # this software without specific prior written permission. | |
18 # | |
19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
20 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
21 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
22 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
23 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
24 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
25 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
29 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
30 | |
31 """Determine which implementation of the protobuf API is used in this process. | |
32 """ | |
33 | |
34 import os | |
35 import sys | |
36 | |
37 try: | |
38 # pylint: disable=g-import-not-at-top | |
39 from google.protobuf.internal import _api_implementation | |
40 # The compile-time constants in the _api_implementation module can be used to | |
41 # switch to a certain implementation of the Python API at build time. | |
42 _api_version = _api_implementation.api_version | |
43 del _api_implementation | |
44 except ImportError: | |
45 _api_version = 0 | |
46 | |
47 _default_implementation_type = ( | |
48 'python' if _api_version == 0 else 'cpp') | |
49 _default_version_str = ( | |
50 '1' if _api_version <= 1 else '2') | |
51 | |
52 # This environment variable can be used to switch to a certain implementation | |
53 # of the Python API, overriding the compile-time constants in the | |
54 # _api_implementation module. Right now only 'python' and 'cpp' are valid | |
55 # values. Any other value will be ignored. | |
56 _implementation_type = os.getenv('PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION', | |
57 _default_implementation_type) | |
58 | |
59 if _implementation_type != 'python': | |
60 _implementation_type = 'cpp' | |
61 | |
62 # This environment variable can be used to switch between the two | |
63 # 'cpp' implementations, overriding the compile-time constants in the | |
64 # _api_implementation module. Right now only 1 and 2 are valid values. Any other | |
65 # value will be ignored. | |
66 _implementation_version_str = os.getenv( | |
67 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION', | |
68 _default_version_str) | |
69 | |
70 if _implementation_version_str not in ('1', '2'): | |
71 raise ValueError( | |
72 "unsupported PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION: '" + | |
73 _implementation_version_str + "' (supported versions: 1, 2)" | |
74 ) | |
75 | |
76 _implementation_version = int(_implementation_version_str) | |
77 | |
78 | |
79 # Usage of this function is discouraged. Clients shouldn't care which | |
80 # implementation of the API is in use. Note that there is no guarantee | |
81 # that differences between APIs will be maintained. | |
82 # Please don't use this function if possible. | |
83 def Type(): | |
84 return _implementation_type | |
85 | |
86 | |
87 # See comment on 'Type' above. | |
88 def Version(): | |
89 return _implementation_version | |
OLD | NEW |