|
@@ -0,0 +1,59 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+"""
|
|
|
+OS-related utils for python2/python3 compatibility
|
|
|
+"""
|
|
|
+
|
|
|
+from __future__ import unicode_literals, division, print_function
|
|
|
+
|
|
|
+import sys
|
|
|
+import os
|
|
|
+
|
|
|
+
|
|
|
+if sys.version_info.major >= 3:
|
|
|
+ # Python 3
|
|
|
+ def path_exists(path):
|
|
|
+ """Returns True if the given file or directory exists. May raise
|
|
|
+ exceptions, for instance if you don't have permission to stat()
|
|
|
+ the given path.
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ os.stat(path)
|
|
|
+ return True
|
|
|
+ except FileNotFoundError:
|
|
|
+ return False
|
|
|
+
|
|
|
+ def makedirs(name, mode=0o777, exist_ok=False):
|
|
|
+ """No-op wrapper around os.makedirs()"""
|
|
|
+ return os.makedirs(name, mode=mode, exist_ok=exist_ok)
|
|
|
+
|
|
|
+else:
|
|
|
+ # Python 2
|
|
|
+ def path_exists(path):
|
|
|
+ """Returns True if the given file or directory exists. May raise
|
|
|
+ exceptions, for instance if you don't have permission to stat()
|
|
|
+ the given path.
|
|
|
+ """
|
|
|
+ try:
|
|
|
+ os.stat(path)
|
|
|
+ return True
|
|
|
+ except OSError as e:
|
|
|
+ if e.errno == os.errno.ENOENT:
|
|
|
+ return False
|
|
|
+ else:
|
|
|
+ raise
|
|
|
+
|
|
|
+ def makedirs(name, mode=0o777, exist_ok=False):
|
|
|
+ """Wrapper around os.makedirs() to support the python3-style "exist_ok"
|
|
|
+ argument.
|
|
|
+ """
|
|
|
+ if not exist_ok:
|
|
|
+ return os.makedirs(name, mode=mode)
|
|
|
+ # Emulate exist_ok behaviour
|
|
|
+ try:
|
|
|
+ res = os.makedirs(name, mode=mode)
|
|
|
+ except OSError as e:
|
|
|
+ if e.errno == os.errno.EEXIST:
|
|
|
+ return res
|
|
|
+ else:
|
|
|
+ raise
|