Chris@87
|
1 """
|
Chris@87
|
2 Python 3 compatibility tools.
|
Chris@87
|
3
|
Chris@87
|
4 """
|
Chris@87
|
5 from __future__ import division, absolute_import, print_function
|
Chris@87
|
6
|
Chris@87
|
7 __all__ = ['bytes', 'asbytes', 'isfileobj', 'getexception', 'strchar',
|
Chris@87
|
8 'unicode', 'asunicode', 'asbytes_nested', 'asunicode_nested',
|
Chris@87
|
9 'asstr', 'open_latin1', 'long', 'basestring', 'sixu',
|
Chris@87
|
10 'integer_types']
|
Chris@87
|
11
|
Chris@87
|
12 import sys
|
Chris@87
|
13
|
Chris@87
|
14 if sys.version_info[0] >= 3:
|
Chris@87
|
15 import io
|
Chris@87
|
16
|
Chris@87
|
17 long = int
|
Chris@87
|
18 integer_types = (int,)
|
Chris@87
|
19 basestring = str
|
Chris@87
|
20 unicode = str
|
Chris@87
|
21 bytes = bytes
|
Chris@87
|
22
|
Chris@87
|
23 def asunicode(s):
|
Chris@87
|
24 if isinstance(s, bytes):
|
Chris@87
|
25 return s.decode('latin1')
|
Chris@87
|
26 return str(s)
|
Chris@87
|
27
|
Chris@87
|
28 def asbytes(s):
|
Chris@87
|
29 if isinstance(s, bytes):
|
Chris@87
|
30 return s
|
Chris@87
|
31 return str(s).encode('latin1')
|
Chris@87
|
32
|
Chris@87
|
33 def asstr(s):
|
Chris@87
|
34 if isinstance(s, bytes):
|
Chris@87
|
35 return s.decode('latin1')
|
Chris@87
|
36 return str(s)
|
Chris@87
|
37
|
Chris@87
|
38 def isfileobj(f):
|
Chris@87
|
39 return isinstance(f, (io.FileIO, io.BufferedReader, io.BufferedWriter))
|
Chris@87
|
40
|
Chris@87
|
41 def open_latin1(filename, mode='r'):
|
Chris@87
|
42 return open(filename, mode=mode, encoding='iso-8859-1')
|
Chris@87
|
43
|
Chris@87
|
44 def sixu(s):
|
Chris@87
|
45 return s
|
Chris@87
|
46
|
Chris@87
|
47 strchar = 'U'
|
Chris@87
|
48
|
Chris@87
|
49
|
Chris@87
|
50 else:
|
Chris@87
|
51 bytes = str
|
Chris@87
|
52 long = long
|
Chris@87
|
53 basestring = basestring
|
Chris@87
|
54 unicode = unicode
|
Chris@87
|
55 integer_types = (int, long)
|
Chris@87
|
56 asbytes = str
|
Chris@87
|
57 asstr = str
|
Chris@87
|
58 strchar = 'S'
|
Chris@87
|
59
|
Chris@87
|
60
|
Chris@87
|
61 def isfileobj(f):
|
Chris@87
|
62 return isinstance(f, file)
|
Chris@87
|
63
|
Chris@87
|
64 def asunicode(s):
|
Chris@87
|
65 if isinstance(s, unicode):
|
Chris@87
|
66 return s
|
Chris@87
|
67 return str(s).decode('ascii')
|
Chris@87
|
68
|
Chris@87
|
69 def open_latin1(filename, mode='r'):
|
Chris@87
|
70 return open(filename, mode=mode)
|
Chris@87
|
71
|
Chris@87
|
72 def sixu(s):
|
Chris@87
|
73 return unicode(s, 'unicode_escape')
|
Chris@87
|
74
|
Chris@87
|
75
|
Chris@87
|
76 def getexception():
|
Chris@87
|
77 return sys.exc_info()[1]
|
Chris@87
|
78
|
Chris@87
|
79 def asbytes_nested(x):
|
Chris@87
|
80 if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
|
Chris@87
|
81 return [asbytes_nested(y) for y in x]
|
Chris@87
|
82 else:
|
Chris@87
|
83 return asbytes(x)
|
Chris@87
|
84
|
Chris@87
|
85 def asunicode_nested(x):
|
Chris@87
|
86 if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
|
Chris@87
|
87 return [asunicode_nested(y) for y in x]
|
Chris@87
|
88 else:
|
Chris@87
|
89 return asunicode(x)
|