Mercurial > pyarq-presupuestos
comparison Generic/fiebdc.py @ 21:f7e0cc58737f
Default interface in readFile method
author | Miguel Ángel Bárcena Rodríguez <miguelangel@obraencurso.es> |
---|---|
date | Sun, 14 Sep 2014 17:23:02 +0200 |
parents | f5ec50b625d1 |
children | 65e7ae0d0e63 |
comparison
equal
deleted
inserted
replaced
20:f5ec50b625d1 | 21:f7e0cc58737f |
---|---|
51 "__character_set": character_set of the file | 51 "__character_set": character_set of the file |
52 "__generator": program which the file is created | 52 "__generator": program which the file is created |
53 "__cancel": Boolean value, True mean that the read process must stop | 53 "__cancel": Boolean value, True mean that the read process must stop |
54 "__filename": The filename of the fiebdc file that is readed | 54 "__filename": The filename of the fiebdc file that is readed |
55 "__pattern": re compiled pattern dict | 55 "__pattern": re compiled pattern dict |
56 "__statistics": Statistics object, records number | |
56 Methods: | 57 Methods: |
57 __init__(self, filename=None, budget=None) | 58 __init__(self, filename=None, budget=None) |
58 cancel(self) | 59 cancel(self) |
59 eraseControlCharacters(self, string) | 60 eraseControlCharacters(self, string) |
60 validateCode(self, code) | 61 validateCode(self, code) |
115 "descomposition" : re.compile(u"^([^:]+):(.*)$"), | 116 "descomposition" : re.compile(u"^([^:]+):(.*)$"), |
116 "var" : re.compile(u"^([$%][A-ZÑ][()0-9, ]*)=(.*)$"), | 117 "var" : re.compile(u"^([$%][A-ZÑ][()0-9, ]*)=(.*)$"), |
117 "after_first_tilde" : re.compile(u"^[^~]*~"), | 118 "after_first_tilde" : re.compile(u"^[^~]*~"), |
118 "end_control" : re.compile(u"((\r\n)| |\t)+$"), | 119 "end_control" : re.compile(u"((\r\n)| |\t)+$"), |
119 } | 120 } |
121 self.__statistics = Statistics() | |
120 | 122 |
121 def cancel(self): | 123 def cancel(self): |
122 """def cancel(self) | 124 """def cancel(self) |
123 | 125 |
124 Sets the "__cancel" attribute to True, It stops the read process. | 126 Sets the "__cancel" attribute to True, It stops the read process. |
320 # TODO: test ~Q ~J ~G | 322 # TODO: test ~Q ~J ~G |
321 # TODO: ~P. Registro tipo Descripción Paramétrica. | 323 # TODO: ~P. Registro tipo Descripción Paramétrica. |
322 # TODO: ~O. Registro tipo Relación Comercial. | 324 # TODO: ~O. Registro tipo Relación Comercial. |
323 # TODO: test records | 325 # TODO: test records |
324 _field_list = record.split(u"|") | 326 _field_list = record.split(u"|") |
325 self._record_number = self._record_number +1 | 327 self.__statistics.records = self.__statistics.records +1 |
326 _budget = self.__budget | 328 _budget = self.__budget |
327 if _field_list[0] == u"V": | 329 if _field_list[0] == u"V": |
328 self._record_V_number += 1 | 330 self.__statistics.V += 1 |
329 self._parseV(_field_list) | 331 self._parseV(_field_list) |
330 elif _field_list[0] == u"C": | 332 elif _field_list[0] == u"C": |
331 self._record_C_number += 1 | 333 self.__statistics.C += 1 |
332 self._parseC(_field_list) | 334 self._parseC(_field_list) |
333 elif _field_list[0] == u"D": | 335 elif _field_list[0] == u"D": |
334 self._record_D_number += 1 | 336 self.__statistics.D += 1 |
335 self._parseDY(_field_list) | 337 self._parseDY(_field_list) |
336 elif _field_list[0] == u"Y": | 338 elif _field_list[0] == u"Y": |
337 self._record_Y_number += 1 | 339 self.__statistics.Y += 1 |
338 self._parseDY(_field_list) | 340 self._parseDY(_field_list) |
339 elif _field_list[0] == u"M": | 341 elif _field_list[0] == u"M": |
340 self._record_M_number += 1 | 342 self.__statistics.M += 1 |
341 self._parseMN(_field_list) | 343 self._parseMN(_field_list) |
342 elif _field_list[0] == u"N": | 344 elif _field_list[0] == u"N": |
343 self._record_N_number += 1 | 345 self.__statistics.N += 1 |
344 self._parseMN(_field_list) | 346 self._parseMN(_field_list) |
345 elif _field_list[0] == u"T": | 347 elif _field_list[0] == u"T": |
346 self._record_T_number += 1 | 348 self.__statistics.T += 1 |
347 self._parseT(_field_list) | 349 self._parseT(_field_list) |
348 elif _field_list[0] == u"K": | 350 elif _field_list[0] == u"K": |
349 self._record_K_number += 1 | 351 self.__statistics.K += 1 |
350 self._parseK(_field_list) | 352 self._parseK(_field_list) |
351 elif _field_list[0] == u"W": | 353 elif _field_list[0] == u"W": |
352 self._record_W_number += 1 | 354 self.__statistics.W += 1 |
353 self._parseW(_field_list) | 355 self._parseW(_field_list) |
354 elif _field_list[0] == u"L": | 356 elif _field_list[0] == u"L": |
355 self._record_L_number += 1 | 357 self.__statistics.L += 1 |
356 self._parseL(_field_list) | 358 self._parseL(_field_list) |
357 elif _field_list[0] == u"Q": | 359 elif _field_list[0] == u"Q": |
358 self._record_Q_number += 1 | 360 self.__statistics.Q += 1 |
359 self._parseQ(_field_list) | 361 self._parseQ(_field_list) |
360 elif _field_list[0] == u"J": | 362 elif _field_list[0] == u"J": |
361 self._record_J_number += 1 | 363 self.__statistics.J += 1 |
362 self._parseJ(_field_list) | 364 self._parseJ(_field_list) |
363 elif _field_list[0] == u"G": | 365 elif _field_list[0] == u"G": |
364 self._record_G_number += 1 | 366 self.__statistics.G += 1 |
365 self._parseG(_field_list) | 367 self._parseG(_field_list) |
366 elif _field_list[0] == u"E": | 368 elif _field_list[0] == u"E": |
367 self._record_E_number += 1 | 369 self.__statistics.E += 1 |
368 self._parseE(_field_list) | 370 self._parseE(_field_list) |
369 elif _field_list[0] == "O": | 371 elif _field_list[0] == "O": |
370 self._record_O_number += 1 | 372 self.__statistics.O += 1 |
371 elif _field_list[0] == u"P": | 373 elif _field_list[0] == u"P": |
372 self._record_P_number += 1 | 374 self.__statistics.P += 1 |
373 self._parseP(_field_list) | 375 self._parseP(_field_list) |
374 elif _field_list[0] == u"X": | 376 elif _field_list[0] == u"X": |
375 self._record_X_number += 1 | 377 self.__statistics.X += 1 |
376 self._parseX(_field_list) | 378 self._parseX(_field_list) |
377 elif _field_list[0] == u"B": | 379 elif _field_list[0] == u"B": |
378 self._record_B_number += 1 | 380 self.__statistics.B += 1 |
379 self._parseB(_field_list) | 381 self._parseB(_field_list) |
380 elif _field_list[0] == u"F": | 382 elif _field_list[0] == u"F": |
381 self._record_F_number += 1 | 383 self.__statistics.F += 1 |
382 self._parseF(_field_list) | 384 self._parseF(_field_list) |
383 elif _field_list[0] == u"A": | 385 elif _field_list[0] == u"A": |
384 self._record_A_number += 1 | 386 self.__statistics.A += 1 |
385 self._parseA(_field_list) | 387 self._parseA(_field_list) |
386 else: | 388 else: |
387 self._record_Unknow_number += 1 | 389 self.__statistics.unknow += 1 |
388 | 390 |
389 def _parseV(self, field_list): | 391 def _parseV(self, field_list): |
390 """_parseV(self, field_list) | 392 """_parseV(self, field_list) |
391 | 393 |
392 field_list: field list of the record | 394 field_list: field list of the record |
399 6- [Comment] | 401 6- [Comment] |
400 7- [Data type] | 402 7- [Data type] |
401 8- [Number budget certificate] | 403 8- [Number budget certificate] |
402 9- [Date budget certificate] | 404 9- [Date budget certificate] |
403 """ | 405 """ |
404 if self._record_number != 1: | 406 if self.__statistics.records != 1: |
405 print utils.mapping(_("The 'V' record (Property and Version) "\ | 407 print utils.mapping(_("The 'V' record (Property and Version) "\ |
406 "must be the first record in the file but it is the "\ | 408 "must be the first record in the file but it is the "\ |
407 "number: $1"), (self._record_number,)) | 409 "number: $1"), (self.__statistics.records,)) |
408 print _("The default values were taken and this V record is "\ | 410 print _("The default values were taken and this V record is "\ |
409 "ignored") | 411 "ignored") |
410 return | 412 return |
411 # _____number of fields_____ | 413 # _____number of fields_____ |
412 # Any INFORMATION after last field separator is ignored | 414 # Any INFORMATION after last field separator is ignored |
492 self.__budget.setBudgetype(_data_type) | 494 self.__budget.setBudgetype(_data_type) |
493 self.__budget.setCertificateOrder(_number_certificate) | 495 self.__budget.setCertificateOrder(_number_certificate) |
494 self.__budget.setCertificateDate(_parsed_date_cerfificate) | 496 self.__budget.setCertificateDate(_parsed_date_cerfificate) |
495 elif _data_type != "": | 497 elif _data_type != "": |
496 self.__budget.setBudgeType(_data_type) | 498 self.__budget.setBudgeType(_data_type) |
497 self.num_valid_record = self.num_valid_record + 1 | 499 self.__statistics.valid = self.__statistics.valid + 1 |
498 | 500 |
499 def _parseK(self, field_list): | 501 def _parseK(self, field_list): |
500 """_parseK(self, field_list) | 502 """_parseK(self, field_list) |
501 | 503 |
502 field_list: field list of the record | 504 field_list: field list of the record |
734 "DCD" : _DI, | 736 "DCD" : _DI, |
735 "DIVISA": _DIVISA} | 737 "DIVISA": _DIVISA} |
736 _decimal_index = _decimal_index + 13 | 738 _decimal_index = _decimal_index + 13 |
737 self.__budget.setDecimals(_percentage_dict, | 739 self.__budget.setDecimals(_percentage_dict, |
738 (_decimal_index//13)) | 740 (_decimal_index//13)) |
739 self.num_valid_record = self.num_valid_record +1 | 741 self.__statistics.valid = self.__statistics.valid +1 |
740 | 742 |
741 def _parseC(self, field_list): | 743 def _parseC(self, field_list): |
742 """_parseC(self, field_list) | 744 """_parseC(self, field_list) |
743 | 745 |
744 field_list: field list of the record | 746 field_list: field list of the record |
911 _type = 0 | 913 _type = 0 |
912 _subtype = u"" | 914 _subtype = u"" |
913 self.__budget.setRecord(_code.encode("utf8"), _synonyms, _hierarchy, | 915 self.__budget.setRecord(_code.encode("utf8"), _synonyms, _hierarchy, |
914 _unit.encode("utf8"), _summary.encode("utf8"), | 916 _unit.encode("utf8"), _summary.encode("utf8"), |
915 _prices, _dates, _type, _subtype.encode("utf8")) | 917 _prices, _dates, _type, _subtype.encode("utf8")) |
916 self.num_valid_record = self.num_valid_record + 1 | 918 self.__statistics.valid = self.__statistics.valid + 1 |
917 | 919 |
918 def _parseDY(self, field_list): | 920 def _parseDY(self, field_list): |
919 """_parseDY(self, field_list) | 921 """_parseDY(self, field_list) |
920 | 922 |
921 field_list: field list of the record | 923 field_list: field list of the record |
982 else: #_record_type == "Y" | 984 else: #_record_type == "Y" |
983 _position = -1 | 985 _position = -1 |
984 self.__budget.setTree(_code.encode("utf8"), _child_code.encode("utf8"), _position, _factor, | 986 self.__budget.setTree(_code.encode("utf8"), _child_code.encode("utf8"), _position, _factor, |
985 _yield, "", "", "", "") | 987 _yield, "", "", "", "") |
986 _child_index = _child_index + 3 | 988 _child_index = _child_index + 3 |
987 self.num_valid_record = self.num_valid_record +1 | 989 self.__statistics.valid = self.__statistics.valid +1 |
988 | 990 |
989 def _parseT(self, field_list): | 991 def _parseT(self, field_list): |
990 """_parseT(self, field_list) | 992 """_parseT(self, field_list) |
991 | 993 |
992 field_list: field list of the record | 994 field_list: field list of the record |
1010 # "#" and "##" characters at the end of the code are erased | 1012 # "#" and "##" characters at the end of the code are erased |
1011 # invalid characters are also erased | 1013 # invalid characters are also erased |
1012 _code = self.validateCode(_code) | 1014 _code = self.validateCode(_code) |
1013 # _____Text_____ | 1015 # _____Text_____ |
1014 self.__budget.setText(_code.encode("utf8"), _text.encode("utf8")) | 1016 self.__budget.setText(_code.encode("utf8"), _text.encode("utf8")) |
1015 self.num_valid_record = self.num_valid_record + 1 | 1017 self.__statistics.valid = self.__statistics.valid + 1 |
1016 | 1018 |
1017 def _parseMN(self, field_list): | 1019 def _parseMN(self, field_list): |
1018 """_parseMN(self, field_list) | 1020 """_parseMN(self, field_list) |
1019 | 1021 |
1020 field_list: field list of the record | 1022 field_list: field list of the record |
1149 _line_list.append([_linetype, _comment, _units, | 1151 _line_list.append([_linetype, _comment, _units, |
1150 _length, _width, _height, _formula]) | 1152 _length, _width, _height, _formula]) |
1151 _line_index = _line_index + 6 | 1153 _line_index = _line_index + 6 |
1152 self.__budget.setTree(_parent_code, _child_code.encode("utf8"), _path, "", "", | 1154 self.__budget.setTree(_parent_code, _child_code.encode("utf8"), _path, "", "", |
1153 _total, _line_list, _label.encode("utf8"), _record_type.encode("utf8")) | 1155 _total, _line_list, _label.encode("utf8"), _record_type.encode("utf8")) |
1154 self.num_valid_record = self.num_valid_record + 1 | 1156 self.__statistics.valid = self.__statistics.valid + 1 |
1155 | 1157 |
1156 def _parseW(self, field_list): | 1158 def _parseW(self, field_list): |
1157 """_parseW(self, field_list) | 1159 """_parseW(self, field_list) |
1158 | 1160 |
1159 field_list: field list of the record | 1161 field_list: field list of the record |
1188 # _____section_title_____ | 1190 # _____section_title_____ |
1189 if _field_code != u"": | 1191 if _field_code != u"": |
1190 _field_dict[_field_code.encode("utf8")] = _field_title.encode("utf8") | 1192 _field_dict[_field_code.encode("utf8")] = _field_title.encode("utf8") |
1191 _field_index = _field_index + 2 | 1193 _field_index = _field_index + 2 |
1192 self.__budget.setSheetFields(_field_dict) | 1194 self.__budget.setSheetFields(_field_dict) |
1193 self.num_valid_record = self.num_valid_record +1 | 1195 self.__statistics.valid = self.__statistics.valid +1 |
1194 | 1196 |
1195 def _parseL(self, field_list): | 1197 def _parseL(self, field_list): |
1196 """_parseL(self, field_list) | 1198 """_parseL(self, field_list) |
1197 | 1199 |
1198 field_list: field list of the record | 1200 field_list: field list of the record |
1238 _section_title = self.delete_control_space(_section_title) | 1240 _section_title = self.delete_control_space(_section_title) |
1239 if _section_code != u"": | 1241 if _section_code != u"": |
1240 _section_dict[_section_code.encode("utf8")] = _section_title.encode("utf8") | 1242 _section_dict[_section_code.encode("utf8")] = _section_title.encode("utf8") |
1241 _section_index = _section_index + 2 | 1243 _section_index = _section_index + 2 |
1242 self.__budget.setSheetSections(_section_dict) | 1244 self.__budget.setSheetSections(_section_dict) |
1243 self.num_valid_record = self.num_valid_record +1 | 1245 self.__statistics.valid = self.__statistics.valid +1 |
1244 | 1246 |
1245 else: | 1247 else: |
1246 # Any INFORMATION after last field separator is ignored | 1248 # Any INFORMATION after last field separator is ignored |
1247 # The record must have 5 fields | 1249 # The record must have 5 fields |
1248 if len(field_list) > 5: | 1250 if len(field_list) > 5: |
1281 _paragraph_dict[ _paragraph_code.encode("utf8") ] = _section_text.encode("utf8") | 1283 _paragraph_dict[ _paragraph_code.encode("utf8") ] = _section_text.encode("utf8") |
1282 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") | 1284 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") |
1283 _section_index = _section_index + 2 | 1285 _section_index = _section_index + 2 |
1284 self.__budget.setSheetParagraphs(_paragraph_dict) | 1286 self.__budget.setSheetParagraphs(_paragraph_dict) |
1285 self.__budget.setSheetRecord(_record_code.encode("utf8"), "*", _section_dict) | 1287 self.__budget.setSheetRecord(_record_code.encode("utf8"), "*", _section_dict) |
1286 self.num_valid_record = self.num_valid_record +1 | 1288 self.__statistics.valid = self.__statistics.valid +1 |
1287 | 1289 |
1288 def _parseQ(self, field_list): | 1290 def _parseQ(self, field_list): |
1289 """_parseQ(self, field_list) | 1291 """_parseQ(self, field_list) |
1290 | 1292 |
1291 field_list: field list of the record | 1293 field_list: field list of the record |
1342 _field_dict[_field_key] = _section_dict | 1344 _field_dict[_field_key] = _section_dict |
1343 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") | 1345 _section_dict[_section_code.encode("utf8")] = _paragraph_code.encode("utf8") |
1344 _section_index = _section_index + 3 | 1346 _section_index = _section_index + 3 |
1345 for _field, _section_dict in _field_dict.iteritems(): | 1347 for _field, _section_dict in _field_dict.iteritems(): |
1346 self.__budget.setSheetRecord(_record_code.encode("utf8"), _field.encode("utf8"), _section_dict) | 1348 self.__budget.setSheetRecord(_record_code.encode("utf8"), _field.encode("utf8"), _section_dict) |
1347 self.num_valid_record = self.num_valid_record +1 | 1349 self.__statistics.valid = self.__statistics.valid +1 |
1348 | 1350 |
1349 def _parseJ(self, field_list): | 1351 def _parseJ(self, field_list): |
1350 """_parseJ(self, field_list) | 1352 """_parseJ(self, field_list) |
1351 | 1353 |
1352 field_list: field list of the record | 1354 field_list: field list of the record |
1373 if _paragraph_text == u"": | 1375 if _paragraph_text == u"": |
1374 # TODO: rtf and html files | 1376 # TODO: rtf and html files |
1375 print "Html and rtf files not yet implemented in ~J record" | 1377 print "Html and rtf files not yet implemented in ~J record" |
1376 else: | 1378 else: |
1377 self.__budget.setSheetParagraph(paragraph_code.encode("utf8"), paragraph_text.encode("utf8")) | 1379 self.__budget.setSheetParagraph(paragraph_code.encode("utf8"), paragraph_text.encode("utf8")) |
1378 self.num_valid_record = self.num_valid_record +1 | 1380 self.__statistics.valid = self.__statistics.valid +1 |
1379 | 1381 |
1380 def _parseG(self, field_list): | 1382 def _parseG(self, field_list): |
1381 """_parseG(self, field_list) | 1383 """_parseG(self, field_list) |
1382 | 1384 |
1383 field_list: field list of the record | 1385 field_list: field list of the record |
1442 print utils.mapping(_("The file $1 do not exist"), | 1444 print utils.mapping(_("The file $1 do not exist"), |
1443 (_grafic_file_path,)) | 1445 (_grafic_file_path,)) |
1444 if len(_grafic_file_list) > 0: | 1446 if len(_grafic_file_list) > 0: |
1445 for _grafic_file in _tested_grafic_file_list: | 1447 for _grafic_file in _tested_grafic_file_list: |
1446 self.__budget.addFile(_record_code.encode("utf8"), _grafic_file, "img", "") | 1448 self.__budget.addFile(_record_code.encode("utf8"), _grafic_file, "img", "") |
1447 self.num_valid_record = self.num_valid_record +1 | 1449 self.__statistics.valid = self.__statistics.valid +1 |
1448 | 1450 |
1449 def _parseE(self, field_list): | 1451 def _parseE(self, field_list): |
1450 """_parseE(self, field_list) | 1452 """_parseE(self, field_list) |
1451 | 1453 |
1452 field_list: field list of the record | 1454 field_list: field list of the record |
1541 _email = _c_w_e_list[2] | 1543 _email = _c_w_e_list[2] |
1542 self.__budget.setCompany(_company_code.encode("utf8"), | 1544 self.__budget.setCompany(_company_code.encode("utf8"), |
1543 _sumamary.encode("utf8"), _name.encode("utf8"), | 1545 _sumamary.encode("utf8"), _name.encode("utf8"), |
1544 _local_offices, _cif.encode("utf8"), | 1546 _local_offices, _cif.encode("utf8"), |
1545 _web.encode("utf8"), _email.encode("utf8")) | 1547 _web.encode("utf8"), _email.encode("utf8")) |
1546 self.num_valid_record = self.num_valid_record +1 | 1548 self.__statistics.valid = self.__statistics.valid +1 |
1547 | 1549 |
1548 def _parseX(self, field_list): | 1550 def _parseX(self, field_list): |
1549 """_parseX(self, field_list) | 1551 """_parseX(self, field_list) |
1550 | 1552 |
1551 field_list: field list of the record | 1553 field_list: field list of the record |
1596 _ti_value = _field_2_list[_ti_index+1] | 1598 _ti_value = _field_2_list[_ti_index+1] |
1597 if _ti_code != u"" and _ti_value != u"": | 1599 if _ti_code != u"" and _ti_value != u"": |
1598 _ti_dict[_ti_code.encode("utf8")] = _ti_value.encode("utf8") | 1600 _ti_dict[_ti_code.encode("utf8")] = _ti_value.encode("utf8") |
1599 _ti_index = _ti_index + 2 | 1601 _ti_index = _ti_index + 2 |
1600 self.__budget.setTecnicalInformation(_record_code.encode("utf8"), _ti_dict) | 1602 self.__budget.setTecnicalInformation(_record_code.encode("utf8"), _ti_dict) |
1601 self.num_valid_record = self.num_valid_record +1 | 1603 self.__statistics.valid = self.__statistics.valid +1 |
1602 | 1604 |
1603 def _parseF(self, field_list): | 1605 def _parseF(self, field_list): |
1604 """_parseF(self, field_list) | 1606 """_parseF(self, field_list) |
1605 | 1607 |
1606 field_list: field list of the record | 1608 field_list: field list of the record |
1701 print utils.mapping(_("The file $1 do not exist"), | 1703 print utils.mapping(_("The file $1 do not exist"), |
1702 (_file_path,)) | 1704 (_file_path,)) |
1703 if len(_tested_files_list) > 0: | 1705 if len(_tested_files_list) > 0: |
1704 for _file in _tested_file_list: | 1706 for _file in _tested_file_list: |
1705 self.__budget.addFile(_record_code.encode("utf8"), _file[0], file[1], file[2]) | 1707 self.__budget.addFile(_record_code.encode("utf8"), _file[0], file[1], file[2]) |
1706 self.num_valid_record = self.num_valid_record +1 | 1708 self.__statistics.valid = self.__statistics.valid +1 |
1707 | 1709 |
1708 def _parseB(self, field_list): | 1710 def _parseB(self, field_list): |
1709 """_parseB(self, field_list) | 1711 """_parseB(self, field_list) |
1710 | 1712 |
1711 field_list: field list of the record | 1713 field_list: field list of the record |
1730 # invalid characters are also erased | 1732 # invalid characters are also erased |
1731 _code = self.validateCode(_code) | 1733 _code = self.validateCode(_code) |
1732 _new_code = self.validateCode(_new_code) | 1734 _new_code = self.validateCode(_new_code) |
1733 # change code | 1735 # change code |
1734 self.__budget.changeCode(_code, _new_code) | 1736 self.__budget.changeCode(_code, _new_code) |
1735 self.num_valid_record = self.num_valid_record + 1 | 1737 self.__statistics.valid = self.__statistics.valid + 1 |
1736 | 1738 |
1737 def _parseA(self, field_list): | 1739 def _parseA(self, field_list): |
1738 """_parseA(self, field_list) | 1740 """_parseA(self, field_list) |
1739 | 1741 |
1740 field_list: field list of the record | 1742 field_list: field list of the record |
1767 # replace "_" to " " | 1769 # replace "_" to " " |
1768 _labels = _labels.replace(u"_",u" ") | 1770 _labels = _labels.replace(u"_",u" ") |
1769 _label_list = _labels.split(u"\\") | 1771 _label_list = _labels.split(u"\\") |
1770 for _label in _label_list: | 1772 for _label in _label_list: |
1771 self.__budget.addLabel(_code.encode("utf8"), _label.encode("utf8")) | 1773 self.__budget.addLabel(_code.encode("utf8"), _label.encode("utf8")) |
1772 self.num_valid_record = self.num_valid_record + 1 | 1774 self.__statistics.valid = self.__statistics.valid + 1 |
1773 | 1775 |
1774 def _parseP(self, field_list): | 1776 def _parseP(self, field_list): |
1775 """_parseP(self, field_list) | 1777 """_parseP(self, field_list) |
1776 | 1778 |
1777 field_list: Parametric record | 1779 field_list: Parametric record |
1968 _description = _final_description[:-2] | 1970 _description = _final_description[:-2] |
1969 _lines = _description.split(u"\r\n") | 1971 _lines = _description.split(u"\r\n") |
1970 for _line in _lines: | 1972 for _line in _lines: |
1971 pass | 1973 pass |
1972 #print _line | 1974 #print _line |
1973 self.num_valid_record = self.num_valid_record + 1 | 1975 self.__statistics.valid = self.__statistics.valid + 1 |
1974 | 1976 |
1975 def readFile(self, budget=None, filename=None, interface=None): | 1977 def readFile(self, budget=None, filename=None, interface=None): |
1976 """readFile(self, budget=None, filename=None) | 1978 """readFile(self, budget=None, filename=None) |
1977 | 1979 |
1978 filename: the filename of the fiebdc file | 1980 filename: the filename of the fiebdc file |
1979 budget: base.obra object | 1981 budget: base.obra object |
1980 interface: a object to send messages | 1982 interface: a object to send messages |
1981 must have printf(message) progress(percent) | 1983 must have readFile_send_message(message) |
1982 recordStatistics(...) | 1984 readFile_set_statistics(statistics) |
1985 readFile_progress(percent) | |
1986 readFile_end() | |
1987 readFile_cancel() | |
1983 Return the budget objetc or None if the file can be readed | 1988 Return the budget objetc or None if the file can be readed |
1984 """ | 1989 """ |
1985 if not filename is None and not budget is None: | 1990 if not filename is None and not budget is None: |
1986 self.__filename = filename | 1991 self.__filename = filename |
1987 self.__budget = budget | 1992 self.__budget = budget |
1988 self.__budget.filename = self.__filename | 1993 self.__budget.filename = self.__filename |
1989 if self.__filename is None or self.__budget is None or self.__cancel: | 1994 if self.__filename is None or self.__budget is None or self.__cancel: |
1990 return None | 1995 return None |
1991 if not os.path.exists(self.__filename): | 1996 if not os.path.exists(self.__filename): |
1992 return None | 1997 return None |
1998 if interface is None: | |
1999 interface = Interface() | |
2000 interface.readFile_set_statistics(self.__statistics) | |
1993 _time = time.time() | 2001 _time = time.time() |
1994 try: | 2002 try: |
1995 _file = open(self.__filename, 'r') | 2003 _file = open(self.__filename, 'r') |
1996 except IOError: | 2004 except IOError: |
1997 print utils.mapping("IOError: $1", (self.__filename,)) | 2005 print utils.mapping("IOError: $1", (self.__filename,)) |
1998 return None | 2006 return None |
1999 self.__budget.filename = self.__filename | 2007 self.__budget.filename = self.__filename |
2000 self._record_number = 0 | 2008 interface.readFile_send_message(utils.mapping(_("Loading file $1"), |
2001 self.num_valid_record = 0 | 2009 (self.__filename,))) |
2002 self._record_V_number = 0 | |
2003 self._record_C_number = 0 | |
2004 self._record_D_number = 0 | |
2005 self._record_Y_number = 0 | |
2006 self._record_M_number = 0 | |
2007 self._record_N_number = 0 | |
2008 self._record_T_number = 0 | |
2009 self._record_K_number = 0 | |
2010 self._record_W_number = 0 | |
2011 self._record_L_number = 0 | |
2012 self._record_Q_number = 0 | |
2013 self._record_J_number = 0 | |
2014 self._record_G_number = 0 | |
2015 self._record_E_number = 0 | |
2016 self._record_O_number = 0 | |
2017 self._record_P_number = 0 | |
2018 self._record_X_number = 0 | |
2019 self._record_B_number = 0 | |
2020 self._record_F_number = 0 | |
2021 self._record_A_number = 0 | |
2022 self._record_Unknow_number = 0 | |
2023 print utils.mapping(_("Loading file $1"), (self.__filename,)) | |
2024 _filesize = float(os.path.getsize(self.__filename)) | 2010 _filesize = float(os.path.getsize(self.__filename)) |
2025 interface.progress(_file.tell() / _filesize) | 2011 interface.readFile_progress(_file.tell() / _filesize) |
2026 _buffer = _file.read(1000) | 2012 _buffer = _file.read(1000) |
2027 # set codepage from V record | 2013 # set codepage from V record |
2028 _record_list = _buffer.split("~") | 2014 _record_list = _buffer.split("~") |
2029 registro_V = _record_list[1] | 2015 registro_V = _record_list[1] |
2030 # ~V|[PROPIEDAD_ARCHIVO]|VERSION_FORMATO[\DDMMAAAA]|[PROGRAMA_EMISION]| | 2016 # ~V|[PROPIEDAD_ARCHIVO]|VERSION_FORMATO[\DDMMAAAA]|[PROGRAMA_EMISION]| |
2037 if len(registro_V) > 5: | 2023 if len(registro_V) > 5: |
2038 _version = registro_V[5].strip() | 2024 _version = registro_V[5].strip() |
2039 # remove leading spaces | 2025 # remove leading spaces |
2040 if _version in self.__character_sets_dict: | 2026 if _version in self.__character_sets_dict: |
2041 self.__character_set = self.__character_sets_dict[_version] | 2027 self.__character_set = self.__character_sets_dict[_version] |
2042 print utils.mapping(_("FIEBDC character encoding: $1"),(self.__character_set,)) | 2028 interface.readFile_send_message(utils.mapping( |
2029 _("FIEBDC character encoding: $1"), | |
2030 (self.__character_set,))) | |
2043 else: | 2031 else: |
2044 print utils.mapping(_("This Character encoding do not exist in "\ | 2032 interface.readFile_send_message(utils.mapping( |
2045 "FIEBDC3! Default Character encoding: $1"), | 2033 _("This Character encoding do not exist in "\ |
2046 (self.__character_set,)) | 2034 "FIEBDC3! Default Character encoding: $1"), |
2035 (self.__character_set,))) | |
2047 else: | 2036 else: |
2048 print utils.mapping(_("This V record dot have a character encoding! "\ | 2037 interface.readFile_send_message(utils.mapping(_( |
2038 "This V record dot have a character encoding! "\ | |
2049 "Default character encoding: $1"), | 2039 "Default character encoding: $1"), |
2050 (self.__character_set,)) | 2040 (self.__character_set,))) |
2051 else: | 2041 else: |
2052 print utils.mapping(_("Not 'V' record in File! Default character encoding: "\ | 2042 interface.readFile_send_message(utils.mapping(_( |
2053 "$1"), (self.__character_set,)) | 2043 "Not 'V' record in File! Default character encoding: "\ |
2044 "$1"), (self.__character_set,))) | |
2054 _buffer = unicode(_buffer, self.__character_set) | 2045 _buffer = unicode(_buffer, self.__character_set) |
2055 # Any INFORMATION between the beginning of the file and the | 2046 # Any INFORMATION between the beginning of the file and the |
2056 # beginning of the first registry “~” is ignored | 2047 # beginning of the first registry “~” is ignored |
2057 #"after_first_tilde" : "^[^~]*~" | 2048 #"after_first_tilde" : "^[^~]*~" |
2058 _buffer = self.__pattern["after_first_tilde"].sub("",_buffer) | 2049 _buffer = self.__pattern["after_first_tilde"].sub("",_buffer) |
2078 _last_record = u"" | 2069 _last_record = u"" |
2079 for record in _record_list: | 2070 for record in _record_list: |
2080 if self.__cancel: | 2071 if self.__cancel: |
2081 break | 2072 break |
2082 self.parseRecord(record) | 2073 self.parseRecord(record) |
2083 interface.progress(_file.tell() / _filesize) | 2074 interface.readFile_progress(_file.tell() / _filesize) |
2084 _buffer2 = _file.read(100000) | 2075 _buffer2 = _file.read(100000) |
2085 _buffer2 = unicode(_buffer2, self.__character_set) | 2076 _buffer2 = unicode(_buffer2, self.__character_set) |
2086 _buffer = _last_record + _buffer2 | 2077 _buffer = _last_record + _buffer2 |
2087 _file.close() | 2078 _file.close() |
2088 if self.__cancel: | 2079 if self.__cancel: |
2089 print _("Process terminated") | 2080 interface.readFile_cancel() |
2090 return None | 2081 return None |
2091 else: | 2082 else: |
2092 print utils.mapping(_("Time to load: $1 seconds"), | 2083 self.__statistics.time = time.time()-_time |
2093 (("%.2f" %(time.time()-_time)),)) | 2084 if self.__statistics.O > 0: |
2094 print utils.mapping(_("Records/Valid Records: $1/$2"), | 2085 interface.readFile_send_message( |
2095 (self._record_number, self.num_valid_record)) | 2086 utils.mapping(_("$1 unsuported record type O: "\ |
2096 if self._record_O_number > 0: | 2087 "Comercial Relationship"), (self.__statistics.O,))) |
2097 print utils.mapping(_("$1 unsuported record type O: "\ | 2088 if self.__statistics.valid == 0: |
2098 "Comercial Relationship"), (self._record_O_number,)) | 2089 interface.readFile_send_message(_("This file is not a valid FIBDC3 file")) |
2099 if self.num_valid_record == 0: | |
2100 print _("This file is not a valid FIBDC3 file") | |
2101 return None | 2090 return None |
2102 _str = "" | 2091 interface.readFile_end() |
2103 for type in \ | |
2104 [("V", self._record_V_number), | |
2105 ("C", self._record_C_number), | |
2106 ("D", self._record_D_number), | |
2107 ("Y", self._record_Y_number), | |
2108 ("M", self._record_M_number), | |
2109 ("N", self._record_N_number), | |
2110 ("T", self._record_T_number), | |
2111 ("K", self._record_K_number), | |
2112 ("W", self._record_W_number), | |
2113 ("L", self._record_L_number), | |
2114 ("Q", self._record_Q_number), | |
2115 ("J", self._record_J_number), | |
2116 ("G", self._record_G_number), | |
2117 ("E", self._record_E_number), | |
2118 ("O", self._record_O_number), | |
2119 ("P", self._record_P_number), | |
2120 ("X", self._record_X_number), | |
2121 ("B", self._record_B_number), | |
2122 ("F", self._record_F_number), | |
2123 ("A", self._record_A_number), | |
2124 ("?", self._record_Unknow_number)]: | |
2125 _str = _str + "%s: %s\n" %(type[0], type[1]) | |
2126 print _str | |
2127 self._testBudget(self.__budget) | 2092 self._testBudget(self.__budget) |
2128 return self.__budget | 2093 return self.__budget |
2129 | 2094 |
2130 def _testBudget(self, budget): | 2095 def _testBudget(self, budget): |
2131 """testBudget(self,budget) | 2096 """testBudget(self,budget) |
2162 def delete_control(self, text): | 2127 def delete_control(self, text): |
2163 text = text.replace(u"\t", u"") | 2128 text = text.replace(u"\t", u"") |
2164 text = text.replace(u"\r", u"") | 2129 text = text.replace(u"\r", u"") |
2165 text = text.replace(u"\n", u"") | 2130 text = text.replace(u"\n", u"") |
2166 return text | 2131 return text |
2132 | |
2133 class Interface(object): | |
2134 """fiebdc.Interface | |
2135 | |
2136 Description: | |
2137 An example interface | |
2138 Constructor: | |
2139 fiebdc.Interface() | |
2140 Ancestry: | |
2141 +-- object | |
2142 +-- Interface | |
2143 Atributes: | |
2144 "__progress": The progress percentage | |
2145 "__statistics": The record statistics | |
2146 Methods: | |
2147 __init__(self) | |
2148 readFile_send_message(message) | |
2149 readFile_progress(percent) | |
2150 readFile_set_statistics(statistics) | |
2151 readFile_end() | |
2152 readFile_cancel() | |
2153 | |
2154 """ | |
2155 def __init__(self): | |
2156 self.__progress = 0.0 | |
2157 self.__statistics = Statistics() | |
2158 | |
2159 def readFile_set_statistics(self, statistics): | |
2160 """readFile_set_statistics(statistics) | |
2161 | |
2162 statistics: record statistics from readFile method | |
2163 | |
2164 sets record statistics | |
2165 """ | |
2166 self.__statistics = statistics | |
2167 | |
2168 def readFile_send_message(self, message): | |
2169 """readFile_send_message(message) | |
2170 | |
2171 message: mesage from readFile method | |
2172 | |
2173 print message | |
2174 """ | |
2175 print message | |
2176 | |
2177 def readFile_progress(self, percent): | |
2178 """progress(percent) | |
2179 | |
2180 percent: Percentage executed. | |
2181 | |
2182 Sets progress | |
2183 """ | |
2184 self.__progress = percent | |
2185 | |
2186 def readFile_end(self): | |
2187 """readFile_end() | |
2188 | |
2189 The readFile method end successfully | |
2190 """ | |
2191 print self.__statistics | |
2192 | |
2193 def readFile_cancel(self): | |
2194 """readFile_cancel() | |
2195 | |
2196 The readFile method is canceled | |
2197 """ | |
2198 print _("Process terminated") | |
2199 | |
2200 class Statistics(object): | |
2201 """fiebdc.Statistics | |
2202 | |
2203 Description: | |
2204 BC3 Statistics. Records types. | |
2205 Constructor: | |
2206 fiebdc.Statistics() | |
2207 Ancestry: | |
2208 +-- object | |
2209 +-- Statistics | |
2210 Atributes: | |
2211 "records": number of records | |
2212 "valid": number of valid records | |
2213 "V": number of V records | |
2214 "C": number of C records | |
2215 "D":number of D records | |
2216 "Y":number of Y records | |
2217 "M":number of M records | |
2218 "N":number of N records | |
2219 "T":number of T records | |
2220 "K":number of K records | |
2221 "W":number of W records | |
2222 "L":number of L records | |
2223 "Q":number of Q records | |
2224 "J": number of J records | |
2225 "G":number of G records | |
2226 "E":number of E records | |
2227 "O":number of O records | |
2228 "P":number of P records | |
2229 "X":number of X records | |
2230 "B":number of B records | |
2231 "F":number of F records | |
2232 "A":number of A records | |
2233 "unknow": number of Unknow records | |
2234 "time": Time to load | |
2235 | |
2236 Methods: | |
2237 __init__(self) | |
2238 | |
2239 """ | |
2240 def __init__(self): | |
2241 self.records = 0 | |
2242 self.valid = 0 | |
2243 self.V = 0 | |
2244 self.C = 0 | |
2245 self.D = 0 | |
2246 self.Y = 0 | |
2247 self.M = 0 | |
2248 self.N = 0 | |
2249 self.T = 0 | |
2250 self.K = 0 | |
2251 self.W = 0 | |
2252 self.L = 0 | |
2253 self.Q = 0 | |
2254 self.J = 0 | |
2255 self.G = 0 | |
2256 self.E = 0 | |
2257 self.O = 0 | |
2258 self.P = 0 | |
2259 self.X = 0 | |
2260 self.B = 0 | |
2261 self.F = 0 | |
2262 self.A = 0 | |
2263 self.unknow = 0 | |
2264 self.time = 0.0 | |
2265 | |
2266 def __str__(self): | |
2267 return utils.mapping(_("Time to load: $1 seconds"), | |
2268 (("%.2f" %(self.time)),)) + "\n" + \ | |
2269 utils.mapping(_("Records/Valid Records: $1/$2"), | |
2270 (self.records, self.valid)) + "\n" +\ | |
2271 "V: %s\n" %(self.V,) + \ | |
2272 "C: %s\n" %(self.C,) + \ | |
2273 "D: %s\n" %(self.D,) + \ | |
2274 "Y: %s\n" %(self.Y,) + \ | |
2275 "M: %s\n" %(self.M,) + \ | |
2276 "N: %s\n" %(self.N,) + \ | |
2277 "T: %s\n" %(self.T,) + \ | |
2278 "K: %s\n" %(self.K,) + \ | |
2279 "W: %s\n" %(self.W,) + \ | |
2280 "L: %s\n" %(self.L,) + \ | |
2281 "Q: %s\n" %(self.Q,) + \ | |
2282 "J: %s\n" %(self.J,) + \ | |
2283 "G: %s\n" %(self.G,) + \ | |
2284 "E: %s\n" %(self.E,) + \ | |
2285 "O: %s\n" %(self.O,) + \ | |
2286 "P: %s\n" %(self.P,) + \ | |
2287 "X: %s\n" %(self.X,) + \ | |
2288 "B: %s\n" %(self.B,) + \ | |
2289 "F: %s\n" %(self.F,) + \ | |
2290 "A: %s\n" %(self.A,) + \ | |
2291 "?: %s\n" %(self.unknow,) | |
2292 |