From 1199780155f666b6806d563a29d093a251664009 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 30 Jan 2021 09:13:47 +0100 Subject: Adding upstream version 2.1.2. Signed-off-by: Daniel Baumann --- pendulum/utils/_compat.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 pendulum/utils/_compat.py (limited to 'pendulum/utils/_compat.py') 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") -- cgit v1.2.3