summaryrefslogtreecommitdiff
path: root/python/compatibility.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/compatibility.py')
-rw-r--r--python/compatibility.py80
1 files changed, 14 insertions, 66 deletions
diff --git a/python/compatibility.py b/python/compatibility.py
index 472607c2..aa371ab0 100644
--- a/python/compatibility.py
+++ b/python/compatibility.py
@@ -18,75 +18,23 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-# 2-3 compatibility
import sys
-PY2 = sys.version_info[0] == 2
-PY3 = sys.version_info[0] == 3
-PY34 = sys.version_info[0:2] >= (3, 4)
+def pyNativeStr(arg):
+ if isinstance(arg, str):
+ return arg
+ else:
+ return arg.decode('utf8')
-if PY2:
- def range(*args):
- return xrange(*args)
+def valid_import(mod_name):
+ if sys.version_info[0:2] >= (3, 4):
+ import importlib.util
+ return importlib.util.find_spec(mod_name) is not None
+ else:
+ import importlib
+ mod_loader = importlib.find_loader(mod_name)
+ found = mod_loader is not None
+ return found
- def valid_import(mod_name):
- import imp
- try:
- imp.find_module(mod_name)
- found = True
- except ImportError:
- found = False
- return found
- def pyNativeStr(arg):
- return arg
-
-
-if PY3:
- range = range # Range needs to explicitly be defined or it's an error
-
- def valid_import(mod_name):
- import importlib
- mod_loader = importlib.find_loader(mod_name)
- found = mod_loader is not None
- return found
-
- def pyNativeStr(arg):
- if isinstance(arg, str):
- return arg
- else:
- try:
- return arg.decode('utf8')
- except UnicodeDecodeError:
- return arg.decode('charmap')
-
-
-if PY34:
- def valid_import(mod_name):
- import importlib.util
- return importlib.util.find_spec(mod_name) is not None
-
-
-def with_metaclass(meta, *bases):
- """Create a base class with a metaclass."""
- class metaclass(type):
- def __new__(cls, name, this_bases, d):
- return meta(name, bases, d)
-
- @classmethod
- def __prepare__(cls, name, this_bases):
- return meta.__prepare__(name, bases)
- return type.__new__(metaclass, 'temporary_class', (), {})
-
-
-def cstr(arg):
- if isinstance(arg, bytes) or arg is None:
- return arg
- elif isinstance(arg, bytearray):
- return bytes(arg)
- else:
- try:
- return arg.encode('charmap')
- except UnicodeEncodeError:
- return arg.encode('utf8')