comparison Generic/utils.py @ 23:65e7ae0d0e63

GTK2 to GTK3
author Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es>
date Thu, 02 May 2019 16:31:17 +0200
parents a7b9f7e7dfa4
children 16f91684686b
comparison
equal deleted inserted replaced
22:7bd4ca56607d 23:65e7ae0d0e63
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 ## File utils.py 3 ## File utils.py
4 ## This file is part of pyArq-Presupuestos. 4 ## This file is part of pyArq-Presupuestos.
5 ## 5 ##
6 ## Copyright (C) 2010-2013 Miguel Ángel Bárcena Rodríguez 6 ## Copyright (C) 2010-2019 Miguel Ángel Bárcena Rodríguez
7 ## <miguelangel@obraencurso.es> 7 ## <miguelangel@obraencurso.es>
8 ## 8 ##
9 ## pyArq-Presupuestos is free software: you can redistribute it and/or modify 9 ## pyArq-Presupuestos is free software: you can redistribute it and/or modify
10 ## it under the terms of the GNU General Public License as published by 10 ## it under the terms of the GNU General Public License as published by
11 ## the Free Software Foundation, either version 3 of the License, or 11 ## the Free Software Foundation, either version 3 of the License, or
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 import re 23 import re
24 import imghdr 24 import imghdr
25 import os.path
26
27 # add svg to imghdr
28 def test_svg(h, f):
29 """SVG """
30 if isinstance(f,file):
31 _pos = f.tell()
32 f.seek(0)
33 _h = f.read(32)
34 f.seek(-32, 2)
35 _l = f.read(32)
36 f.seek(_pos)
37 else:
38 _h = h
39 _l = h[-32:]
40 if "<?xml" in _h and "</svg>" in _l:
41 return 'svg'
42 imghdr.tests.append(test_svg)
43
44 # add ico to imghdr
45 def test_ico(h, f):
46 """ico image file"""
47 if h[:4] == "\x00\x00\x01\x00":
48 return 'ico'
49 imghdr.tests.append(test_ico)
50
51 # add wmf to imghdr
52 def test_pdf(h, f):
53 """pdf file"""
54 if h[:4] == "%PDF":
55 return 'pdf'
56 imghdr.tests.append(test_pdf)
25 57
26 # add wmf to imghdr 58 # add wmf to imghdr
27 def test_wmf(h, f): 59 def test_wmf(h, f):
28 """wmf image library""" 60 """wmf image library"""
29 if h[:6] == "\xd7\xcd\xc6\x9a\x00\x00": 61 if h[:6] == "\xd7\xcd\xc6\x9a\x00\x00":
55 _l[-19:] == " 0\nENDSEC\n 0\nEOF\n": 87 _l[-19:] == " 0\nENDSEC\n 0\nEOF\n":
56 return 'dxf' 88 return 'dxf'
57 imghdr.tests.append(test_dxf) 89 imghdr.tests.append(test_dxf)
58 90
59 91
60 def mapping(string, tuple): 92 def mapping(string, tuple_strings):
61 """mapping(string, tuple) 93 """mapping(string, tuple)
62 94
63 string: a message string 95 string: a message string
64 tuple: a truple with string items 96 tuple_strings: a truple with string items
65 Return the string replacing the $[n] words whith its corresponding value 97 Return the string replacing the $[n] words whith its corresponding value
66 from the tuple. 98 from the tuple.
67 It is used because the gettext module can not #-#supotr#-# strings as: 99 It is used because the gettext module can not #-#supotr#-# strings as:
68 "Invalid type (%s) in record: %s" %(type, record) 100 "Invalid type (%s) in record: %s" %(type, record)
69 """ 101 """
70 for _index in range(len(tuple)): 102 for _index in range(len(tuple_strings)):
71 string = string.replace("$" + str(_index+1), str(tuple[_index])) 103 string = string.replace("$" + str(_index+1), tuple_strings[_index])
104 #string = string.replace("$" + str(_index+1), str(tuple[_index]))
72 return string 105 return string
73 106
74 def eliminate_duplicates(list): 107 def eliminate_duplicates(list):
75 """eliminate_duplicates(list) 108 """eliminate_duplicates(list)
76 109
109 False: the code is not valid and can not be corrected 142 False: the code is not valid and can not be corrected
110 code: the code or the corrected code 143 code: the code or the corrected code
111 """ 144 """
112 _is_valid = True 145 _is_valid = True
113 if not isinstance(code, str): 146 if not isinstance(code, str):
114 print "Not a string, code:", code, type(code) 147 print("Not a string, code: " + code + type(code) )
115 return False, False 148 return False, False
116 if code == "": 149 if code == "":
117
118 return False, False 150 return False, False
119 try: 151 try:
120 _unicode_code = unicode(code, "utf8",'replace') 152 _unicode_code = unicode(code, "utf8",'replace')
121 _code_utf8 = _unicode_code.encode("utf8",'replace') 153 _code_utf8 = _unicode_code.encode("utf8",'replace')
122 _code_cp850 = _unicode_code.encode("cp850",'replace') 154 _code_cp850 = _unicode_code.encode("cp850",'replace')
123 _unicode_code = unicode(_code_cp850, "cp850",'replace') 155 _unicode_code = unicode(_code_cp850, "cp850",'replace')
124 156
125 except UnicodeError: 157 except UnicodeError:
126 print "Unicode Error, code:", code 158 print ("Unicode Error, code: " + code )
127 return False, False 159 return False, False
128 if _code_utf8 != code: 160 if _code_utf8 != code:
129 print "Not in cp950, code:", code 161 print ("Not in cp950, code: " + code )
130 _is_valid = False 162 _is_valid = False
131 if _code_utf8 == "": 163 if _code_utf8 == "":
132 return False, False 164 return False, False
133 code = _code_utf8 165 code = _code_utf8
134 _code2 = re.sub("[\t \n\r~|\\\]","",code) 166 _code2 = re.sub("[\t \n\r~|\\\]","",code)
135 if _code2 != code: 167 if _code2 != code:
136 print "Control characters in code:", code 168 print("Control characters in code: " + code )
137 if _code2 == "": 169 if _code2 == "":
138 return False, False 170 return False, False
139 _is_valid = False 171 _is_valid = False
140 code = _code2 172 code = _code2
141 if code[-1] == "#": 173 if code[-1] == "#":
142 print "# in code:", code 174 print("# in code: " + code )
143 _is_valid = False 175 _is_valid = False
144 while code[-1] == "#": 176 while code[-1] == "#":
145 code = code[:-1] 177 code = code[:-1]
146 if code == "": 178 if code == "":
147 print "Empty code" 179 print("Empty code")
148 return False, False 180 return False, False
149 return _is_valid, code 181 return _is_valid, code
150 182
151 def getFiletype(filename, h=None): 183 def getFiletype(filename, h=None):
152 """getFiletype(filename, h=None): 184 """getFiletype(filename, h=None):
153 185
154 filename: the filename to test 186 filename: the filename to test
155 h: raw string, if h is not None the filename is ignored and h is assumed 187 h: raw string, if h is not None the filename is ignored and h is assumed
156 to contain the byte stream to test 188 to contain the byte stream to test
157 """ 189
190 valid types:
191 "image", "wmf", "dxf", "pdf" , "video",
192 "office-document", "office-presentation", "office-spreadsheet",
193 "html", "rtf", "txt"
194 """
195 _ext = os.path.splitext(filename)[1][1:].lower()
196
197 _video_types = ["avi", "mp4", "m4p", "m4v2", "m4v","amv", "mpg", "m2v",
198 "mp2", "mpe", "mpv", "mpeg", "ogg", "ogv", "webm", "mkv",
199 "ogm", "flv", "f4v", "f4p", "f4a", "f4b", "vob", "drc",
200 "mts", "m2ts", "mov", "qt", "wmv", "yuv", "rm", "rmvb",
201 "asf", "svi", "3gp", "3g2", "mxf", "roq", "nsv"]
202 _document_types = ["doc", "docx", "odt"]
203 _spreadsheet_types = ["xls", "xlsx", "ods"]
204 _presentation_types = ["pps", "ppsx", "ppt", "pptx", "odp"]
205 _html_types = ["html", "xhtml"]
206 if _ext in _video_types:
207 return "video"
208 elif _ext in _document_types:
209 return "office-document"
210 elif _ext in _spreadsheet_types:
211 return "office-spreadsheet"
212 elif _ext in _presentation_types:
213 return "office-presentation"
214 elif _ext in _html_types:
215 return "html"
216 elif _ext == "rtf":
217 return "rtf"
218 elif _ext == "txt":
219 return "txt"
158 _type = imghdr.what(filename, h) 220 _type = imghdr.what(filename, h)
159 _image_types = ["rgb", "gif", "pbm", "pgm", "ppm", "tiff", "rast", "xbm", 221 _image_types = ["rgb", "gif", "pbm", "pgm", "ppm" ,"tiff", "tif", "rast",
160 "jpeg", "bmp", "png", "wmf"] 222 "xbm", "jpeg", "jpg", "bmp", "png", "webp", "exr",
161 if _type in _image_types: 223 "ico", "svg"]
224 if _type in _image_types and _ext in _image_types:
162 return "image" 225 return "image"
163 elif _type == "dxf": 226 elif _type == "wmf" and _ext == "wmf":
227 return "wmf"
228 elif _type == "dxf" and _ext == "dxf":
164 return "dxf" 229 return "dxf"
165 ## _video_types = ["avi", "mpg", "mkv", "ogm"] 230
166 ## elif _type in _video_types: 231 elif _type == "pdf" and _ext == "pdf":
167 ## return "video" 232 return "pdf"
168 ## elif _type == "pdf": 233 return None
169 ## return "pdf"
170 ## elif _type == "ppt" or _type == "odp":
171 ## return "presentation"
172 else:
173 return None