Commit 99096fe7 authored by Jérémie Passerat's avatar Jérémie Passerat

Sauvegarde avant modifs tests

parent 50692b41
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
......@@ -73,11 +73,13 @@ def hello_world():
'class="m-l-1">Faux</label> </div></div></div></div></div></div></form></div></body></html> '
# Fonction censée se déclencher quand le token lu n'est pas bon
@jwt.unauthorized_loader
def my_invalid_token_callback(expired_token):
return jsonify(code="dave", err="I can't let you do that"), 401
# Fonction censée se déclencher après lecture
# todo (Peut être) Compléter cette fonction pour lire le token et lancer un rafraichissement si besoin
@app.after_request
def refresh_expiring_jwts(response):
try:
......@@ -98,7 +100,7 @@ def refresh():
## *********************************************************************************************************************
## Test de manipulation des images
## Test de manipulation des images - inutile actuellement, car les images ont été remplacées par des caractères unicode
image = api.namespace('images', description="pour les champs qui le nécessitent, permet de récupérer des images")
......
File mode changed from 100644 to 100755
......@@ -19,6 +19,7 @@ class GitUtils:
# @param cheminFichier le chemin du fichier
# @param texteCommit le texte associé au commit
# @return le hash du commit
# inutile actuellement, mais conservé au cas où
# def embranchement(self, cheminFichier, nomBranche):
# repo = Repo.init(cheminFichier)
# repo.create_head(nomBranche, 'HEAD')
......
......@@ -31,13 +31,11 @@ class Utils:
from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao
if (en_cours):
chemin = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
else:
chemin = ContenuDao().get_chemin_du_contenu(id_contenu)
with open(chemin, "r") as fichier:
texte = fichier.read()
......@@ -82,6 +80,8 @@ class Utils:
myFile.write(nouveau_texte)
myFile.close()
## Fonction permettant, quand l'utilisateur consulte un contenu et revient en arriere, de s'assurer que la version "chargée" du fichier soit la dernière
# @param id_contenu l'id du contenu consulté
def recalibrerGit(self, id_contenu):
from modele.contenu_dao import ContenuDao
version = ContenuDao().get_version_courante(id_contenu)
......
......@@ -66,6 +66,12 @@ class ContenuDao:
{"$set": {"versionEnCours.commit": commit}})
## Fonction qui permet d'importer un nouveau contenu
# @param auteur l'auteur qui est en train d'importer le contenu
# @param file le fichier importe
# @param tags les tags associes au fichier importe
# @param descriptif (optionnel). Si le fichier n'est pas un xml, doit être renseigné
# @param type (optionnel). Si le fichier n'est pas un xml, indique le type du fichier importé
# @param titreFichier (optionnel). Si le fichier n'est pas un xml, indique le titre du fichier importé
def importer_contenu(self, auteur, file, tags, descriptif=None, type=None, titreFichier=None):
from xml.dom import minidom
......@@ -76,14 +82,12 @@ class ContenuDao:
chemin_tags = '/'.join(json.loads(tags)) + "/"
print("chemin_tags : ", chemin_tags)
print("filename : ", filename)
chemin_fichier = self.chemin + chemin_tags + filename + "/"
Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True)
file.save(os.path.join(chemin_fichier, filename))
print("chemin_fichier : ", chemin_fichier)
if titreFichier is None:
# on récupère le vrai titre du contenu
......@@ -167,13 +171,9 @@ class ContenuDao:
contenu_tiers["provenance"] = "tiers"
contenu_tiers["version"] = id_tiers[i][1]["version"]
note = self.recupererNoteContenu(id_tiers[i][0]["contenu"], id_tiers[i][1]["version"], auteur)
print("note : ", note)
if note == -1:
contenu_tiers["note_perso"] = "-"
print("ici")
# print("prout caca : " + contenu_tiers["note_perso"])
else:
print("là")
contenu_tiers["note_perso"] = note
contenus.append(contenu_tiers)
......@@ -189,7 +189,6 @@ class ContenuDao:
for contenu in curseur_en_cours:
contenu["provenance"] = "en-cours"
contenu["tags_libres"] = self.recuperer_tags_libres_contenu(contenu["_id"], auteur)
# print("tags libres en_cours", contenu["tags_libres"])
contenus.append(contenu)
# on garde le développement de l'évaliation pour plus tard
# return contenus_persos + contenus_en_cours + contenus_tiers
......@@ -255,7 +254,6 @@ class ContenuDao:
def supprimer_tiers(self, id_tiers, auteur, version, note):
note_contenu = self.recupererNoteContenu(id_tiers, auteur, version)
print("note : ", note_contenu)
# on distingue le cas ou une note a été donnée ou non
if note == "-":
self.base_donnees.utilisateur.update_one({"nom": auteur},
......@@ -383,7 +381,6 @@ class ContenuDao:
titre_en_cours = EncoursDao().get_titre_en_cours(id_contenu_en_cours)
# print ("Titre en cours " + titre_en_cours)
Utils().changer_texte_fichier(id_contenu, nouveau_texte, titre_en_cours, True)
......@@ -483,7 +480,6 @@ class ContenuDao:
# On réfcupère tous les ties d'un auteur
tiers = self.get_contenus_tiers(auteur)
print("Je le ai ", len(tiers), " tiers disponibles")
for i in range(len(tiers)):
versionCourante = self.get_version_courante(tiers[i][0]["contenu"])
if tiers[i][1]["version"] < versionCourante:
......@@ -511,6 +507,7 @@ class ContenuDao:
# @return le commit associé à la version
def get_commit_pour_une_version(self, id_contenu, version):
version = str(version)
if version == str(self.get_version_courante(id_contenu)) or version == '0':
courante = self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["versionEnCours"]
return courante["commit"]
......@@ -542,10 +539,8 @@ class ContenuDao:
self.base_donnees.contenu.update_one({"_id": ObjectId(id_contenu)},
{"$set": {"fichier": chemin_tags + id_contenu + "/" + id_contenu}})
# print(self.get_chemin_du_contenu(id_contenu))
Path(self.chemin + chemin_tags + id_contenu + "/").mkdir(0o777, parents=True, exist_ok=True)
print(ancien_chemin[:ancien_chemin.rfind("/")])
print(ancien_chemin[:ancien_chemin.rfind("/") + 1])
Path(ancien_chemin).rename(self.get_chemin_du_contenu(id_contenu))
self.rm_tree(Path(ancien_chemin[:ancien_chemin.rfind("/") + 1]))
......@@ -617,15 +612,12 @@ class ContenuDao:
# on récupère les tags
tags = self.base_donnees.utilisateur.find_one({"nom": auteur})["tags"]
print("foinest : ", tags)
# on "vide" les tags (qu'on réinjectera)
self.base_donnees.utilisateur.update_one({"nom": auteur}, {"$set": {"tags": []}})
# on parcourt chaque tag et on vire les mentions à id_contenu
for letag in tags:
print("Coutch")
if letag[0]['tag'] == tag:
letag[1]['contenus'].append(ObjectId(id_contenu))
# print("J'ajoute le contenu : ", ObjectId(id_contenu), "\n")
letag[1]['contenus'] = list(set(letag[1]['contenus']))
self.base_donnees.utilisateur.update_one({"nom": auteur}, {"$set": {"tags": tags}})
......@@ -705,7 +697,9 @@ class ContenuDao:
/ self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["versionEnCours"]["nbreNotes"]
else:
historique = self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["historique"]
return "popapopapa"
# todo PARTIE MANQUANTE - A DEVELOPPER
# DANS CETTE PARTIE ON DOIT ETRE CAPABLE D'ALLER CHERCHER LA NOTE D'UNE VERSION QUI N'EST PAS LA VERSION EN COURS
return "-"
## Fonction permettant de changer la moyenne d'une version d'un contenu à l'insertion d'une nouvelle note
# @param id_contenu l'id du contenu concerné
......@@ -724,7 +718,6 @@ class ContenuDao:
else:
print("Non, là")
contenus = self.base_donnees.contenu.find_one({"_id": ObjectId(id_contenu)})["historique"]
self.base_donnees.contenu.update_one({"_id": ObjectId(id_contenu)}, {"$set": {"historique": []}})
for cont in contenus:
......@@ -746,7 +739,6 @@ class ContenuDao:
def previsualiser_xml_moodle(self, id_contenu, en_cours=False):
texte = Utils().recuperer_contenu_fichier(id_contenu, en_cours)
# exit(0)
# on va stocker tous les éléments séparés dans cette structure
elements_question = dict()
......@@ -769,8 +761,6 @@ class ContenuDao:
for question in root.iter('questiontext'):
for intitule in question.iter('text'):
# print("new game now loading : " + intitule.text)
# elements_question["intitule_question"] = intitule.text[3:len(intitule.text) - 4]
elements_question["intitule_question"] = intitule.text
for general in root.iter('generalfeedback'):
......@@ -798,7 +788,6 @@ class ContenuDao:
elif elements_question["type_question"] == "shortanswer":
# majuscule -> permet la casse (à 1) ou non (à 0)
# majuscule = ''
for usecase in root.iter('usecase'):
elements_question["majuscule"] = usecase.text
# on récupère les réponses valables, les notes associées et les feedback
......@@ -813,10 +802,6 @@ class ContenuDao:
for feed in feedback.iter('text'):
liste_feedback.append(feed.text)
# for k in range(3):
# liste_reponse.append("")
# liste_note.append("")
# liste_feedback.append("")
elements_question["liste_reponse"] = liste_reponse
elements_question["liste_note"] = liste_note
......@@ -824,10 +809,8 @@ class ContenuDao:
elif elements_question["type_question"] == "multichoice":
# nb_reponse = ''
for single in root.iter('single'):
elements_question["nb_reponse"] = single.text
# print ("nb_reponse : ", nb_reponse)
for shuffleanswers in root.iter('shuffleanswers'):
elements_question["melange_reponse"] = shuffleanswers.text
......@@ -900,7 +883,6 @@ class ContenuDao:
for feed in feedback.iter('text'):
liste_feedback.append(feed.text)
for tolerance in answer.iter('tolerance'):
# print ("tolerance : ", tolerance.text)
if tolerance.text is not None:
liste_tolerance.append(tolerance.text)
if elements_question["type_question"] == "calculatedsimple":
......@@ -923,30 +905,6 @@ class ContenuDao:
elements_question["liste_reponse_format"] = liste_reponse_format
elements_question["liste_reponse_taille"] = liste_reponse_taille
# elif elements_question["type_question"] == 'calculatedsimple':
# print("calculatedsimple")
#
# liste_reponse = []
# liste_note = []
# liste_feedback = []
# liste_erreur = []
# for answer in root.iter('answer'):
# liste_note.append(answer.attrib["fraction"])
# for question in answer.iter('text'):
# liste_reponse.append(question.text)
# for feedback in answer.iter('feedback'):
# for feed in feedback.iter('text'):
# liste_feedback.append(feed.text)
# for tolerance in answer.iter('tolerance'):
# liste_erreur.append(tolerance.text)
#
# elements_question["liste_reponse"] = liste_reponse
# elements_question["liste_note"] = liste_note
# elements_question["liste_feedback"] = liste_feedback
# elements_question["liste_tolerance"] = liste_erreur
# print("elements_question : ", elements_question)
return elements_question
## Fonction permettant de modifier un xml Moodle
......@@ -957,7 +915,6 @@ class ContenuDao:
texte = Utils().recuperer_contenu_fichier(id_contenu, en_cours)
root = ET.fromstring(texte)
print(elements_contenu)
# On parcourt tous les champs généralistes (type_question est inamovible)
for note in root.iter('defaultgrade'):
......@@ -972,8 +929,6 @@ class ContenuDao:
for question in root.iter('questiontext'):
for intitule in question.iter('text'):
# print("new game now loading : " + intitule.text)
# elements_question["intitule_question"] = intitule.text[3:len(intitule.text) - 4]
intitule.text = elements_contenu["intitule_question"]
for general in root.iter('generalfeedback'):
......@@ -985,7 +940,6 @@ class ContenuDao:
if elements_contenu["type_question"] == "truefalse":
note_faux = 0
# # on récupère la bonne réponse (mise par défault à Vrai mais changée si besoin).
# bonne_reponse = 'Vrai'
i = 0
for answer in root.iter('answer'):
if i == 0:
......@@ -994,20 +948,13 @@ class ContenuDao:
answer.attrib["fraction"] = '100' if elements_contenu['bonne_reponse'] == 'Faux' else '0'
i = i + 1
# for feedback in answer.iter('text'):
# feedback.text = elements_contenu["liste_feedback"][i]
elif elements_contenu["type_question"] == "shortanswer":
pass
# majuscule -> permet la casse (à 1) ou non (à 0)
# majuscule = ''
for usecase in root.iter('usecase'):
usecase.text = elements_contenu["majuscule"]
# on récupère les réponses valables, les notes associées et les feedback
liste_reponse = []
liste_note = []
liste_feedback = []
i = 0
......@@ -1022,11 +969,7 @@ class ContenuDao:
i += 1
print("A la sortie, i = ", i)
print("J'ai ", len(elements_contenu["liste_reponse"]), " reponses")
if i < len(elements_contenu["liste_reponse"]):
print("Je le ai ", len(elements_contenu["liste_reponse"]) - i, " nouveaux contenus")
for question in root.iter('question'):
# eltQuestion = root.iter("question")
new_answer = SubElement(question, "answer")
......@@ -1039,15 +982,6 @@ class ContenuDao:
text_feedback.text = elements_contenu["liste_feedback"][i]
i += 1
# # for k in range(3):
# # liste_reponse.append("")
# # liste_note.append("")
# # liste_feedback.append("")
#
# elements_question["liste_reponse"] = liste_reponse
# elements_question["liste_note"] = liste_note
# elements_question["liste_feedback"] = liste_feedback
elif elements_contenu["type_question"] == "multichoice":
pass
......@@ -1072,7 +1006,6 @@ class ContenuDao:
i += 1
if i < len(elements_contenu["liste_reponse"]):
print("Je le ai ", len(elements_contenu["liste_reponse"]) - i, " nouveaux contenus")
for question in root.iter('question'):
# eltQuestion = root.iter("question")
new_answer = SubElement(question, "answer")
......@@ -1128,9 +1061,6 @@ class ContenuDao:
unit_name = SubElement(new_unit, "unit_name")
unit_name.text = elements_contenu["liste_unite_nom"][i]
# print("Je le ai ", len(elements_contenu["liste_note"]), " notes, ", len(elements_contenu["liste_feedback"]), " feedbacks, ",
# len(elements_contenu["liste_reponse"]), " reponses et ", len(elements_contenu["liste_tolerance"]), "tolerances")
i = 0
for answer in root.iter('answer'):
answer.attrib["fraction"] = elements_contenu["liste_note"][i]
......@@ -1158,7 +1088,6 @@ class ContenuDao:
# on ajoute les éventuelles nouvelles réponses
if i < len(elements_contenu["liste_reponse"]):
for question in root.iter('question'):
# eltQuestion = root.iter("question")
new_answer = SubElement(question, "answer")
new_answer.attrib["fraction"] = elements_contenu["liste_note"][i]
new_answer.attrib["format"] = "moodle_auto_format"
......
File mode changed from 100644 to 100755
......@@ -76,26 +76,24 @@ class EncoursDao:
def creer_en_cours(self, auteur, provenance, contenu, titre):
from modele.contenu_dao import ContenuDao
# on calcule la moyenne du futur contenu en_cours
if contenu["versionEnCours"]["nbreNotes"] == 0:
moyenne = 0
else:
moyenne = contenu["versionEnCours"]["note"] / contenu["versionEnCours"]["nbreNotes"]
# print("auteur : ", auteur)
# print("provenance : ", provenance)
# print("titre : ", titre)
# print("id : ", contenu["_id"]["$oid"])
# print("type id : ", type(contenu["_id"]["$oid"]))
# print("version : ", contenu["versionEnCours"]["numero"])
if type(contenu["tags_fixes"]) == "string":
tags_fixes = json.loads(contenu["tags_fixes"])
else:
tags_fixes = contenu["tags_fixes"]
# Si le contenu est anonyme un champ supplémentaire est ajouté dans les méta données
if ContenuDao().is_anonyme(contenu["_id"]["$oid"]):
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(contenu["_id"]["$oid"]), "version": contenu["versionEnCours"]["numero"],
"origine": provenance, "tags_fixes": json.loads(contenu["tags_fixes"]),
"origine": provenance, "tags_fixes": tags_fixes,
"titre": titre, "type": contenu["type"], "source": contenu["source"], "moyenne": moyenne,
"anonyme": "oui"})
......@@ -104,16 +102,19 @@ class EncoursDao:
self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(contenu["_id"]["$oid"]), "version": contenu["versionEnCours"]["numero"],
"origine": provenance, "tags_fixes": json.loads(contenu["tags_fixes"]),
"origine": provenance, "tags_fixes": tags_fixes,
"titre": titre, "type": contenu["type"], "source": contenu["source"], "moyenne": moyenne})
# on créée le chemin pour le fichier en_cours
id = self.recuperer_dernier_id()
chemin_tags = '/'.join(json.loads(contenu["tags_fixes"])) + "/"
chemin_tags = '/'.join(tags_fixes) + "/"
nom_fichier = (contenu["fichier"][contenu["fichier"].rfind("/") + 1:])
chemin_fichier = self.chemin + chemin_tags + nom_fichier + "/"
Path(chemin_fichier).mkdir(0o777, parents=True, exist_ok=True)
# on écrit dans le fichier juste créé
myFile = open(chemin_fichier + nom_fichier, "w")
# y ajouter le texte du contenu
myFile.write(self.utils.recuperer_contenu_fichier(contenu["_id"]["$oid"]))
......
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
......@@ -86,7 +86,8 @@ def test_supprimer_contenu_en_tiers_chez_qqun_autre(client):
contenus = json.loads(rv.data)
filtered_contenu = [contenu for contenu in contenus if contenu["_id"] == id]
assert filtered_contenu[0]["auteur"] == "Aucun"
from modele.contenu_dao import ContenuDao
contenu = ContenuDao().get_contenu_par_id(id)
# login 2 modifie son tiers (désormais d'auteur Aucun)
data = {"auteur": loginDeux, "id_contenu": json.dumps(id), "provenance": "tiers", "version": 1}
# création d'un contenu en_cours
......
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