24 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
24 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
25 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
25 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
26 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
28 |
28 |
29 from __future__ import absolute_import |
|
30 from __future__ import division |
|
31 from __future__ import print_function |
|
32 # no unicode literals |
29 # no unicode literals |
33 |
30 from __future__ import absolute_import, division, print_function |
34 '''Compatibility module across Python 2 and 3.''' |
|
35 |
31 |
36 import sys |
32 import sys |
37 |
33 |
|
34 |
|
35 """Compatibility module across Python 2 and 3.""" |
|
36 |
|
37 |
|
38 PYTHON2 = sys.version_info < (3, 0) |
38 PYTHON3 = sys.version_info >= (3, 0) |
39 PYTHON3 = sys.version_info >= (3, 0) |
39 |
40 |
40 # This is adapted from https://bitbucket.org/gutworth/six, and used under the |
41 # This is adapted from https://bitbucket.org/gutworth/six, and used under the |
41 # MIT license. See LICENSE for a full copyright notice. |
42 # MIT license. See LICENSE for a full copyright notice. |
42 if PYTHON3: |
43 if PYTHON3: |
|
44 |
43 def reraise(tp, value, tb=None): |
45 def reraise(tp, value, tb=None): |
44 try: |
46 try: |
45 if value is None: |
47 if value is None: |
46 value = tp() |
48 value = tp() |
47 if value.__traceback__ is not tb: |
49 if value.__traceback__ is not tb: |
48 raise value.with_traceback(tb) |
50 raise value.with_traceback(tb) |
49 raise value |
51 raise value |
50 finally: |
52 finally: |
51 value = None |
53 value = None |
52 tb = None |
54 tb = None |
|
55 |
|
56 |
53 else: |
57 else: |
54 exec(''' |
58 exec( |
|
59 """ |
55 def reraise(tp, value, tb=None): |
60 def reraise(tp, value, tb=None): |
56 try: |
61 try: |
57 raise tp, value, tb |
62 raise tp, value, tb |
58 finally: |
63 finally: |
59 tb = None |
64 tb = None |
60 '''.strip()) |
65 """.strip() |
|
66 ) |
61 |
67 |
62 if PYTHON3: |
68 if PYTHON3: |
63 UNICODE = str |
69 UNICODE = str |
64 else: |
70 else: |
65 UNICODE = unicode |
71 UNICODE = unicode # noqa: F821 We handled versioning above |