Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pendulum/utils/_compat.py: 35%
37 statements
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
« prev ^ index » next coverage.py v7.0.1, created at 2022-12-25 06:11 +0000
1import sys
4PY2 = sys.version_info < (3, 0)
5PY36 = sys.version_info >= (3, 6)
6PYPY = hasattr(sys, "pypy_version_info")
8_HAS_FOLD = PY36
11try: # Python 2
12 long = long
13 unicode = unicode
14 basestring = basestring
15except NameError: # Python 3
16 long = int
17 unicode = str
18 basestring = str
21def decode(string, encodings=None):
22 if not PY2 and not isinstance(string, bytes):
23 return string
25 if PY2 and isinstance(string, unicode):
26 return string
28 encodings = encodings or ["utf-8", "latin1", "ascii"]
30 for encoding in encodings:
31 try:
32 return string.decode(encoding)
33 except (UnicodeEncodeError, UnicodeDecodeError):
34 pass
36 return string.decode(encodings[0], errors="ignore")
39def encode(string, encodings=None):
40 if not PY2 and isinstance(string, bytes):
41 return string
43 if PY2 and isinstance(string, str):
44 return string
46 encodings = encodings or ["utf-8", "latin1", "ascii"]
48 for encoding in encodings:
49 try:
50 return string.encode(encoding)
51 except (UnicodeEncodeError, UnicodeDecodeError):
52 pass
54 return string.encode(encodings[0], errors="ignore")