From da2a00e3ef871fab50cd812b68d59f4c53af0707 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Fri, 12 Jul 2019 10:57:03 +0200 Subject: [PATCH] The analyzer starts --- src/CNIRevelator.py | 23 +- src/globs.py | 2 +- src/main.py | 19 +- src/mrz.py | 1045 +++++++++++++++++++++---------------------- src/updater.py | 97 ++-- 5 files changed, 614 insertions(+), 572 deletions(-) diff --git a/src/CNIRevelator.py b/src/CNIRevelator.py index f944fb2..3570502 100644 --- a/src/CNIRevelator.py +++ b/src/CNIRevelator.py @@ -34,17 +34,19 @@ import launcher # launcher.py import updater # updater.py import globs # globs.py import pytesseract # pytesseract.py -import logger # logger.py +import logger # logger.py + +from main import * # main.py # Global handler logfile = logger.logCur ## MAIN FUNCTION OF CNIREVELATOR def main(): - - logfile.printdbg('*** CNIRevelator LOGFILE. Hello World ! ***') + mainw = mainWindow(logfile.logger) + try: os.environ['PATH'] = globs.CNIRFolder + '\\Tesseract-OCR4\\' os.environ['TESSDATA_PREFIX'] = globs.CNIRFolder + '\\Tesseract-OCR4\\tessdata' @@ -53,15 +55,15 @@ def main(): logfile.printerr('ERROR WITH TESSERACT MODULE ' + str(e)) else: text = 'Tesseract version ' + str(tesser_version) + ' Licensed Apache 2004 successfully initiated\n' - main_w.montext(text) + mainw.logOnTerm(text) - main_w.montext('\n\nEntrez la première ligne de MRZ svp \n') + mainw.logOnTerm('\n\nEntrez la première ligne de MRZ svp \n') if globs.CNIRNewVersion: - showinfo('Changelog : résumé de mise à jour', ('Version du logiciel : CNIRevelator ' + globs.verstring_full + '\n\n' + globs.changelog), parent=main_w) - logger.info('main() : **** Launching App_main() ****') - main_w.mainloop() - logger.info('main() : **** Ending App_main() ****') + showinfo('Changelog : résumé de mise à jour', ('Version du logiciel : CNIRevelator ' + globs.verstring_full + '\n\n' + globs.changelog), parent=mainWindow) + logfile.printdbg('main() : **** Launching App_main() ****') + mainw.mainloop() + logfile.printdbg('main() : **** Ending App_main() ****') logfile.printdbg('*** CNIRevelator LOGFILE. Goodbye World ! ***') logfile.close() @@ -91,5 +93,6 @@ if updater.UPDATE_IS_MADE: # Here we go ! try: main() -except Exception: +except Exception as e: + traceback.print_exc(file=sys.stdout) updater.exitProcess(1) \ No newline at end of file diff --git a/src/globs.py b/src/globs.py index fd7e864..eecfb29 100644 --- a/src/globs.py +++ b/src/globs.py @@ -43,4 +43,4 @@ CNIRErrLog = CNIRFolder + '\\logs\\error.log' CNIRMainLog = CNIRFolder + '\\logs\\main.log' CNIRUrlConfig = CNIRFolder + '\\config\\urlconf.ig' CNIRVerStock = CNIRFolder + '\\downloads\\versions.lst' -CNIREnv = os.getenv('APPDATA') + '/CNIRevelator/' +CNIREnv = CNIRFolder + '\\Data\\' diff --git a/src/main.py b/src/main.py index 9737dad..78b1270 100644 --- a/src/main.py +++ b/src/main.py @@ -32,6 +32,7 @@ from tkinter import ttk import mrz # mrz.py from image import CanvasImage # image.py +import globs # globs.py class mainWindow(Tk): @@ -125,7 +126,7 @@ class mainWindow(Tk): self.termtext = Text((self.termframe), state='disabled', width=60, height=4, wrap='none', font='Terminal 17', fg='#121f38') self.termtext.grid(column=0, row=0, sticky='NEW', padx=5) vcmd = (self.register(self.entryValidation), '%S', '%P', '%d') - self.termentry = Entry((self.termframe), font='Terminal 17', entryValidation='all', entryValidationcommand=vcmd, fg='#121f38', width=44) + self.termentry = Entry((self.termframe), font='Terminal 17', validate='all', validatecommand=vcmd, fg='#121f38', width=44) self.termentry.grid(column=0, row=0, sticky='SEW', padx=5) self.monitor = ttk.Labelframe(self, text='Moniteur') self.monlog = Text((self.monitor), state='disabled', width=60, height=10, wrap='word') @@ -150,7 +151,7 @@ class mainWindow(Tk): menu3.add_command(label='A propos', command=(self.infobox)) menubar.add_cascade(label='Aide', menu=menu3) self.config(menu=menubar) - self.wm_title(CST_TITLE) + self.wm_title(globs.CNIRName) if getattr(sys, 'frozen', False): self.iconbitmap(sys._MEIPASS + '\\id-card.ico\\id-card.ico') else: @@ -398,7 +399,7 @@ class mainWindow(Tk): return self.logger.debug('openingScan() : ' + str(self.mrzdetected)) try: - os.remove(CST_FOLDER + '\\temp.tif') + os.remove(globs.CNIREnv + '\\temp.tif') except IOError: pass @@ -416,7 +417,7 @@ class mainWindow(Tk): def infobox(self): Tk().withdraw() - showinfo('A propos du logiciel', ('Version du logiciel : \n' + CST_NAME + ' ' + CST_VER + ' ' + CST_TYPE + ' Revision ' + CST_REV + "\nLicence GNU/GPL 2018\n\nAuteur : NeoX_ ; devadmin@neoxgroup.eu\n\nTesseract 4.0 est soumis à l'Apache License 2004\n\n N'hésitez pas à faire part de vos commentaires !"), parent=self) + showinfo('A propos du logiciel', ('Version du logiciel : \n' + globs.verstring_full + ' ' + "\nLicence GNU/GPL 2018\n\nAuteur : NeoX_ ; devadmin@neoxgroup.eu\n\nTesseract 4.0 est soumis à l'Apache License 2004\n\n N'hésitez pas à faire part de vos commentaires !"), parent=self) def calculSigma(self, MRZtxt, numtype): CST_BACKGROUND = self['background'] @@ -620,7 +621,7 @@ class OpenScan(ttk.Frame): if self.pagenum + 1 < self.nframe: im = Image.open(self.fileorig) im.seek(self.pagenum + 1) - newpath = CST_FOLDER + '\\temp' + str(random.randint(11111, 99999)) + '.tif' + newpath = globs.CNIREnv + '\\temp' + str(random.randint(11111, 99999)) + '.tif' im.save(newpath) im.close() self.cadre.destroy() @@ -630,7 +631,7 @@ class OpenScan(ttk.Frame): if self.pagenum - 1 >= 0: im = Image.open(self.fileorig) im.seek(self.pagenum - 1) - newpath = CST_FOLDER + '\\temp' + str(random.randint(11111, 99999)) + '.tif' + newpath = globs.CNIREnv + '\\temp' + str(random.randint(11111, 99999)) + '.tif' im.save(newpath) im.close() self.cadre.destroy() @@ -662,12 +663,12 @@ class OpenScan(ttk.Frame): im = self.imtotreat import CNI_pytesseract as pytesseract try: - os.environ['PATH'] = CST_FOLDER + '\\Tesseract-OCR4\\' - os.environ['TESSDATA_PREFIX'] = CST_FOLDER + '\\Tesseract-OCR4\\tessdata' + os.environ['PATH'] = globs.CNIREnv + '\\Tesseract-OCR4\\' + os.environ['TESSDATA_PREFIX'] = globs.CNIREnv + '\\Tesseract-OCR4\\tessdata' self.text = pytesseract.image_to_string(im, lang='ocrb', boxes=False, config='--psm 6 --oem 0 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890<') except pytesseract.TesseractNotFoundError as e: try: - os.remove(CST_FOLDER + '\\Tesseract-OCR4\\*.*') + os.remove(globs.CNIREnv + '\\Tesseract-OCR4\\*.*') except Exception: pass diff --git a/src/mrz.py b/src/mrz.py index 8efc915..f521bb5 100644 --- a/src/mrz.py +++ b/src/mrz.py @@ -28,529 +28,528 @@ sexcode = {'M':'Homme', 'F':'Femme', 'X':'Non spécifié'} ## COUNTRY CODES -landcode2 = - { - AW: "Aruba", - AF: "Afghanistan", - AO: "Angola", - AI: "Anguilla", - AL: "Albanie", - AD: "Andorre", - AE: "Emirats arabes unis", - AR: "Argentine", - AM: "Arménie", - AS: "Samoa américaines", - AQ: "Antarctique", - TF: "Terres australes et antarctiques françaises", - AG: "Antigua-et-Barbuda", - AU: "Australie", - AT: "Autriche", - AZ: "Azerbaidjan", - BI: "Burundi", - BE: "Belgique", - BJ: "Benin", - BQ: "Pays-Bas caribéens", - BF: "Burkina Faso", - BD: "Bangladesh", - BG: "Bulgarie", - BH: "Bahrein", - BS: "Bahamas", - BA: "Bosnie-Herzegovine", - BL: "Saint-Barthélemy", - BY: "Bielorussie", - BZ: "Belize", - BM: "Bermudes", - BO: "Bolivie", - BR: "Brésil", - BB: "Barbade", - BN: "Brunei", - BT: "Bhoutan", - BW: "Botswana", - CF: "République Centrafricaine", - CA: "Canada", - CC: "Îles Cocos", - CH: "Suisse", - CL: "Chili", - CN: "Chine", - CI: "Côte d'Ivoire", - CM: "Cameroun", - CD: "Congo (République démocratique)", - CG: "Congo (République)", - CK: "Îles Cook", - CO: "Colombie", - KM: "Comores", - CV: "Cap-Vert", - CR: "Costa Rica", - CU: "Cuba", - CW: "Curaçao", - CX: "Île Christmas", - KY: "Caimans", - CY: "Chypre", - CZ: "Tchéquie", - DE: "Allemagne", - DJ: "Djibouti", - DM: "Dominique", - DK: "Danemark", - DO: "République dominicaine", - DZ: "Algérie", - EC: "Equateur", - EG: "Egypte", - ER: "Erythrée", - EH: "Sahara occidental", - ES: "Espagne", - EE: "Estonie", - ET: "Ethiopie", - FI: "Finlande", - FJ: "Fidji", - FK: "Îles Malouines", - FR: "France", - FO: "Féroé", - FM: "Micronésie", - GA: "Gabon", - GB: "Royaume-Uni", - GE: "Géorgie", - GG: "Guernesey", - GH: "Ghana", - GI: "Gibraltar", - GN: "Guinée", - GP: "Guadeloupe", - GM: "Gambie", - GW: "Guinée-Bissau", - GQ: "Guinée équatoriale", - GR: "Grèce", - GD: "Grenade", - GL: "Groenland", - GT: "Guatemala", - GF: "Guyane", - GU: "Guam", - GY: "Guyana", - HK: "Hong Kong", - HN: "Honduras", - HR: "Croatie", - HT: "Haïti", - HU: "Hongrie", - ID: "Indonésie", - IM: "Île de Man", - IN: "Inde", - IO: "Territoire britannique de l'océan Indien", - IE: "Irlande", - IR: "Irak", - IQ: "Iran", - IS: "Islande", - IL: "Israël", - IT: "Italie", - JM: "Jamaïque", - JE: "Jersey", - JO: "Jordanie", - JP: "Japon", - KZ: "Kazakhstan", - KE: "Kenya", - KG: "Kirghizistan", - KH: "Cambodge", - KI: "Kiribati", - KN: "Saint-Christophe-et-Niévès", - KR: "Corée du Sud", - KW: "Koweït", - LA: "Laos", - LB: "Liban", - LR: "Liberia", - LY: "Libye", - LC: "Sainte-Lucie", - LI: "Liechtenstein", - LK: "Sri Lanka", - LS: "Lesotho", - LT: "Lituanie", - LU: "Luxembourg", - LV: "Lettonie", - MO: "Macao", - MF: "Sint-Maarten", - MA: "Maroc", - MC: "Monaco", - MD: "Moldavie", - MG: "Madagascar", - MV: "Maldives", - MX: "Mexique", - MH: "Marshall", - MK: "Macedoine", - ML: "Mali", - MT: "Malte", - MM: "Birmanie", - ME: "Monténégro", - MN: "Mongolie", - MP: "Îles Mariannes du Nord", - MZ: "Mozambique", - MR: "Mauritanie", - MS: "Montserrat", - MQ: "Martinique", - MU: "Maurice", - MW: "Malawi", - MY: "Malaisie", - YT: "Mayotte", - NA: "Namibie", - NC: "Nouvelle-Calédonie", - NE: "Niger", - NF: "Île Norfolk", - NG: "Nigeria", - NI: "Nicaragua", - NU: "Niue", - NL: "Pays-Bas", - NO: "Norvège", - NP: "Nepal", - NR: "Nauru", - NZ: "Nouvelle-Zélande", - OM: "Oman", - PK: "Pakistan", - PA: "Panama", - PN: "Îles Pitcairn", - PE: "Pérou", - PH: "Philippines", - PW: "Palaos", - PG: "Papouasie-Nouvelle-Guinée", - PL: "Pologne", - PR: "Porto Rico", - KP: "Corée du Nord", - PT: "Portugal", - PY: "Paraguay", - PS: "Palestine", - PF: "Polynésie française", - QA: "Qatar", - RE: "Réunion", - RO: "Roumanie", - RU: "Russie", - RW: "Rwanda", - SA: "Arabie saoudite", - SD: "Soudan", - SN: "Sénégal", - SG: "Singapour", - GS: "Georgie du Sud-et-les iles Sandwich du Sud", - SH: "Sainte-Hélène, Ascension et Tristan da Cunha", - SJ: "Svalbard et île Jan Mayen", - SB: "Salomon", - SL: "Sierra Leone", - SV: "Salvador", - SM: "Saint-Marin", - SO: "Somalie", - PM: "Saint-Pierre-et-Miquelon", - RS: "Serbie", - SS: "Soudan du Sud", - ST: "Sao Tomé-et-Principe", - SR: "Suriname", - SK: "Slovaquie", - SI: "Slovénie", - SE: "Suède", - SZ: "eSwatani", - SX: "Saint-Martin ", - SC: "Seychelles", - SY: "Syrie", - TC: "Îles Turques-et-Caïques", - TD: "Tchad", - TG: "Togo", - TH: "Thaïlande", - TJ: "Tadjikistan", - TK: "Tokelau", - TM: "Turkmenistan", - TL: "Timor oriental", - TO: "Tonga", - TT: "Trinité-et-Tobago", - TN: "Tunisie", - TR: "Turquie", - TV: "Tuvalu", - TW: "Taiwan", - TZ: "Tanzanie", - UG: "Ouganda", - UA: "Ukraine", - UY: "Uruguay", - US: "Etats-Unis", - UZ: "Ouzbékistan", - VA: "Saint-Siège (État de la Cité du Vatican)", - VC: "Saint-Vincent-et-les-Grenadines", - VE: "Venezuela", - VG: "Îles Vierges britanniques", - VI: "Îles Vierges des États-Unis", - VN: "Viêt Nam", - VU: "Vanuatu", - WF: "Wallis-et-Futuna", - WS: "Samoa", - XK: "Kosovo", - YE: "Yémen", - ZA: "Afrique du Sud", - ZM: "Zambie", - ZW: "Zimbabwe" - } - -landcode3 = - { - ABW: "Aruba", - AFG: "Afghanistan", - AGO: "Angola", - AIA: "Anguilla", - ALB: "Albanie", - AND: "Andorre", - ARE: "Emirats arabes unis", - ARG: "Argentine", - ARM: "Arménie", - ASM: "Samoa américaines", - ATA: "Antarctique", - ATF: "Terres australes et antarctiques françaises", - ATG: "Antigua-et-Barbuda", - AUS: "Australie", - AUT: "Autriche", - AZE: "Azerbaidjan", - BDI: "Burundi", - BEL: "Belgique", - BEN: "Benin", - BES: "Pays-Bas caribéens", - BFA: "Burkina Faso", - BGD: "Bangladesh", - BGR: "Bulgarie", - BHR: "Bahrein", - BHS: "Bahamas", - BIH: "Bosnie-Herzegovine", - BLM: "Saint-Barthélemy", - BLR: "Bielorussie", - BLZ: "Belize", - BMU: "Bermudes", - BOL: "Bolivie", - BRA: "Brésil", - BRB: "Barbade", - BRN: "Brunei", - BTN: "Bhoutan", - BWA: "Botswana", - CAF: "République Centrafricaine", - CAN: "Canada", - CCK: "Îles Cocos", - CHE: "Suisse", - CHL: "Chili", - CHN: "Chine", - CIV: "Côte d'Ivoire", - CMR: "Cameroun", - COD: "Congo (République démocratique)", - COG: "Congo (République)", - COK: "Îles Cook", - COL: "Colombie", - COM: "Comores", - CPV: "Cap-Vert", - CRI: "Costa Rica", - CUB: "Cuba", - CUW: "Curaçao", - CXR: "Île Christmas", - CYM: "Caimans", - CYP: "Chypre", - CZE: "Tchéquie", - DEU: "Allemagne", - DJI: "Djibouti", - DMA: "Dominique", - DNK: "Danemark", - DOM: "République dominicaine", - DZA: "Algérie", - ECU: "Equateur", - EGY: "Egypte", - ERI: "Erythrée", - ESH: "Sahara occidental", - ESP: "Espagne", - EST: "Estonie", - ETH: "Ethiopie", - FIN: "Finlande", - FJI: "Fidji", - FLK: "Îles Malouines", - FRA: "France", - FRO: "Féroé", - FSM: "Micronésie", - GAB: "Gabon", - GBR: "Royaume-Uni", - GEO: "Géorgie", - GGY: "Guernesey", - GHA: "Ghana", - GIB: "Gibraltar", - GIN: "Guinée", - GLP: "Guadeloupe", - GMB: "Gambie", - GNB: "Guinée-Bissau", - GNQ: "Guinée équatoriale", - GRC: "Grèce", - GRD: "Grenade", - GRL: "Groenland", - GTM: "Guatemala", - GUF: "Guyane", - GUM: "Guam", - GUY: "Guyana", - HKG: "Hong Kong", - HND: "Honduras", - HRV: "Croatie", - HTI: "Haïti", - HUN: "Hongrie", - IDN: "Indonésie", - IMN: "Île de Man", - IND: "Inde", - IOT: "Territoire britannique de l'océan Indien", - IRL: "Irlande", - IRN: "Irak", - IRQ: "Iran", - ISL: "Islande", - ISR: "Israël", - ITA: "Italie", - JAM: "Jamaïque", - JEY: "Jersey", - JOR: "Jordanie", - JPN: "Japon", - KAZ: "Kazakhstan", - KEN: "Kenya", - KGZ: "Kirghizistan", - KHM: "Cambodge", - KIR: "Kiribati", - KNA: "Saint-Christophe-et-Niévès", - KOR: "Corée du Sud", - KWT: "Koweït", - LAO: "Laos", - LBN: "Liban", - LBR: "Liberia", - LBY: "Libye", - LCA: "Sainte-Lucie", - LIE: "Liechtenstein", - LKA: "Sri Lanka", - LSO: "Lesotho", - LTU: "Lituanie", - LUX: "Luxembourg", - LVA: "Lettonie", - MAC: "Macao", - MAF: "Sint-Maarten", - MAR: "Maroc", - MCO: "Monaco", - MDA: "Moldavie", - MDG: "Madagascar", - MDV: "Maldives", - MEX: "Mexique", - MHL: "Marshall", - MKD: "Macedoine", - MLI: "Mali", - MLT: "Malte", - MMR: "Birmanie", - MNE: "Monténégro", - MNG: "Mongolie", - MNP: "Îles Mariannes du Nord", - MOZ: "Mozambique", - MRT: "Mauritanie", - MSR: "Montserrat", - MTQ: "Martinique", - MUS: "Maurice", - MWI: "Malawi", - MYS: "Malaisie", - MYT: "Mayotte", - NAM: "Namibie", - NCL: "Nouvelle-Calédonie", - NER: "Niger", - NFK: "Île Norfolk", - NGA: "Nigeria", - NIC: "Nicaragua", - NIU: "Niue", - NLD: "Pays-Bas", - NOR: "Norvège", - NPL: "Nepal", - NRU: "Nauru", - NZL: "Nouvelle-Zélande", - OMN: "Oman", - PAK: "Pakistan", - PAN: "Panama", - PCN: "Îles Pitcairn", - PER: "Pérou", - PHL: "Philippines", - PLW: "Palaos", - PNG: "Papouasie-Nouvelle-Guinée", - POL: "Pologne", - PRI: "Porto Rico", - PRK: "Corée du Nord", - PRT: "Portugal", - PRY: "Paraguay", - PSE: "Palestine", - PYF: "Polynésie française", - QAT: "Qatar", - REU: "Réunion", - ROU: "Roumanie", - RUS: "Russie", - RWA: "Rwanda", - SAU: "Arabie saoudite", - SDN: "Soudan", - SEN: "Sénégal", - SGP: "Singapour", - SGS: "Georgie du Sud-et-les iles Sandwich du Sud", - SHN: "Sainte-Hélène, Ascension et Tristan da Cunha", - SJM: "Svalbard et île Jan Mayen", - SLB: "Salomon", - SLE: "Sierra Leone", - SLV: "Salvador", - SMR: "Saint-Marin", - SOM: "Somalie", - SPM: "Saint-Pierre-et-Miquelon", - SRB: "Serbie", - SSD: "Soudan du Sud", - STP: "Sao Tomé-et-Principe", - SUR: "Suriname", - SVK: "Slovaquie", - SVN: "Slovénie", - SWE: "Suède", - SWZ: "eSwatani", - SXM: "Saint-Martin ", - SYC: "Seychelles", - SYR: "Syrie", - TCA: "Îles Turques-et-Caïques", - TCD: "Tchad", - TGO: "Togo", - THA: "Thaïlande", - TJK: "Tadjikistan", - TKL: "Tokelau", - TKM: "Turkmenistan", - TLS: "Timor oriental", - TON: "Tonga", - TTO: "Trinité-et-Tobago", - TUN: "Tunisie", - TUR: "Turquie", - TUV: "Tuvalu", - TWN: "Taiwan", - TZA: "Tanzanie", - UGA: "Ouganda", - UKR: "Ukraine", - URY: "Uruguay", - USA: "Etats-Unis", - UZB: "Ouzbékistan", - VAT: "Saint-Siège (État de la Cité du Vatican)", - VCT: "Saint-Vincent-et-les-Grenadines", - VEN: "Venezuela", - VGB: "Îles Vierges britanniques", - VIR: "Îles Vierges des États-Unis", - VNM: "Viêt Nam", - VUT: "Vanuatu", - WLF: "Wallis-et-Futuna", - WSM: "Samoa", - XKX: "Kosovo", - YEM: "Yémen", - ZAF: "Afrique du Sud", - ZMB: "Zambie", - ZWE: "Zimbabwe", - NTZ: "Zone neutre", - UNO: "Fonctionnaire des Nations Unies", - UNA: "Fonctionnaire d'une organisation affiliée aux Nations Unies", - UNK: "Représentant des Nations Unies au Kosovo", - XXA: "Apatride Convention 1954", - XXB: "Réfugié Convention 1954", - XXC: "Réfugié autre", - XXX: "Résident Légal de Nationalité Inconnue", - D: "Allemagne", - EUE: "Union Européenne", - GBD: "Citoyen Britannique d'Outre-mer (BOTC)", - GBN: "British National (Overseas)", - GBO: "British Overseas Citizen", - GBP: "British Protected Person", - GBS: "British Subject", - XBA: "Banque Africaine de Développement", - XIM: "Banque Africaine d'Export–Import", - XCC: "Caribbean Community or one of its emissaries", - XCO: "Common Market for Eastern and Southern Africa", - XEC: "Economic Community of West African States", - XPO: "International Criminal Police Organization", - XOM: "Sovereign Military Order of Malta", - RKS: "Kosovo", - WSA: "World Service Authority World Passport" - } + +landcode2 = { + 'AW': 'Aruba', + 'AF': 'Afghanistan', + 'AO': 'Angola', + 'AI': 'Anguilla', + 'AL': 'Albanie', + 'AD': 'Andorre', + 'AE': 'Emirats arabes unis', + 'AR': 'Argentine', + 'AM': 'Arménie', + 'AS': 'Samoa américaines', + 'AQ': 'Antarctique', + 'TF': 'Terres australes et antarctiques françaises', + 'AG': 'Antigua-et-Barbuda', + 'AU': 'Australie', + 'AT': 'Autriche', + 'AZ': 'Azerbaidjan', + 'BI': 'Burundi', + 'BE': 'Belgique', + 'BJ': 'Benin', + 'BQ': 'Pays-Bas caribéens', + 'BF': 'Burkina Faso', + 'BD': 'Bangladesh', + 'BG': 'Bulgarie', + 'BH': 'Bahrein', + 'BS': 'Bahamas', + 'BA': 'Bosnie-Herzegovine', + 'BL': 'Saint-Barthélemy', + 'BY': 'Bielorussie', + 'BZ': 'Belize', + 'BM': 'Bermudes', + 'BO': 'Bolivie', + 'BR': 'Brésil', + 'BB': 'Barbade', + 'BN': 'Brunei', + 'BT': 'Bhoutan', + 'BW': 'Botswana', + 'CF': 'République Centrafricaine', + 'CA': 'Canada', + 'CC': 'Îles Cocos', + 'CH': 'Suisse', + 'CL': 'Chili', + 'CN': 'Chine', + 'CI': "Côte d'Ivoire", + 'CM': 'Cameroun', + 'CD': 'Congo (République démocratique)', + 'CG': 'Congo (République)', + 'CK': 'Îles Cook', + 'CO': 'Colombie', + 'KM': 'Comores', + 'CV': 'Cap-Vert', + 'CR': 'Costa Rica', + 'CU': 'Cuba', + 'CW': 'Curaçao', + 'CX': 'Île Christmas', + 'KY': 'Caimans', + 'CY': 'Chypre', + 'CZ': 'Tchéquie', + 'DE': 'Allemagne', + 'DJ': 'Djibouti', + 'DM': 'Dominique', + 'DK': 'Danemark', + 'DO': 'République dominicaine', + 'DZ': 'Algérie', + 'EC': 'Equateur', + 'EG': 'Egypte', + 'ER': 'Erythrée', + 'EH': 'Sahara occidental', + 'ES': 'Espagne', + 'EE': 'Estonie', + 'ET': 'Ethiopie', + 'FI': 'Finlande', + 'FJ': 'Fidji', + 'FK': 'Îles Malouines', + 'FR': 'France', + 'FO': 'Féroé', + 'FM': 'Micronésie', + 'GA': 'Gabon', + 'GB': 'Royaume-Uni', + 'GE': 'Géorgie', + 'GG': 'Guernesey', + 'GH': 'Ghana', + 'GI': 'Gibraltar', + 'GN': 'Guinée', + 'GP': 'Guadeloupe', + 'GM': 'Gambie', + 'GW': 'Guinée-Bissau', + 'GQ': 'Guinée équatoriale', + 'GR': 'Grèce', + 'GD': 'Grenade', + 'GL': 'Groenland', + 'GT': 'Guatemala', + 'GF': 'Guyane', + 'GU': 'Guam', + 'GY': 'Guyana', + 'HK': 'Hong Kong', + 'HN': 'Honduras', + 'HR': 'Croatie', + 'HT': 'Haïti', + 'HU': 'Hongrie', + 'ID': 'Indonésie', + 'IM': 'Île de Man', + 'IN': 'Inde', + 'IO': "Territoire britannique de l'océan Indien", + 'IE': 'Irlande', + 'IR': 'Irak', + 'IQ': 'Iran', + 'IS': 'Islande', + 'IL': 'Israël', + 'IT': 'Italie', + 'JM': 'Jamaïque', + 'JE': 'Jersey', + 'JO': 'Jordanie', + 'JP': 'Japon', + 'KZ': 'Kazakhstan', + 'KE': 'Kenya', + 'KG': 'Kirghizistan', + 'KH': 'Cambodge', + 'KI': 'Kiribati', + 'KN': 'Saint-Christophe-et-Niévès', + 'KR': 'Corée du Sud', + 'KW': 'Koweït', + 'LA': 'Laos', + 'LB': 'Liban', + 'LR': 'Liberia', + 'LY': 'Libye', + 'LC': 'Sainte-Lucie', + 'LI': 'Liechtenstein', + 'LK': 'Sri Lanka', + 'LS': 'Lesotho', + 'LT': 'Lituanie', + 'LU': 'Luxembourg', + 'LV': 'Lettonie', + 'MO': 'Macao', + 'MF': 'Sint-Maarten', + 'MA': 'Maroc', + 'MC': 'Monaco', + 'MD': 'Moldavie', + 'MG': 'Madagascar', + 'MV': 'Maldives', + 'MX': 'Mexique', + 'MH': 'Marshall', + 'MK': 'Macedoine', + 'ML': 'Mali', + 'MT': 'Malte', + 'MM': 'Birmanie', + 'ME': 'Monténégro', + 'MN': 'Mongolie', + 'MP': 'Îles Mariannes du Nord', + 'MZ': 'Mozambique', + 'MR': 'Mauritanie', + 'MS': 'Montserrat', + 'MQ': 'Martinique', + 'MU': 'Maurice', + 'MW': 'Malawi', + 'MY': 'Malaisie', + 'YT': 'Mayotte', + 'NA': 'Namibie', + 'NC': 'Nouvelle-Calédonie', + 'NE': 'Niger', + 'NF': 'Île Norfolk', + 'NG': 'Nigeria', + 'NI': 'Nicaragua', + 'NU': 'Niue', + 'NL': 'Pays-Bas', + 'NO': 'Norvège', + 'NP': 'Nepal', + 'NR': 'Nauru', + 'NZ': 'Nouvelle-Zélande', + 'OM': 'Oman', + 'PK': 'Pakistan', + 'PA': 'Panama', + 'PN': 'Îles Pitcairn', + 'PE': 'Pérou', + 'PH': 'Philippines', + 'PW': 'Palaos', + 'PG': 'Papouasie-Nouvelle-Guinée', + 'PL': 'Pologne', + 'PR': 'Porto Rico', + 'KP': 'Corée du Nord', + 'PT': 'Portugal', + 'PY': 'Paraguay', + 'PS': 'Palestine', + 'PF': 'Polynésie française', + 'QA': 'Qatar', + 'RE': 'Réunion', + 'RO': 'Roumanie', + 'RU': 'Russie', + 'RW': 'Rwanda', + 'SA': 'Arabie saoudite', + 'SD': 'Soudan', + 'SN': 'Sénégal', + 'SG': 'Singapour', + 'GS': 'Georgie du Sud-et-les iles Sandwich du Sud', + 'SH': 'Sainte-Hélène, Ascension et Tristan da Cunha', + 'SJ': 'Svalbard et île Jan Mayen', + 'SB': 'Salomon', + 'SL': 'Sierra Leone', + 'SV': 'Salvador', + 'SM': 'Saint-Marin', + 'SO': 'Somalie', + 'PM': 'Saint-Pierre-et-Miquelon', + 'RS': 'Serbie', + 'SS': 'Soudan du Sud', + 'ST': 'Sao Tomé-et-Principe', + 'SR': 'Suriname', + 'SK': 'Slovaquie', + 'SI': 'Slovénie', + 'SE': 'Suède', + 'SZ': 'eSwatani', + 'SX': 'Saint-Martin ', + 'SC': 'Seychelles', + 'SY': 'Syrie', + 'TC': 'Îles Turques-et-Caïques', + 'TD': 'Tchad', + 'TG': 'Togo', + 'TH': 'Thaïlande', + 'TJ': 'Tadjikistan', + 'TK': 'Tokelau', + 'TM': 'Turkmenistan', + 'TL': 'Timor oriental', + 'TO': 'Tonga', + 'TT': 'Trinité-et-Tobago', + 'TN': 'Tunisie', + 'TR': 'Turquie', + 'TV': 'Tuvalu', + 'TW': 'Taiwan', + 'TZ': 'Tanzanie', + 'UG': 'Ouganda', + 'UA': 'Ukraine', + 'UY': 'Uruguay', + 'US': 'Etats-Unis', + 'UZ': 'Ouzbékistan', + 'VA': 'Saint-Siège (État de la Cité du Vatican)', + 'VC': 'Saint-Vincent-et-les-Grenadines', + 'VE': 'Venezuela', + 'VG': 'Îles Vierges britanniques', + 'VI': 'Îles Vierges des États-Unis', + 'VN': 'Viêt Nam', + 'VU': 'Vanuatu', + 'WF': 'Wallis-et-Futuna', + 'WS': 'Samoa', + 'XK': 'Kosovo', + 'YE': 'Yémen', + 'ZA': 'Afrique du Sud', + 'ZM': 'Zambie', + 'ZW': 'Zimbabwe' + } + +landcode3 = { + 'ABW': 'Aruba', + 'AFG': 'Afghanistan', + 'AGO': 'Angola', + 'AIA': 'Anguilla', + 'ALB': 'Albanie', + 'AND': 'Andorre', + 'ARE': 'Emirats arabes unis', + 'ARG': 'Argentine', + 'ARM': 'Arménie', + 'ASM': 'Samoa américaines', + 'ATA': 'Antarctique', + 'ATF': 'Terres australes et antarctiques françaises', + 'ATG': 'Antigua-et-Barbuda', + 'AUS': 'Australie', + 'AUT': 'Autriche', + 'AZE': 'Azerbaidjan', + 'BDI': 'Burundi', + 'BEL': 'Belgique', + 'BEN': 'Benin', + 'BES': 'Pays-Bas caribéens', + 'BFA': 'Burkina Faso', + 'BGD': 'Bangladesh', + 'BGR': 'Bulgarie', + 'BHR': 'Bahrein', + 'BHS': 'Bahamas', + 'BIH': 'Bosnie-Herzegovine', + 'BLM': 'Saint-Barthélemy', + 'BLR': 'Bielorussie', + 'BLZ': 'Belize', + 'BMU': 'Bermudes', + 'BOL': 'Bolivie', + 'BRA': 'Brésil', + 'BRB': 'Barbade', + 'BRN': 'Brunei', + 'BTN': 'Bhoutan', + 'BWA': 'Botswana', + 'CAF': 'République Centrafricaine', + 'CAN': 'Canada', + 'CCK': 'Îles Cocos', + 'CHE': 'Suisse', + 'CHL': 'Chili', + 'CHN': 'Chine', + 'CIV': "Côte d'Ivoire", + 'CMR': 'Cameroun', + 'COD': 'Congo (République démocratique)', + 'COG': 'Congo (République)', + 'COK': 'Îles Cook', + 'COL': 'Colombie', + 'COM': 'Comores', + 'CPV': 'Cap-Vert', + 'CRI': 'Costa Rica', + 'CUB': 'Cuba', + 'CUW': 'Curaçao', + 'CXR': 'Île Christmas', + 'CYM': 'Caimans', + 'CYP': 'Chypre', + 'CZE': 'Tchéquie', + 'DEU': 'Allemagne', + 'DJI': 'Djibouti', + 'DMA': 'Dominique', + 'DNK': 'Danemark', + 'DOM': 'République dominicaine', + 'DZA': 'Algérie', + 'ECU': 'Equateur', + 'EGY': 'Egypte', + 'ERI': 'Erythrée', + 'ESH': 'Sahara occidental', + 'ESP': 'Espagne', + 'EST': 'Estonie', + 'ETH': 'Ethiopie', + 'FIN': 'Finlande', + 'FJI': 'Fidji', + 'FLK': 'Îles Malouines', + 'FRA': 'France', + 'FRO': 'Féroé', + 'FSM': 'Micronésie', + 'GAB': 'Gabon', + 'GBR': 'Royaume-Uni', + 'GEO': 'Géorgie', + 'GGY': 'Guernesey', + 'GHA': 'Ghana', + 'GIB': 'Gibraltar', + 'GIN': 'Guinée', + 'GLP': 'Guadeloupe', + 'GMB': 'Gambie', + 'GNB': 'Guinée-Bissau', + 'GNQ': 'Guinée équatoriale', + 'GRC': 'Grèce', + 'GRD': 'Grenade', + 'GRL': 'Groenland', + 'GTM': 'Guatemala', + 'GUF': 'Guyane', + 'GUM': 'Guam', + 'GUY': 'Guyana', + 'HKG': 'Hong Kong', + 'HND': 'Honduras', + 'HRV': 'Croatie', + 'HTI': 'Haïti', + 'HUN': 'Hongrie', + 'IDN': 'Indonésie', + 'IMN': 'Île de Man', + 'IND': 'Inde', + 'IOT': "Territoire britannique de l'océan Indien", + 'IRL': 'Irlande', + 'IRN': 'Irak', + 'IRQ': 'Iran', + 'ISL': 'Islande', + 'ISR': 'Israël', + 'ITA': 'Italie', + 'JAM': 'Jamaïque', + 'JEY': 'Jersey', + 'JOR': 'Jordanie', + 'JPN': 'Japon', + 'KAZ': 'Kazakhstan', + 'KEN': 'Kenya', + 'KGZ': 'Kirghizistan', + 'KHM': 'Cambodge', + 'KIR': 'Kiribati', + 'KNA': 'Saint-Christophe-et-Niévès', + 'KOR': 'Corée du Sud', + 'KWT': 'Koweït', + 'LAO': 'Laos', + 'LBN': 'Liban', + 'LBR': 'Liberia', + 'LBY': 'Libye', + 'LCA': 'Sainte-Lucie', + 'LIE': 'Liechtenstein', + 'LKA': 'Sri Lanka', + 'LSO': 'Lesotho', + 'LTU': 'Lituanie', + 'LUX': 'Luxembourg', + 'LVA': 'Lettonie', + 'MAC': 'Macao', + 'MAF': 'Sint-Maarten', + 'MAR': 'Maroc', + 'MCO': 'Monaco', + 'MDA': 'Moldavie', + 'MDG': 'Madagascar', + 'MDV': 'Maldives', + 'MEX': 'Mexique', + 'MHL': 'Marshall', + 'MKD': 'Macedoine', + 'MLI': 'Mali', + 'MLT': 'Malte', + 'MMR': 'Birmanie', + 'MNE': 'Monténégro', + 'MNG': 'Mongolie', + 'MNP': 'Îles Mariannes du Nord', + 'MOZ': 'Mozambique', + 'MRT': 'Mauritanie', + 'MSR': 'Montserrat', + 'MTQ': 'Martinique', + 'MUS': 'Maurice', + 'MWI': 'Malawi', + 'MYS': 'Malaisie', + 'MYT': 'Mayotte', + 'NAM': 'Namibie', + 'NCL': 'Nouvelle-Calédonie', + 'NER': 'Niger', + 'NFK': 'Île Norfolk', + 'NGA': 'Nigeria', + 'NIC': 'Nicaragua', + 'NIU': 'Niue', + 'NLD': 'Pays-Bas', + 'NOR': 'Norvège', + 'NPL': 'Nepal', + 'NRU': 'Nauru', + 'NZL': 'Nouvelle-Zélande', + 'OMN': 'Oman', + 'PAK': 'Pakistan', + 'PAN': 'Panama', + 'PCN': 'Îles Pitcairn', + 'PER': 'Pérou', + 'PHL': 'Philippines', + 'PLW': 'Palaos', + 'PNG': 'Papouasie-Nouvelle-Guinée', + 'POL': 'Pologne', + 'PRI': 'Porto Rico', + 'PRK': 'Corée du Nord', + 'PRT': 'Portugal', + 'PRY': 'Paraguay', + 'PSE': 'Palestine', + 'PYF': 'Polynésie française', + 'QAT': 'Qatar', + 'REU': 'Réunion', + 'ROU': 'Roumanie', + 'RUS': 'Russie', + 'RWA': 'Rwanda', + 'SAU': 'Arabie saoudite', + 'SDN': 'Soudan', + 'SEN': 'Sénégal', + 'SGP': 'Singapour', + 'SGS': 'Georgie du Sud-et-les iles Sandwich du Sud', + 'SHN': 'Sainte-Hélène, Ascension et Tristan da Cunha', + 'SJM': 'Svalbard et île Jan Mayen', + 'SLB': 'Salomon', + 'SLE': 'Sierra Leone', + 'SLV': 'Salvador', + 'SMR': 'Saint-Marin', + 'SOM': 'Somalie', + 'SPM': 'Saint-Pierre-et-Miquelon', + 'SRB': 'Serbie', + 'SSD': 'Soudan du Sud', + 'STP': 'Sao Tomé-et-Principe', + 'SUR': 'Suriname', + 'SVK': 'Slovaquie', + 'SVN': 'Slovénie', + 'SWE': 'Suède', + 'SWZ': 'eSwatani', + 'SXM': 'Saint-Martin ', + 'SYC': 'Seychelles', + 'SYR': 'Syrie', + 'TCA': 'Îles Turques-et-Caïques', + 'TCD': 'Tchad', + 'TGO': 'Togo', + 'THA': 'Thaïlande', + 'TJK': 'Tadjikistan', + 'TKL': 'Tokelau', + 'TKM': 'Turkmenistan', + 'TLS': 'Timor oriental', + 'TON': 'Tonga', + 'TTO': 'Trinité-et-Tobago', + 'TUN': 'Tunisie', + 'TUR': 'Turquie', + 'TUV': 'Tuvalu', + 'TWN': 'Taiwan', + 'TZA': 'Tanzanie', + 'UGA': 'Ouganda', + 'UKR': 'Ukraine', + 'URY': 'Uruguay', + 'USA': 'Etats-Unis', + 'UZB': 'Ouzbékistan', + 'VAT': 'Saint-Siège (État de la Cité du Vatican)', + 'VCT': 'Saint-Vincent-et-les-Grenadines', + 'VEN': 'Venezuela', + 'VGB': 'Îles Vierges britanniques', + 'VIR': 'Îles Vierges des États-Unis', + 'VNM': 'Viêt Nam', + 'VUT': 'Vanuatu', + 'WLF': 'Wallis-et-Futuna', + 'WSM': 'Samoa', + 'XKX': 'Kosovo', + 'YEM': 'Yémen', + 'ZAF': 'Afrique du Sud', + 'ZMB': 'Zambie', + 'ZWE': 'Zimbabwe', + 'NTZ': 'Zone neutre', + 'UNO': 'Fonctionnaire des Nations Unies', + 'UNA': "Fonctionnaire d'une organisation affiliée aux Nations Unies", + 'UNK': 'Représentant des Nations Unies au Kosovo', + 'XXA': 'Apatride Convention 1954', + 'XXB': 'Réfugié Convention 1954', + 'XXC': 'Réfugié autre', + 'XXX': 'Résident Légal de Nationalité Inconnue', + 'D': 'Allemagne', + 'EUE': 'Union Européenne', + 'GBD': "Citoyen Britannique d'Outre-mer (BOTC)", + 'GBN': 'British National (Overseas)', + 'GBO': 'British Overseas Citizen', + 'GBP': 'British Protected Person', + 'GBS': 'British Subject', + 'XBA': 'Banque Africaine de Développement', + 'XIM': "Banque Africaine d'Export–Import", + 'XCC': 'Caribbean Community or one of its emissaries', + 'XCO': 'Common Market for Eastern and Southern Africa', + 'XEC': 'Economic Community of West African States', + 'XPO': 'International Criminal Police Organization', + 'XOM': 'Sovereign Military Order of Malta', + 'RKS': 'Kosovo', + 'WSA': 'World Service Authority World Passport' +} ## DOCUMENTS TYPES P = [ diff --git a/src/updater.py b/src/updater.py index 08bc11b..6578b92 100644 --- a/src/updater.py +++ b/src/updater.py @@ -43,6 +43,9 @@ UPDATE_IS_MADE = False UPATH = ' ' def createShortcut(path, target='', wDir='', icon=''): + """ + Creates a shortcut for a program or an internet link + """ ext = path[-3:] if ext == 'url': shortcut = file(path, 'w') @@ -61,27 +64,30 @@ def createShortcut(path, target='', wDir='', icon=''): shortcut.save() def spawnProcess(args, cd): + """ + Creates a new independant process. Used to launch a new version after update + """ subprocess.Popen(args, close_fds=True, cwd=cd, creationflags=subprocess.DETACHED_PROCESS) def exitProcess(arg): + """ + Forcefully quits a process. Used to help deletion of an old version or to quit properly + """ # Quit totally without remain in memory for process in psutil.process_iter(): if process.pid == os.getpid(): process.terminate() sys.exit(arg) -## Main Batch Function -def batch(): +def getLatestVersion(credentials): + """ + Returns the latest version of the software + """ # Global Handlers logfile = logger.logCur launcherWindow = ihm.launcherWindowCur - credentials = downloader.newcredentials() - - if not credentials.valid: - return False - # First retrieving the urls ! while True: try: @@ -106,7 +112,7 @@ def batch(): except: pass with open(globs.CNIRUrlConfig, 'w') as (configFile): - configFile.write("https://raw.githubusercontent.com/neox95/CNIRevelator/master/VERSIONS.LST\n0\n0") #XXX + configFile.write("https://raw.githubusercontent.com/neox95/CNIRevelator/master/VERSIONS.LST\n0\n0") # Getting the list of versions of the software logfile.printdbg('Retrieving the software versions') @@ -132,11 +138,49 @@ def batch(): finalsum = finalver[2] + finalver[1]*100 + finalver[0]*100*100 sum = ver[2] + ver[1]*100 + ver[0]*100*100 # Make a statement - if sum > finalsum: + if sum >= finalsum: finalver = ver.copy() finalurl = url finalchecksum = checksum + + return (finalver, finalurl, finalchecksum) +def tessInstall(PATH, credentials): + # Global Handlers + logfile = logger.logCur + launcherWindow = ihm.launcherWindowCur + + # Verifying that Tesseract is installed + if not os.path.exists(PATH + '\\Tesseract-OCR4\\'): + finalver, finalurl, finalchecksum = getLatestVersion(credentials) + tesseracturl = finalurl.replace("CNIRevelator.zip", "tesseract_4.zip") + + # WE ASSUME THAT THE MAIN FILE IS CNIRevelator.zip AND THAT THE TESSERACT PACKAGE IS tesseract_4.zip + logfile.printdbg('Preparing download of Tesseract OCR 4...') + getTesseract = downloader.newdownload(credentials, tesseracturl, PATH + '\\TsrtPackage.zip').download() + + # Unzip Tesseract + logfile.printdbg("Unzipping the package") + launcherWindow.printmsg('Installing the updates') + zip_ref = zipfile.ZipFile(PATH + '\\TsrtPackage.zip', 'r') + zip_ref.extractall(PATH) + zip_ref.close() + + # Cleanup + try: + os.remove(UPATH + '\\TsrtPackage.zip') + except: + pass + +## Main Batch Function +def batch(credentials): + # Global Handlers + logfile = logger.logCur + launcherWindow = ihm.launcherWindowCur + + # Get the latest version of CNIRevelator + finalver, finalurl, finalchecksum = getLatestVersion(credentials) + if finalver == globs.version: logfile.printdbg('The software is already the newer version') return True @@ -194,25 +238,8 @@ def batch(): launcherWindow.printmsg('Success !') - # Verifying that Tesseract is installed - if not os.path.exists(globs.CNIRFolder + '\\Tesseract-OCR4\\'): - tesseracturl = finalurl.replace("CNIRevelator.zip", "tesseract_4.zip") - # WE ASSUME THAT THE MAIN FILE IS CNIRevelator.zip AND THAT THE TESSERACT PACKAGE IS tesseract_4.zip - logfile.printdbg('Preparing download of Tesseract OCR 4...') - getTesseract = downloader.newdownload(credentials, tesseracturl, UPATH + '\\TsrtPackage.zip').download() - - # Unzip Tesseract - logfile.printdbg("Unzipping the package") - launcherWindow.printmsg('Installing the updates') - zip_ref = zipfile.ZipFile(UPATH + '\\TsrtPackage.zip', 'r') - zip_ref.extractall(UPATH) - zip_ref.close() - - # Cleanup - try: - os.remove(UPATH + '\\TsrtPackage.zip') - except: - pass + # Install Tesseract ! + tessInstall(UPATH, credentials) # Cleanup try: @@ -232,6 +259,16 @@ def umain(): logfile = logger.logCur launcherWindow = ihm.launcherWindowCur + credentials = downloader.newcredentials() + + if not credentials.valid: + logfile.printerr("Credentials Error. No effective update !") + launcherWindow.printmsg('Credentials Error. No effective update !') + time.sleep(2) + launcherWindow = ihm.launcherWindowCur + launcherWindow.destroy() + return 0 + # Cleaner for the old version if detected if len(sys.argv) > 1: globs.CNIRNewVersion = True @@ -258,11 +295,13 @@ def umain(): logfile.printerr(str(e)) launcherWindow.printmsg('Fail :{}'.format(e)) launcherWindow.printmsg('Starting...') + else: + tessInstall(globs.CNIRFolder, credentials) try: try: # EXECUTING THE UPDATE BATCH - success = batch() + success = batch(credentials) except Exception as e: logfile.printerr("An error occured on the thread : " + str(traceback.format_exc())) launcherWindow.printmsg('ERROR : ' + str(e))