comparison Generic/utils.py @ 26:16f91684686b default tip

Upgrade to python 3. Keep python 2/3 compatibility
author Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es>
date Tue, 18 Jun 2019 17:50:23 +0200
parents 65e7ae0d0e63
children
comparison
equal deleted inserted replaced
25:189f8274aecd 26:16f91684686b
18 ## 18 ##
19 ## You should have received a copy of the GNU General Public License 19 ## You should have received a copy of the GNU General Public License
20 ## along with this program. If not, see <http://www.gnu.org/licenses/>. 20 ## along with this program. If not, see <http://www.gnu.org/licenses/>.
21 21
22 # Modules 22 # Modules
23
24 # python 2/3 compatibility
25 from __future__ import absolute_import, division, print_function, unicode_literals
26 from builtins import str as text
27 from six import text_type
28 from io import IOBase
29
23 import re 30 import re
24 import imghdr 31 import imghdr
25 import os.path 32 import os.path
26 33
34
27 # add svg to imghdr 35 # add svg to imghdr
28 def test_svg(h, f): 36 def test_svg(h, f):
29 """SVG """ 37 """SVG """
30 if isinstance(f,file): 38 if isinstance(f,IOBase):
31 _pos = f.tell() 39 _pos = f.tell()
32 f.seek(0) 40 f.seek(0)
33 _h = f.read(32) 41 _h = f.read(32)
34 f.seek(-32, 2) 42 f.seek(-32, 2)
35 _l = f.read(32) 43 _l = f.read(32)
36 f.seek(_pos) 44 f.seek(_pos)
37 else: 45 else:
38 _h = h 46 _h = h
39 _l = h[-32:] 47 _l = h[-32:]
40 if "<?xml" in _h and "</svg>" in _l: 48 if b"<?xml" in _h and b"</svg>" in _l:
41 return 'svg' 49 return 'svg'
42 imghdr.tests.append(test_svg) 50 imghdr.tests.append(test_svg)
43 51
44 # add ico to imghdr 52 # add ico to imghdr
45 def test_ico(h, f): 53 def test_ico(h, f):
46 """ico image file""" 54 """ico image file"""
47 if h[:4] == "\x00\x00\x01\x00": 55 if h[:4] == b"\x00\x00\x01\x00":
48 return 'ico' 56 return 'ico'
49 imghdr.tests.append(test_ico) 57 imghdr.tests.append(test_ico)
50 58
51 # add wmf to imghdr 59 # add wmf to imghdr
52 def test_pdf(h, f): 60 def test_pdf(h, f):
53 """pdf file""" 61 """pdf file"""
54 if h[:4] == "%PDF": 62 if h[:4] == b"%PDF":
55 return 'pdf' 63 return 'pdf'
56 imghdr.tests.append(test_pdf) 64 imghdr.tests.append(test_pdf)
57 65
58 # add wmf to imghdr 66 # add wmf to imghdr
59 def test_wmf(h, f): 67 def test_wmf(h, f):
60 """wmf image library""" 68 """wmf image library"""
61 if h[:6] == "\xd7\xcd\xc6\x9a\x00\x00": 69 if h[:6] == b"\xd7\xcd\xc6\x9a\x00\x00":
62 return 'wmf' 70 return 'wmf'
63 imghdr.tests.append(test_wmf) 71 imghdr.tests.append(test_wmf)
64 72
65 # add dxf to imghdr 73 # add dxf to imghdr
66 def test_dxf(h, f): 74 def test_dxf(h, f):
67 """AutoCAD DXF: Drawing Interchange Format""" 75 """AutoCAD DXF: Drawing Interchange Format"""
68 if isinstance(f,file): 76 if isinstance(f,IOBase):
69 _pos = f.tell() 77 _pos = f.tell()
70 f.seek(0) 78 f.seek(0)
71 _h = f.read(128) 79 _h = f.read(128)
72 f.seek(-32, 2) 80 f.seek(-32, 2)
73 _l = f.read(32) 81 _l = f.read(32)
74 f.seek(_pos) 82 f.seek(_pos)
75 else: 83 else:
76 _h = h 84 _h = h
77 _l = h[-32:] 85 _l = h[-32:]
78 _h = _h.replace("\r","") 86 _h = _h.replace(b"\r",b"")
79 _l = _l.replace("\r","") 87 _l = _l.replace(b"\r",b"")
80 if (" 0\nSECTION\n 2\nHEADER\n" in _h or\ 88 if (b" 0\nSECTION\n 2\nHEADER\n" in _h or\
81 " 0\nSECTION\n 2\nCLASSES\n" in _h or\ 89 b" 0\nSECTION\n 2\nCLASSES\n" in _h or\
82 " 0\nSECTION\n 2\nTABLES\n" in _h or\ 90 b" 0\nSECTION\n 2\nTABLES\n" in _h or\
83 " 0\nSECTION\n 2\nBLOCKS\n" in _h or\ 91 b" 0\nSECTION\n 2\nBLOCKS\n" in _h or\
84 " 0\nSECTION\n 2\nENTITIES\n" in _h or\ 92 b" 0\nSECTION\n 2\nENTITIES\n" in _h or\
85 " 0\nSECTION\n 2\nOBJECTS\n" in _h or\ 93 b" 0\nSECTION\n 2\nOBJECTS\n" in _h or\
86 " 0\nSECTION\n 2\nTHUMBNAILIMAGE\n" in _h) and \ 94 b" 0\nSECTION\n 2\nTHUMBNAILIMAGE\n" in _h) and \
87 _l[-19:] == " 0\nENDSEC\n 0\nEOF\n": 95 _l[-19:] == b" 0\nENDSEC\n 0\nEOF\n":
88 return 'dxf' 96 return 'dxf'
89 imghdr.tests.append(test_dxf) 97 imghdr.tests.append(test_dxf)
90 98
91 99
92 def mapping(string, tuple_strings): 100 def mapping(string, tuple_strings):
98 from the tuple. 106 from the tuple.
99 It is used because the gettext module can not #-#supotr#-# strings as: 107 It is used because the gettext module can not #-#supotr#-# strings as:
100 "Invalid type (%s) in record: %s" %(type, record) 108 "Invalid type (%s) in record: %s" %(type, record)
101 """ 109 """
102 for _index in range(len(tuple_strings)): 110 for _index in range(len(tuple_strings)):
103 string = string.replace("$" + str(_index+1), tuple_strings[_index]) 111 string = string.replace("$" + text(_index+1), tuple_strings[_index])
104 #string = string.replace("$" + str(_index+1), str(tuple[_index]))
105 return string 112 return string
106 113
107 def eliminate_duplicates(list): 114 def eliminate_duplicates(list):
108 """eliminate_duplicates(list) 115 """eliminate_duplicates(list)
109 116
141 code(False/code) 148 code(False/code)
142 False: the code is not valid and can not be corrected 149 False: the code is not valid and can not be corrected
143 code: the code or the corrected code 150 code: the code or the corrected code
144 """ 151 """
145 _is_valid = True 152 _is_valid = True
146 if not isinstance(code, str): 153 if not isinstance(code, text_type):
147 print("Not a string, code: " + code + type(code) ) 154 _tuni = _("Not a text string, code: $1, type: $2")
155 _uni = mapping(_tuni, (code ,text(type(code))))
156 print(_uni)
148 return False, False 157 return False, False
149 if code == "": 158 if code == "":
150 return False, False 159 return False, False
151 try: 160 try:
152 _unicode_code = unicode(code, "utf8",'replace') 161 #_unicode_code = unicode(code, "utf-8",'replace')
153 _code_utf8 = _unicode_code.encode("utf8",'replace') 162 _unicode_code = code
163 _code_utf8 = _unicode_code.encode("utf-8",'replace')
154 _code_cp850 = _unicode_code.encode("cp850",'replace') 164 _code_cp850 = _unicode_code.encode("cp850",'replace')
155 _unicode_code = unicode(_code_cp850, "cp850",'replace') 165 _unicode_code = text(_code_cp850, "cp850",'replace')
156 166
157 except UnicodeError: 167 except UnicodeError:
158 print ("Unicode Error, code: " + code ) 168 _tuni = _("Unicode Error, code: $1")
159 return False, False 169 _uni = mapping(_tuni, (code, ))
160 if _code_utf8 != code: 170 print (_uni)
161 print ("Not in cp950, code: " + code ) 171 return False, False
172 if code != _unicode_code:
173 _tuni = _("Not in cp850, code: $1")
174 _uni = mapping(_tuni, (code, ))
175 print (_uni)
162 _is_valid = False 176 _is_valid = False
163 if _code_utf8 == "": 177 if _code_utf8 == "":
164 return False, False 178 return False, False
165 code = _code_utf8 179 code = _code_utf8
166 _code2 = re.sub("[\t \n\r~|\\\]","",code) 180 _code2 = re.sub("[\t \n\r~|\\\]","",code)
167 if _code2 != code: 181 if _code2 != code:
168 print("Control characters in code: " + code ) 182 _tuni = _("Control characters in code: $1")
183 _uni = mapping(_tuni, (code, ))
184 print(_uni)
169 if _code2 == "": 185 if _code2 == "":
170 return False, False 186 return False, False
171 _is_valid = False 187 _is_valid = False
172 code = _code2 188 code = _code2
173 if code[-1] == "#": 189 if code[-1] == "#":
174 print("# in code: " + code ) 190 _tuni = _("# in code: $1")
175 _is_valid = False 191 _uni = mapping(_tuni, (code, ))
192 print(_uni)
193 _is_valid = False
176 while code[-1] == "#": 194 while code[-1] == "#":
177 code = code[:-1] 195 code = code[:-1]
178 if code == "": 196 if code == "":
179 print("Empty code") 197 _tuni = _("Empty code")
198 print(_tuni)
180 return False, False 199 return False, False
181 return _is_valid, code 200 return _is_valid, code
182 201
183 def getFiletype(filename, h=None): 202 def getFiletype(filename, h=None):
184 """getFiletype(filename, h=None): 203 """getFiletype(filename, h=None):