tests: use pytest fixtures in browse_model_test
[git-cola.git] / cola / compat.py
blob246f89d8eb0dc9db0bdab0e3b62b967df578204d
1 # pylint: disable=unused-import,redefined-builtin,undefined-variable
2 from __future__ import absolute_import, division, unicode_literals
3 import os
4 import sys
6 try:
7 import urllib2 as parse # noqa
8 except ImportError:
9 # Python 3
10 from urllib import parse # noqa
13 PY2 = sys.version_info[0] == 2
14 PY3 = sys.version_info[0] >= 3
15 PY26_PLUS = PY2 and sys.version_info[1] >= 6
16 WIN32 = sys.platform == 'win32' or sys.platform == 'cygwin'
17 ENCODING = 'utf-8'
20 if PY3:
22 def bstr(x, encoding=ENCODING):
23 return bytes(x, encoding=encoding)
26 elif PY26_PLUS:
27 bstr = bytes
28 else:
29 # Python <= 2.5
30 bstr = str
32 if PY3:
34 def bchr(i):
35 return bytes([i])
37 int_types = (int,)
38 maxsize = sys.maxsize
39 ustr = str
40 uchr = chr
41 else:
42 bchr = chr
43 maxsize = 2 ** 31
44 # pylint: disable=unicode-builtin
45 ustr = unicode # noqa
46 # pylint: disable=unichr-builtin
47 uchr = unichr # noqa
48 # pylint: disable=long-builtin
49 int_types = (int, long) # noqa
51 # Qt's max 32-bit signed integer range (-2147483648 to 2147483647)
52 maxint = (2 ** 31) - 1
55 def setenv(key, value):
56 """Compatibility wrapper for setting environment variables
58 Why? win32 requires putenv(). UNIX only requires os.environ.
60 """
61 if not PY3 and isinstance(value, ustr):
62 value = value.encode(ENCODING, 'replace')
63 os.environ[key] = value
64 os.putenv(key, value)
67 def unsetenv(key):
68 """Compatibility wrapper for unsetting environment variables"""
69 os.environ.pop(key, None)
70 if hasattr(os, 'unsetenv'):
71 os.unsetenv(key)
74 def no_op(value):
75 """Return the value as-is"""
76 return value
79 def byte_offset_to_int_converter():
80 """Return a function to convert byte string offsets into ints
82 Indexing into python3 bytes returns ints, Python2 returns str.
83 Thus, on Python2 we need to use `ord()` to convert the byte into
84 an integration. It's already an int on Python3, so we use no_op there.
86 """
87 if PY2:
88 result = ord
89 else:
90 result = no_op
91 return result