Commit 0835402f authored by Quentin Pimont's avatar Quentin Pimont
Browse files

ajout commentaire, fichiers resp.csv ne prend seulement les étusdiants qui ont...

ajout commentaire, fichiers resp.csv ne prend seulement les étusdiants qui ont passé le test et amélioration performance
parent 88e463bf
......@@ -8,12 +8,10 @@ import os
class GuiPubli():
student_tested = []
student_filtered = []
all_student = []
all_login_student = []
path_output_dir = ''
def __init__(self):
# header du fichernote.csv
self.header_score_file = ['Prénom', 'Nom', 'Tuteur', 'Adresse de courriel', 'Analyser un algorithme_info NF01', 'Analyser le mouvement d\'un corps en chute libre_phys PS21',
'Associer une fonction dérivée à une fonction primitive_math PS21 MT90 PS90', 'Calculer des dérivées dont des fonctions composées_math CM11 PS21 MT90 PS90', 'Calculer des intégrales simples_math CM11 MT90',
'Calculer module et argument d\'une opération sur les nombres complexes_math PS94 MT90', 'Calculer des vitesses_phys PS21', 'Comprendre l\'appartenance à un ensemble_math PS93 MT90',
......@@ -27,10 +25,13 @@ class GuiPubli():
'Reconnaître la courbe représentative d\'une fonction_math MT90', 'Reconnaître une suite géométrique ou arithmétique_math MT90', 'Tester le principe de linéarité_math MT90',
'Trouver la forme canonique d\'un polynôme_math MT90', 'Utiliser les fonctions logarithme, exponentielle et puissance_math MT90 NF01 CM11',
'Définir le PGCD et PPMC_math MT90 NF01', 'Définir le centre de gravité_phys PS21', 'Total du cours']
# liste des uv testé
self.uvs_tested = ['CM11', 'MT90', 'NF01', 'PS21', 'PS90', 'PS93', 'PS94']
# label pour les input file et dir de l'interface
self.path_xml_student = 'Renseigner le fichier des étudiants'
self.path_amc = 'Renseigner le fichier amc'
self.path_output_dir = 'Renseigner le dossier ou seront\nenregistré les fichiers généré'
# texte qui signifira la fin de la génération
self.progress_text = ''
# récupère le dossier où les fichiers générés seront enregistré
def set_output_dir(self):
......@@ -46,21 +47,29 @@ class GuiPubli():
self.label_xml_etudiant.config(text = self.path_xml_student)
# parse le xml
def get_trees(self):
print(self.path_xml_student)
self.tree = etree.parse(self.path_xml_student)
self.list_uvs = self.tree.xpath('/ExtractionInscriptions/ListeEnseignements/Enseignement')
self.semester = self.tree.xpath('/ExtractionInscriptions/Semestre')[0].text
# crée le fichier note
def create_score_file(self):
# créer le g=ficher note.csv dans le dossier renseigné
csv_score = open(self.path_output_dir + 'note.csv', 'w')
# crée l'objet qui ecrira dans note.csv
writer_csv_score = csv.DictWriter(csv_score, fieldnames = self.header_score_file, quoting = csv.QUOTE_NONNUMERIC)
# ecrit le header du fichier note.csv
writer_csv_score.writeheader()
# ouvre le fichier générez par amc
with open(self.path_amc) as amc_csv :
# convertit le fichier en liste 2d
read_csv = csv.reader(amc_csv, delimiter=',')
# parcour toutes les lignes du csv
for index_row, row in enumerate(read_csv):
# si c'est le header (première ligne)
if(index_row == 0):
# recupère les index de toutes les questions,le nom, le mail et la note final
all_index = {
'index_name' : row.index('Nom'),
'index_email' : row.index('Email'),
'note' : row.index('note'),
'206' : row.index('206'),
'208' : row.index('208'),
......@@ -119,21 +128,39 @@ class GuiPubli():
'thales42' : row.index('thales42'),
'vec82' : row.index('vec82')
}
# si c'est pas le header
else:
# ci la ligne est un etudiant
if(row[all_index['index_name']]!= ''):
# indique si l'étudiant à été trouvé
student_finded = False
# récupération du nom complet de l'étudiant
full_name_current_student = row[all_index['index_name']]
self.student_tested.append(full_name_current_student)
# préparation des variable pour le nom et le prenom de l'etudiant séparé
first_name_current_stud = ''
last_name_current_stud = ''
email_current_stud = ''
# email de l'etudiant
email_current_stud = row[all_index['index_email']]
# pour chaque uv
for ev in self.list_uvs :
# on récupère les étudiant de cet uv puis on les parcours
for student_ev in ev.xpath('ListeInscrits/Inscrit') :
if(full_name_current_student == student_ev.xpath('Prenom')[0].text + ' ' + student_ev.xpath('Nom')[0].text):
# si le nom ou l'email correspond à ceux de l'etudiant courant
if(full_name_current_student == student_ev.xpath('Prenom')[0].text + ' ' + student_ev.xpath('Nom')[0].text or email_current_stud == student_ev.xpath('Email')[0].text):
# on recupère son nom et prénom
first_name_current_stud = student_ev.xpath('Prenom')[0].text
last_name_current_stud = student_ev.xpath('Nom')[0].text
email_current_stud = student_ev.xpath('Email')[0].text
# on ajoute le mail dans une liste qui servira pour le fichier resp.csv
self.student_tested.append(email_current_stud)
# on indique que l'etudiant à été trouvé
student_finded = True
# on arrête le parcours des étudiants de cet uv
break
# si l'etudiant à été trouvé
if(student_finded):
# on arrète le parcours des uvs
break
# on prépare la ligne à erire pour l'étudiants avec son nom, prénoms, mails, et le calcul des notes pour chaque catégories.
current_row = {
'Prénom' : first_name_current_stud,
'Nom' : last_name_current_stud,
......@@ -178,6 +205,7 @@ class GuiPubli():
'Définir le centre de gravité_phys PS21' : (self.convert_int(row[all_index['Poutres12']]) + self.convert_int(row[all_index['Poutres41']])) * 100 / 2,
'Total du cours' : self.convert_float(row[all_index['note']]) * 5
}
# puis on ecrire la ligne
writer_csv_score.writerow(current_row)
# crée le fichier responsable
def create_resp_file(self):
......@@ -211,8 +239,12 @@ class GuiPubli():
student_uv = uv.xpath('ListeInscrits/Inscrit')
# pour chaque etudiant
for student in student_uv:
# recupère son mail dans une liste
mails_student_uv.append(student.xpath('Email')[0].text)
# recupère l'email de l'étudiant courant
mail_current_stud = student.xpath('Email')[0].text
# si l'etudiant a passé le test
if(mail_current_stud in self.student_tested):
# on ajoutes son mail dans une liste
mails_student_uv.append(mail_current_stud)
# ajout de la liste dans une autre liste qui contient toutes les listes des mails de chaque uv
all_etu.append(mails_student_uv)
# écrit les 3ère lignes du resp.csv(id/code, titre et responsable)
......@@ -254,7 +286,9 @@ class GuiPubli():
remaining_student = False
def make_gui(self):
# initiation de l'interface graphique
self.window = Tk()
# création de tous les boutons et labels de l'interface
self.label_xml_etudiant = Label(self.window, text=self.path_xml_student)
button_xml_etudiant = Button(self.window, text='sélectionner un fichier', command=self.set_xml_etu)
self.label_amc_file = Label(self.window, text=self.path_amc)
......@@ -263,6 +297,7 @@ class GuiPubli():
button_output_dir = Button(self.window, text='sélectionner un dossier', command=self.set_output_dir)
self.buton_generate = Button(self.window, text='générer les fichiers', command=self.generate)
self.progress = Label(self.window, text=self.progress_text)
# positionne tous les éléments de l'interface
self.label_xml_etudiant.grid(row = 1, column = 1)
button_xml_etudiant.grid(row = 1, column = 3)
self.label_amc_file.grid(row = 3, column = 1)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment