Commit 568b0c25 authored by Jérémie Passerat's avatar Jérémie Passerat

Version finale avant présentation du 07/05/21

parent 37c8db99
...@@ -28,10 +28,22 @@ from Utils import Utils ...@@ -28,10 +28,22 @@ from Utils import Utils
# 2. Installer les outils mentionnés ci dessus \n # 2. Installer les outils mentionnés ci dessus \n
# 3. Modifier le chemin présent à la ligne 21 du fichier Utils.py (et le remplacer par le chemin ou vous avez cloné le dépôt git) \n # 3. Modifier le chemin présent à la ligne 21 du fichier Utils.py (et le remplacer par le chemin ou vous avez cloné le dépôt git) \n
# 4. Lancer Main.py, soit directement à la main, soit via un IDE configuré pour ça (environnement virtual utilisable) \n # 4. Lancer Main.py, soit directement à la main, soit via un IDE configuré pour ça (environnement virtual utilisable) \n
Menu() #Menu()
Utils.initialise_mongo()
contenus_autres = Utils.get_contenus("Auteur 1", False)
for elt in contenus_autres:
print("id : ", elt["id"], "nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du",
elt["versionEnCours"]["date"])
print (" -------------------------------------------- ")
contenus = Utils.get_contenus("Auteur 1", True)
for elt in contenus:
print("id : ", elt["id"], "nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du",
elt["versionEnCours"]["date"])
# Utils.initialise_mongo()
# Utils.tout_peter() # Utils.tout_peter()
# Utils.creer_auteur_si_besoin() # Utils.creer_auteur_si_besoin()
# Utils.ajouter_contenu("Contenu1", "Auteur 1") # Utils.ajouter_contenu("Contenu1", "Auteur 1")
......
...@@ -141,6 +141,7 @@ class Menu: ...@@ -141,6 +141,7 @@ class Menu:
if action == 'c': if action == 'c':
os.system('clear') os.system('clear')
print("Bonjour ", self.auteur_en_cours) print("Bonjour ", self.auteur_en_cours)
print("Vous consultez le contenu ", id)
Utils.changer_version(id, 0, "master") Utils.changer_version(id, 0, "master")
if Utils.get_version_courante(id) != 1: if Utils.get_version_courante(id) != 1:
print("Je choisis la version que je veux : (entre 1 et", Utils.get_version_courante(id), ")") print("Je choisis la version que je veux : (entre 1 et", Utils.get_version_courante(id), ")")
...@@ -150,7 +151,7 @@ class Menu: ...@@ -150,7 +151,7 @@ class Menu:
Utils.changer_version(id, choix) Utils.changer_version(id, choix)
else: else:
version_courante = int(Utils.get_version_courante(id)) version_courante = int(Utils.get_version_courante(id))
Utils.changer_version(version_courante, id) Utils.changer_version(id, version_courante)
print("Voici le détail de votre contenu n°", id) print("Voici le détail de votre contenu n°", id)
Utils.consulter_un_contenu(id, self.auteur_en_cours) Utils.consulter_un_contenu(id, self.auteur_en_cours)
# Utils.affichage(Utils.get_chemin_du_contenu(id)) # Utils.affichage(Utils.get_chemin_du_contenu(id))
...@@ -197,7 +198,7 @@ class Menu: ...@@ -197,7 +198,7 @@ class Menu:
def afficher_contenus(self, contenu): def afficher_contenus(self, contenu):
for elt in contenu: for elt in contenu:
print("nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du", print("id : ", elt["id"], "nom :", elt["fichier"], " - v", elt["versionEnCours"]["numero"], " - du",
elt["versionEnCours"]["date"]) elt["versionEnCours"]["date"])
def modifier_contenu(self, id_contenu): def modifier_contenu(self, id_contenu):
...@@ -345,7 +346,7 @@ class Menu: ...@@ -345,7 +346,7 @@ class Menu:
self.valider_modification(id) self.valider_modification(id)
print("La demande de validation du contenu a été effectuée") print("La demande de validation du contenu a été effectuée")
# Si le contenu validé est d'origine personnelle on peut supprimer le en cours (sinon on le conserve) # Si le contenu validé est d'origine personnelle on peut supprimer le en cours (sinon on le conserve)
if not Utils.is_tiers_auteur(self.auteur_en_cours, id): if not Utils.is_tiers_auteur(self.auteur_en_cours, id) or Utils.is_anonyme(id):
Utils.supprimer_contenu_en_cours(int(id)) Utils.supprimer_contenu_en_cours(int(id))
print("Appuyer sur q pour revenir en arriere : ") print("Appuyer sur q pour revenir en arriere : ")
...@@ -374,7 +375,10 @@ class Menu: ...@@ -374,7 +375,10 @@ class Menu:
for elt in contenu: for elt in contenu:
print("id Modif :", elt["idContenuEC"], "auteur original :", elt["auteur"], " - id Original :", print("id Modif :", elt["idContenuEC"], "auteur original :", elt["auteur"], " - id Original :",
elt["reference"], elt["reference"],
"version original", elt["version"], " date modif ", elt["date"]) "version original", elt["version"], " date modif ", elt["date"], end='')
if Utils.is_en_cours_demande(elt["idContenuEC"], self.auteur_en_cours):
print("(demande de publication en cours sur ce contenu)")
#print("\n")
## Menu des contenus en banque ## Menu des contenus en banque
...@@ -450,7 +454,7 @@ class Menu: ...@@ -450,7 +454,7 @@ class Menu:
idContenu = Utils.get_id_contenu_associe_a_un_en_cours(idContenuEnCours) idContenu = Utils.get_id_contenu_associe_a_un_en_cours(idContenuEnCours)
branche = Utils.get_branche_contenu_en_cours(idContenuEnCours) branche = Utils.get_branche_contenu_en_cours(idContenuEnCours)
if auteur == self.auteur_en_cours: if auteur == self.auteur_en_cours or Utils.is_anonyme(idContenu):
chemin = Utils.get_chemin_du_contenu(idContenu) chemin = Utils.get_chemin_du_contenu(idContenu)
Utils.maj_contenu(chemin, idContenu, branche) Utils.maj_contenu(chemin, idContenu, branche)
else: else:
...@@ -644,7 +648,7 @@ class Menu: ...@@ -644,7 +648,7 @@ class Menu:
if pub["etat"] == "accepté": if pub["etat"] == "accepté":
print("Votre publication a été acceptée. Le contenu tiers correspondant a été mis à jours") print("Votre publication a été acceptée. Le contenu tiers correspondant a été mis à jours")
Utils.supprimer_publication(pub["id"]) Utils.supprimer_publication(pub["id"])
#Utils.supprimer_contenu_en_cours(Utils.get_id_contenu_en_cours_associe_a_une_publication(pub['id'])) # Utils.supprimer_contenu_en_cours(Utils.get_id_contenu_en_cours_associe_a_une_publication(pub['id']))
if pub["etat"] == "refus": if pub["etat"] == "refus":
print("Actions possibles : ") print("Actions possibles : ")
print("n : creer un nouveau contenu a partir de celui ci") print("n : creer un nouveau contenu a partir de celui ci")
...@@ -652,10 +656,10 @@ class Menu: ...@@ -652,10 +656,10 @@ class Menu:
print("c : (non disponible) conserver le contenu en l'état") print("c : (non disponible) conserver le contenu en l'état")
print("q : remettre ce choix à plus tard") print("q : remettre ce choix à plus tard")
choix = input() choix = input()
print ("Le choix que je fais : ", choix) print("Le choix que je fais : ", choix)
if choix == 'n': if choix == 'n':
id_en_cours = Utils.get_id_contenu_en_cours_associe_a_une_publication(id_pub) id_en_cours = Utils.get_id_contenu_en_cours_associe_a_une_publication(id_pub)
print ("L'id du contenu en cours est : ", id_en_cours) print("L'id du contenu en cours est : ", id_en_cours)
contenu_associe = Utils.get_id_contenu_associe_a_un_en_cours(id_en_cours) contenu_associe = Utils.get_id_contenu_associe_a_un_en_cours(id_en_cours)
chemin = Utils.get_chemin_du_contenu(contenu_associe) chemin = Utils.get_chemin_du_contenu(contenu_associe)
...@@ -682,6 +686,46 @@ class Menu: ...@@ -682,6 +686,46 @@ class Menu:
input() input()
self.menu_des_actions() self.menu_des_actions()
## listing de toutes les mises a jour possibles pour les tiers d'un auteur
# @param auteur l'auteur en cours
def liste_maj_tiers(self, auteur):
# on cherche toutes les versions en cours dans les tiers et on compare avec celles de la banque
# Trouver un moyen de sauvegarder le fait qu'une maj ait été refusée.
tiers = Utils.get_contenus_tiers(auteur)
for (id, version) in tiers:
versionCourante = Utils.get_version_courante(id["contenu"])
if version["version"] < versionCourante:
if not Utils.is_maj_refusee(auteur, id["contenu"], versionCourante):
print("Contenu : ", id["contenu"], " version actuelle : ", version["version"], "version maj : ",
versionCourante)
print("Mise à jour possible")
print(
"Appuyer sur c pour consulter le détail de la mise à jour du contenu")
choix = input()
if choix == 'c':
Utils.changer_version(id["contenu"], 0, "master")
Utils.changer_version(id["contenu"], Utils.get_version_courante(id["contenu"]))
print("Détail de la maj disponible pour le contenu : ")
Utils.consulter_un_contenu(id["contenu"], self.auteur_en_cours)
print(
"Appuyer sur o pour accepter cette maj, sur n pour la refuser ou sur q pour revenir au menu des actions : ")
if choix == 'o':
Utils.maj_tiers(id["contenu"], versionCourante, auteur)
print("Mise à jour effectuée")
print("appuyez sur q pour revenir au menu des actions")
input()
self.menu_des_actions()
elif choix == 'n':
Utils.maj_tiers(id["contenu"], versionCourante, auteur, True)
print("Mise à jour refusée")
print("appuyez sur q pour revenir au menu des actions")
input()
self.menu_des_actions()
else:
self.menu_des_actions()
''' '''
## Importer un fichier ## Importer un fichier
......
...@@ -74,7 +74,7 @@ class Utils: ...@@ -74,7 +74,7 @@ class Utils:
if max_id is None: if max_id is None:
max_id = 0 max_id = 0
print("nomFichier : ", Utils.chemin + "dossier" + nomFichier + "/") #print("nomFichier : ", Utils.chemin + "dossier" + nomFichier + "/")
cheminFichier = Utils.chemin + "dossier" + nomFichier + "/" cheminFichier = Utils.chemin + "dossier" + nomFichier + "/"
...@@ -83,7 +83,7 @@ class Utils: ...@@ -83,7 +83,7 @@ class Utils:
os.system("cp '" + Utils.chemin + nomFichier + "' '" + cheminFichier + nomFichier + "'") os.system("cp '" + Utils.chemin + nomFichier + "' '" + cheminFichier + nomFichier + "'")
commit = UtilsGit.commit(cheminFichier, nomFichier, "Version 1") commit = UtilsGit.commit(cheminFichier, nomFichier, "Version 1")
print("commit : ", commit) #print("commit : ", commit)
Utils.statdb.contenu.insert_one( Utils.statdb.contenu.insert_one(
{"id": max_id + 1, "auteur": auteur, "note": randrange(0, 10, 1), {"id": max_id + 1, "auteur": auteur, "note": randrange(0, 10, 1),
...@@ -106,8 +106,14 @@ class Utils: ...@@ -106,8 +106,14 @@ class Utils:
if panier: if panier:
return Utils.statdb.contenu.find({"auteur": auteur}) return Utils.statdb.contenu.find({"auteur": auteur})
else: else:
tiers_auteur = Utils.get_contenus_tiers(auteur) contenus_tiers = Utils.get_contenus_tiers(auteur)
return Utils.statdb.contenu.find({"auteur": {"$ne": auteur}} and {"id": {"$nin": tiers_auteur}}) tiers_auteur = list()
for tier in contenus_tiers:
tiers_auteur.append(tier[0]["contenu"])
#return Utils.statdb.contenu.find({"auteur": {"$ne": auteur}} or {"id": {"$nin": tiers_auteur}})
#return Utils.statdb.contenu.find({"auteur": {"$ne": auteur}})
# print ("tiers de l'auteur : ", tiers_auteur)
return Utils.statdb.contenu.find({"$and" : [{"auteur": {"$ne": auteur}}, {"id": {"$nin": tiers_auteur}}]})
## Consultation de tous les contenus, sans distinction ## Consultation de tous les contenus, sans distinction
# (utile temporairement pour la création d'évaluations) # (utile temporairement pour la création d'évaluations)
...@@ -154,7 +160,7 @@ class Utils: ...@@ -154,7 +160,7 @@ class Utils:
# @param idContenu l'identifiant du contenu # @param idContenu l'identifiant du contenu
@staticmethod @staticmethod
def is_anonyme(idContenu): def is_anonyme(idContenu):
print("Is anonyme : ", Utils.statdb.contenu.find_one({"id": idContenu})["auteur"]) #print("Is anonyme : ", Utils.statdb.contenu.find_one({"id": idContenu})["auteur"])
return Utils.statdb.contenu.find_one({"id": idContenu})["auteur"] == "Aucun" return Utils.statdb.contenu.find_one({"id": idContenu})["auteur"] == "Aucun"
## Récupérer un contenu à partir de son identifiant et sa version ## Récupérer un contenu à partir de son identifiant et sa version
...@@ -229,7 +235,7 @@ class Utils: ...@@ -229,7 +235,7 @@ class Utils:
element = Utils.statdb.encours.find().sort("idContenuEC", -1).limit(1) element = Utils.statdb.encours.find().sort("idContenuEC", -1).limit(1)
for elt in element: for elt in element:
print("id : ", elt) #print("id : ", elt)
return int(elt["idContenuEC"]) return int(elt["idContenuEC"])
## Récupérer l'id maximal (pour les demandes de publication) ## Récupérer l'id maximal (pour les demandes de publication)
...@@ -241,7 +247,7 @@ class Utils: ...@@ -241,7 +247,7 @@ class Utils:
element = Utils.statdb.demandesPub.find().sort("id", -1).limit(1) element = Utils.statdb.demandesPub.find().sort("id", -1).limit(1)
for elt in element: for elt in element:
print("id : ", elt) #print("id : ", elt)
return int(elt["id"]) return int(elt["id"])
## Récupérer les tiers d'un utilisateur ## Récupérer les tiers d'un utilisateur
...@@ -336,7 +342,7 @@ class Utils: ...@@ -336,7 +342,7 @@ class Utils:
@staticmethod @staticmethod
def modification_fichier(chemin, idContenu, auteur, modifPremiere=True): def modification_fichier(chemin, idContenu, auteur, modifPremiere=True):
print("Le chemin du fichier est : ", chemin) #print("Le chemin du fichier est : ", chemin)
# on récupère la fin du fichier (la version) # on récupère la fin du fichier (la version)
fin = Utils.affichage(chemin) fin = Utils.affichage(chemin)
...@@ -348,14 +354,14 @@ class Utils: ...@@ -348,14 +354,14 @@ class Utils:
repertoire = chemin[:chemin.rfind("/") + 1] repertoire = chemin[:chemin.rfind("/") + 1]
nomFichier = chemin[chemin.rfind("/") + 1:] nomFichier = chemin[chemin.rfind("/") + 1:]
print("nomFichier :", nomFichier) #print("nomFichier :", nomFichier)
print("chemin :", chemin) #print("chemin :", chemin)
# exit(0) # exit(0)
if modifPremiere: if modifPremiere:
# on créée une nouvelle branche et on va dedans # on créée une nouvelle branche et on va dedans
nomBranche = "version" + str(version + 1) nomBranche = "version" + str(version + 1)
print("Je veux la branche", nomBranche) #print("Je veux la branche", nomBranche)
UtilsGit.embranchement(repertoire, nomBranche) UtilsGit.embranchement(repertoire, nomBranche)
UtilsGit.changerVersionBranche(repertoire, nomBranche) UtilsGit.changerVersionBranche(repertoire, nomBranche)
# si on est pas en "modifPremiere" on est déja dans la bonne branche. # si on est pas en "modifPremiere" on est déja dans la bonne branche.
...@@ -444,7 +450,7 @@ class Utils: ...@@ -444,7 +450,7 @@ class Utils:
@staticmethod @staticmethod
def get_id_contenu_associe_a_un_en_cours(idContenuEnCours): def get_id_contenu_associe_a_un_en_cours(idContenuEnCours):
print("L'id en cours que j'ai est", idContenuEnCours, " - ", type(idContenuEnCours)) #print("L'id en cours que j'ai est", idContenuEnCours, " - ", type(idContenuEnCours))
return Utils.statdb.encours.find_one({"idContenuEC": int(idContenuEnCours)})["reference"] return Utils.statdb.encours.find_one({"idContenuEC": int(idContenuEnCours)})["reference"]
@staticmethod @staticmethod
...@@ -454,7 +460,7 @@ class Utils: ...@@ -454,7 +460,7 @@ class Utils:
@staticmethod @staticmethod
def get_id_contenu_en_cours_associe_a_une_publication(idDdePublication): def get_id_contenu_en_cours_associe_a_une_publication(idDdePublication):
print("L'id en cours que j'ai est", idDdePublication, " - ", type(idDdePublication)) #print("L'id en cours que j'ai est", idDdePublication, " - ", type(idDdePublication))
return Utils.statdb.demandesPub.find_one({"id": int(idDdePublication)})["idContenuEnCours"] return Utils.statdb.demandesPub.find_one({"id": int(idDdePublication)})["idContenuEnCours"]
## récupérer le chemin d'un fichier associé à un contenu ## récupérer le chemin d'un fichier associé à un contenu
...@@ -521,7 +527,7 @@ class Utils: ...@@ -521,7 +527,7 @@ class Utils:
## creer un contenu à partir d'un contenu en cours ## creer un contenu à partir d'un contenu en cours
@staticmethod @staticmethod
def creer_nouveau_contenu(chemin, auteurEnCours, idContenuEnCours): def creer_nouveau_contenu(chemin, auteurEnCours, idContenuEnCours):
print("chemin : ", chemin) #print("chemin : ", chemin)
# hard codé pour l'exemple, sera adaptatif dans le futur # hard codé pour l'exemple, sera adaptatif dans le futur
max_id = 3 max_id = 3
...@@ -530,9 +536,9 @@ class Utils: ...@@ -530,9 +536,9 @@ class Utils:
cheminFichier = Utils.chemin + dossierFichier cheminFichier = Utils.chemin + dossierFichier
nomFichier = chemin[chemin.rfind("/") + 1:] nomFichier = chemin[chemin.rfind("/") + 1:]
print("Chemin fichier : ", cheminFichier) #print("Chemin fichier : ", cheminFichier)
print("Dossier Fichier : ", dossierFichier) #print("Dossier Fichier : ", dossierFichier)
print("NomFichier :", nomFichier) #print("NomFichier :", nomFichier)
Path(cheminFichier).mkdir(parents=True, exist_ok=True) Path(cheminFichier).mkdir(parents=True, exist_ok=True)
os.system("cp " + chemin + " " + cheminFichier) os.system("cp " + chemin + " " + cheminFichier)
os.system("mv " + cheminFichier + nomFichier + " " + cheminFichier + "Contenu" + str(max_id)) os.system("mv " + cheminFichier + nomFichier + " " + cheminFichier + "Contenu" + str(max_id))
...@@ -591,6 +597,8 @@ class Utils: ...@@ -591,6 +597,8 @@ class Utils:
def get_commit_pour_une_version(idContenu, version): def get_commit_pour_une_version(idContenu, version):
print("Je veux récupérer le commit associé à la version ", version, "pour le contenu ", idContenu) print("Je veux récupérer le commit associé à la version ", version, "pour le contenu ", idContenu)
if version == Utils.get_version_courante(idContenu): if version == Utils.get_version_courante(idContenu):
courante = Utils.statdb.contenu.find_one({"id": idContenu})["versionEnCours"] courante = Utils.statdb.contenu.find_one({"id": idContenu})["versionEnCours"]
return courante["commit"] return courante["commit"]
...@@ -622,29 +630,6 @@ class Utils: ...@@ -622,29 +630,6 @@ class Utils:
Utils.statdb.demandesPub.update_one({"id": int(idPublication)}, {"$set": {"etat": "refus"}}) Utils.statdb.demandesPub.update_one({"id": int(idPublication)}, {"$set": {"etat": "refus"}})
# Utils.statdb.demandesPub.update_one({"id": 1}, {"$set": {"etat": "refus"}}) # Utils.statdb.demandesPub.update_one({"id": 1}, {"$set": {"etat": "refus"}})
## listing de toutes les mises a jour possibles pour les tiers d'un auteur
# @param auteur l'auteur en cours
@staticmethod
def liste_maj_tiers(auteur):
# on cherche toutes les versions en cours dans les tiers et on compare avec celles de la banque
# Trouver un moyen de sauvegarder le fait qu'une maj ait été refusée.
tiers = Utils.get_contenus_tiers(auteur)
for (id, version) in tiers:
versionCourante = Utils.get_version_courante(id["contenu"])
if version["version"] < versionCourante:
if not Utils.is_maj_refusee(auteur, id["contenu"], versionCourante):
print("Contenu : ", id["contenu"], " version actuelle : ", version["version"], "version maj : ",
versionCourante)
print("Mise à jour possible")
print("Voulez vous la faire (O / N)")
choix = input()
if choix == 'O':
Utils.maj_tiers(id["contenu"], versionCourante, auteur)
print("Mise à jour effectuée")
else:
Utils.maj_tiers(id["contenu"], versionCourante, auteur, True)
print("Mise à jour refusée")
## mettre à jour un favori ## mettre à jour un favori
# @param idContenu l'id du favori # @param idContenu l'id du favori
# @param versionContenu la version du favori # @param versionContenu la version du favori
...@@ -674,11 +659,10 @@ class Utils: ...@@ -674,11 +659,10 @@ class Utils:
# @param versionMaj la version de la mise à jour potentielle # @param versionMaj la version de la mise à jour potentielle
@staticmethod @staticmethod
def is_maj_refusee(auteur, idContenu, versionMaj): def is_maj_refusee(auteur, idContenu, versionMaj):
print("print")
compteur = Utils.statdb.utilisateur.find({"nom": auteur} and compteur = Utils.statdb.utilisateur.find({"nom": auteur} and
{"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu, {"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu,
"version": versionMaj}}}}).count() != 0 "version": versionMaj}}}}).count() != 0
print("Compteur : ", compteur) #print("Compteur : ", compteur)
return compteur return compteur
## Fonction globale de gestion de la recherche sur contenu ## Fonction globale de gestion de la recherche sur contenu
...@@ -771,3 +755,9 @@ class Utils: ...@@ -771,3 +755,9 @@ class Utils:
@staticmethod @staticmethod
def get_auteur_demande_publication(idPub): def get_auteur_demande_publication(idPub):
return Utils.statdb.demandesPub.find_one({"id": idPub})["auteurDemande"] return Utils.statdb.demandesPub.find_one({"id": idPub})["auteurDemande"]
## Fonction qui permet de savoir si un contenu en cours à fait l'objet d'une demande de publication
# @param idEnCours l'id du contenu en cours
@staticmethod
def is_en_cours_demande(idEnCours, auteur):
return Utils.statdb.demandesPub.find({"id": idEnCours} and {"auteurDemande": auteur}).count() != 0
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