161 lines
6.6 KiB
Python
161 lines
6.6 KiB
Python
"""
|
|
Copyright (c) 2020 Sdj Geek
|
|
Voir le fichier LICENSE
|
|
|
|
Ce programme permet de comparer le fichier des personnes décédées établi par l'INSEE avec les registre de membres de
|
|
l'Église, afin de déterminer si figurent dans nos registre des personnes décédées.
|
|
|
|
L'INSEE reçoit des communes les décès enregistrés. Le fichier des personnes décédées établi par l'INSEE est en accès
|
|
libre sur le site https://www.data.gouv.fr.
|
|
|
|
"""
|
|
import tkinter as tk
|
|
import tkinter.ttk as ttk
|
|
import tkinter.filedialog as tkfiledialog
|
|
from multiprocessing import Process, Pipe
|
|
|
|
from trouver_decedes import trouver_decedes
|
|
|
|
|
|
class MainApplication(tk.Frame):
|
|
def __init__(self, parent, *args, **kwargs):
|
|
# Worker
|
|
self.run = False
|
|
self.pipe = None
|
|
|
|
# GUI
|
|
tk.Frame.__init__(self, parent, *args, **kwargs)
|
|
self.parent = parent
|
|
self.frame = tk.Frame(parent)
|
|
self.frame.pack()
|
|
|
|
# Sélection base INSEE
|
|
self.label_bdd_insee = tk.Label(self.frame, text="Fichier de l'INSEE")
|
|
self.label_bdd_insee.grid(row=0, column=0, sticky='e')
|
|
self.value_bdd_insee = tk.StringVar()
|
|
self.entry_bdd_insee = tk.Entry(self.frame, state='disabled', textvariable=self.value_bdd_insee)
|
|
self.entry_bdd_insee.grid(row=0, column=1, sticky='ew')
|
|
self.button_bdd_insee = tk.Button(self.frame, text="...", command=self.command_button_bdd_insee)
|
|
self.button_bdd_insee.grid(row=0, column=2, sticky='w')
|
|
|
|
# Sélection fichier Excel
|
|
self.label_fichier_excel = tk.Label(self.frame, text="Fichier Excel")
|
|
self.label_fichier_excel.grid(row=1, column=0, sticky='e')
|
|
self.value_fichier_excel = tk.StringVar()
|
|
self.entry_fichier_excel = tk.Entry(self.frame, state='disabled', textvariable=self.value_fichier_excel)
|
|
self.entry_fichier_excel.grid(row=1, column=1, sticky='ew')
|
|
self.button_fichier_excel = tk.Button(self.frame, text="...", command=self.command_button_fichier_excel)
|
|
self.button_fichier_excel.grid(row=1, column=2, sticky='w')
|
|
|
|
# Sélection répertoire sortie
|
|
self.label_dir_out = tk.Label(self.frame, text="Répertoire de sortie")
|
|
self.label_dir_out.grid(row=2, column=0, sticky='e')
|
|
self.value_dir_out = tk.StringVar()
|
|
self.entry_dir_out = tk.Entry(self.frame, state='disabled', textvariable=self.value_dir_out)
|
|
self.entry_dir_out.grid(row=2, column=1, sticky='ew')
|
|
self.button_dir_out = tk.Button(self.frame, text="...", command=self.command_button_dir_out)
|
|
self.button_dir_out.grid(row=2, column=2, sticky='w')
|
|
|
|
# Sélection des unités à traiter
|
|
self.label_units = tk.Label(self.frame, text="Unités à purger")
|
|
self.label_units.grid(row=3, column=0, sticky='e')
|
|
self.value_units = tk.StringVar()
|
|
self.entry_units = tk.Entry(self.frame, textvariable=self.value_units)
|
|
self.entry_units.grid(row=3, column=1, sticky='ew', columnspan="2")
|
|
|
|
# Bouton validation
|
|
self.button_valid = tk.Button(self.frame, text="Ok", command=self.command_button_valid)
|
|
self.button_valid.grid(row=4, column=0, columnspan=3)
|
|
|
|
# Barre de progression
|
|
self.progressbar = ttk.Progressbar(self.frame, orient=tk.HORIZONTAL, mode='determinate')
|
|
self.progressbar.grid(row=5, column=0, columnspan=3, sticky='ew')
|
|
|
|
# Affichage des logs
|
|
self.text_log = tk.Text(self.frame, state='disabled')
|
|
self.text_log.grid(row=0, column=3, rowspan=6, sticky='nesw')
|
|
|
|
def command_button_bdd_insee(self):
|
|
self.value_bdd_insee.set(tkfiledialog.askopenfilename(title="Fichier de l'INSEE"))
|
|
|
|
def command_button_fichier_excel(self):
|
|
self.value_fichier_excel.set(tkfiledialog.askopenfilename(title="Fichier Excel"))
|
|
|
|
def command_button_dir_out(self):
|
|
self.value_dir_out.set(tkfiledialog.askdirectory(title="Répertoire de sortie"))
|
|
|
|
def add_log(self, text):
|
|
self.text_log.configure(state='normal')
|
|
self.text_log.insert(tk.END, text)
|
|
self.text_log.configure(state='disabled')
|
|
|
|
def clear_log(self):
|
|
self.text_log.configure(state='normal')
|
|
self.text_log.delete('1.0', tk.END)
|
|
self.text_log.configure(state='disabled')
|
|
|
|
def watch(self):
|
|
if self.run:
|
|
if self.pipe.poll():
|
|
message = self.pipe.recv()
|
|
if message.get('step', False):
|
|
self.progressbar.step(message['step'])
|
|
elif message.get('text', False):
|
|
self.add_log(message['text'])
|
|
elif 'running' in message:
|
|
self.run = message['running']
|
|
elif message.get('set_max', False):
|
|
self.progressbar["value"] = 0
|
|
self.progressbar['maximum'] = message['set_max']
|
|
self.parent.after(100, self.watch)
|
|
else:
|
|
self.add_log("\nRecherche terminée\n")
|
|
self.button_valid.configure(state='normal')
|
|
|
|
def command_button_valid(self):
|
|
self.button_valid.configure(state='disabled')
|
|
self.clear_log()
|
|
self.run = True
|
|
(conn1, conn2) = Pipe()
|
|
self.pipe = conn1
|
|
unite = self.value_units.get().split(',')
|
|
if unite == ['']:
|
|
unite = None
|
|
Worker(conn2, self.value_bdd_insee.get(), self.value_fichier_excel.get(), self.value_dir_out.get(), unite).start()
|
|
self.watch()
|
|
|
|
|
|
class Worker(Process):
|
|
def __init__(self, pipe, bdd_insee, fichier_excel, dir_out, units):
|
|
Process.__init__(self)
|
|
self.pipe = pipe
|
|
self.bdd_insee = bdd_insee
|
|
self.fichier_excel = fichier_excel
|
|
self.dir_out = dir_out
|
|
self.units = units
|
|
|
|
def tracker(self, step=None, text=None, set_max=None, running=None):
|
|
if step is not None:
|
|
self.pipe.send({'step': step})
|
|
elif text is not None:
|
|
self.pipe.send({'text': text})
|
|
elif set_max is not None:
|
|
self.pipe.send({'set_max': set_max})
|
|
elif running is not None:
|
|
self.pipe.send({'running': running})
|
|
|
|
def run(self):
|
|
trouver_decedes(chemin_base_donnees=self.bdd_insee,
|
|
excel_path=self.fichier_excel,
|
|
chemin_repertoire_sortie=self.dir_out,
|
|
numeros_unites=self.units,
|
|
tracker=self.tracker)
|
|
self.pipe.send({'running': False})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
root = tk.Tk()
|
|
root.title('Recherche des personnes décédées dans les registres')
|
|
MainApplication(root).pack(side="top", fill="both", expand=True)
|
|
root.mainloop()
|