summaryrefslogtreecommitdiffstats
path: root/pendulum/utils/_compat.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2021-01-30 08:13:47 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2021-01-30 08:13:47 +0000
commit1199780155f666b6806d563a29d093a251664009 (patch)
tree68716d9c1ee3205f474a04d74d5653eddf94a9f2 /pendulum/utils/_compat.py
parentInitial commit. (diff)
downloadpendulum-1199780155f666b6806d563a29d093a251664009.tar.xz
pendulum-1199780155f666b6806d563a29d093a251664009.zip
Adding upstream version 2.1.2.upstream/2.1.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'pendulum/utils/_compat.py')
-rw-r--r--pendulum/utils/_compat.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/pendulum/utils/_compat.py b/pendulum/utils/_compat.py
new file mode 100644
index 0000000..07cead1
--- /dev/null
+++ b/pendulum/utils/_compat.py
@@ -0,0 +1,54 @@
+import sys
+
+
+PY2 = sys.version_info < (3, 0)
+PY36 = sys.version_info >= (3, 6)
+PYPY = hasattr(sys, "pypy_version_info")
+
+_HAS_FOLD = PY36
+
+
+try: # Python 2
+ long = long
+ unicode = unicode
+ basestring = basestring
+except NameError: # Python 3
+ long = int
+ unicode = str
+ basestring = str
+
+
+def decode(string, encodings=None):
+ if not PY2 and not isinstance(string, bytes):
+ return string
+
+ if PY2 and isinstance(string, unicode):
+ return string
+
+ encodings = encodings or ["utf-8", "latin1", "ascii"]
+
+ for encoding in encodings:
+ try:
+ return string.decode(encoding)
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ pass
+
+ return string.decode(encodings[0], errors="ignore")
+
+
+def encode(string, encodings=None):
+ if not PY2 and isinstance(string, bytes):
+ return string
+
+ if PY2 and isinstance(string, str):
+ return string
+
+ encodings = encodings or ["utf-8", "latin1", "ascii"]
+
+ for encoding in encodings:
+ try:
+ return string.encode(encoding)
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ pass
+
+ return string.encode(encodings[0], errors="ignore")