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.2.7, created at 2023-06-07 06:35 +0000

1import sys 

2 

3 

4PY2 = sys.version_info < (3, 0) 

5PY36 = sys.version_info >= (3, 6) 

6PYPY = hasattr(sys, "pypy_version_info") 

7 

8_HAS_FOLD = PY36 

9 

10 

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 

19 

20 

21def decode(string, encodings=None): 

22 if not PY2 and not isinstance(string, bytes): 

23 return string 

24 

25 if PY2 and isinstance(string, unicode): 

26 return string 

27 

28 encodings = encodings or ["utf-8", "latin1", "ascii"] 

29 

30 for encoding in encodings: 

31 try: 

32 return string.decode(encoding) 

33 except (UnicodeEncodeError, UnicodeDecodeError): 

34 pass 

35 

36 return string.decode(encodings[0], errors="ignore") 

37 

38 

39def encode(string, encodings=None): 

40 if not PY2 and isinstance(string, bytes): 

41 return string 

42 

43 if PY2 and isinstance(string, str): 

44 return string 

45 

46 encodings = encodings or ["utf-8", "latin1", "ascii"] 

47 

48 for encoding in encodings: 

49 try: 

50 return string.encode(encoding) 

51 except (UnicodeEncodeError, UnicodeDecodeError): 

52 pass 

53 

54 return string.encode(encodings[0], errors="ignore")