Commit 0d5a319f authored by Jérémie Passerat's avatar Jérémie Passerat

Modifications pour ajout des fonctionnalités git (en cours)

parent b6bf0a50
...@@ -2,3 +2,5 @@ __pycache__/ ...@@ -2,3 +2,5 @@ __pycache__/
venv/ venv/
.idea/ .idea/
dossierContenu*/ dossierContenu*/
en_cours/
60*/
Subproject commit e5e72d0f4b1846df027dd811646f143270b04f56
import distutils import distutils
from distutils import util from distutils import util
from bson import json_util from bson import json_util, ObjectId
from flask import Flask, request from flask import Flask, request
from pymongo import MongoClient from pymongo import MongoClient
from modele.contenuDao import ContenuDao from config.utils import Utils
from modele.contenu_dao import ContenuDao
from modele.demande_pubDao import DemandePubDao from modele.demande_pubDao import DemandePubDao
from modele.encoursDao import EncoursDao from modele.encours_dao import EncoursDao
from modele.evaluationDao import EvaluationDao from modele.evaluation_dao import EvaluationDao
from modele.utilisateurDao import UtilisateurDao from modele.utilisateur_dao import UtilisateurDao
import json import json
...@@ -66,9 +67,8 @@ def ajouter_tiers(): ...@@ -66,9 +67,8 @@ def ajouter_tiers():
@cross_origin() @cross_origin()
def ajouter_contenu(): def ajouter_contenu():
auteur = request.json["auteur"] auteur = request.json["auteur"]
nom_fichier = request.json["nom_fichier"] contenu_a_ecrire = request.json["contenu_a_ecrire"]
commit = request.json["commit"] contenu_dao.ajouter_contenu(auteur, contenu_a_ecrire)
contenu_dao.ajouter_contenu(auteur, nom_fichier, commit)
return "Contenu ajouré" return "Contenu ajouré"
...@@ -130,6 +130,7 @@ def maj_contenu(): ...@@ -130,6 +130,7 @@ def maj_contenu():
else: else:
auteur = request.json["auteur"] auteur = request.json["auteur"]
contenu_dao.maj_contenu(id_contenu["$oid"], auteur) contenu_dao.maj_contenu(id_contenu["$oid"], auteur)
return "Le contenu a été mis à jour"
@app.route("/gererDemandePub", methods=['PATCH']) @app.route("/gererDemandePub", methods=['PATCH'])
...@@ -137,7 +138,7 @@ def maj_contenu(): ...@@ -137,7 +138,7 @@ def maj_contenu():
def gerer_demande_pub(): def gerer_demande_pub():
id_publication = json.loads(request.json["id_publication"]) id_publication = json.loads(request.json["id_publication"])
demande_pub_Dao.gerer_demande_pub(id_publication["$oid"], request.json["reponse"], request.json["auteur"]) demande_pub_Dao.gerer_demande_pub(id_publication["$oid"], request.json["reponse"], request.json["auteur"])
return "Réponse à la publication gérer" return "Réponse à la publication gérée"
@app.route("/allContenus", methods=['GET']) @app.route("/allContenus", methods=['GET'])
...@@ -164,9 +165,58 @@ def liste_maj_tiers(auteur): ...@@ -164,9 +165,58 @@ def liste_maj_tiers(auteur):
return json.dumps(contenu_dao.liste_tiers_maj(auteur), default=json_util.default) return json.dumps(contenu_dao.liste_tiers_maj(auteur), default=json_util.default)
@app.route("/gererMajTiers", methods=['PATCH'])
@cross_origin()
def gerer_maj_tiers():
id_tiers = json.loads(request.json["id_tiers"])
if request.json["reponse"] == 'o':
refuse = False
else:
refuse = True
version = contenu_dao.get_version_tiers_avec_id(id_tiers["$oid"], request.json["auteur"])
contenu_dao.maj_tiers(id_tiers["$oid"], int(version) + 1, request.json["auteur"], refuse)
return "Tiers géré"
@app.route("/getTexteContenu/<id_json>", methods=['GET'])
@cross_origin()
def get_texte_contenu(id_json):
id_contenu = json.loads(id_json)
return Utils().recuperer_contenu_fichier(id_contenu["$oid"])
@app.route("/changerTexte/<id_contenu>", methods=['PATCH'])
@cross_origin()
def changer_texte_contenu(id_contenu):
if len(id_contenu) % 12 == 0:
id_contenu = ObjectId(id_contenu)
else:
tmp = json.loads(id_contenu)
id_contenu = tmp["$oid"]
Utils().changer_texte_fichier(id_contenu, request.json["nouveau_texte"])
return "Texte Maj"
## ********************************************************************************************************************* ## *********************************************************************************************************************
## Gestion des Contenus en Cours ## Gestion des Contenus en Cours
@app.route("/getTexteContenuEnCours/<id_json>", methods=['GET'])
@cross_origin()
def get_texte_contenu_en_cours(id_json):
if len(id_json) % 12 == 0:
id_du_contenu = ObjectId(id_json)
else:
tmp = json.loads(id_json)
id_du_contenu = tmp["$oid"]
return Utils().recuperer_contenu_fichier(id_du_contenu, True)
@app.route("/getEnCours/<id_en_cours>", methods=['GET']) @app.route("/getEnCours/<id_en_cours>", methods=['GET'])
@cross_origin() @cross_origin()
...@@ -207,7 +257,7 @@ def supprimer_en_cours_par_id(id_en_cours): ...@@ -207,7 +257,7 @@ def supprimer_en_cours_par_id(id_en_cours):
def creer_en_cours(): def creer_en_cours():
id_contenu = json.loads(request.json["id_contenu"]) id_contenu = json.loads(request.json["id_contenu"])
en_cours_dao.creer_en_cours(request.json['auteur'], id_contenu["$oid"], request.json['version']) en_cours_dao.creer_en_cours(request.json['auteur'], id_contenu["$oid"], request.json['version'])
return "En Cours créé" return en_cours_dao.recuperer_dernier_id()
@app.route("/newEnCoursRefuse", methods=['POST']) @app.route("/newEnCoursRefuse", methods=['POST'])
......
from flask import Flask
from flask_pymongo import PyMongo
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/squelette"
mongo = PyMongo(app)
## Fonction permettant de changer la version
def changer_version(idContenu, version, nomBranche=""):
# on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = Utils.get_chemin_du_contenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1]
if version != 0:
# on change le repertoire récupéré ci dessus dans la bonne version (si on travaille avec une version)
idCommit = Utils.get_commit_pour_une_version(idContenu, version)
UtilsGit.changerVersionCommit(repertoire, idCommit)
else:
UtilsGit.changerVersionBranche(repertoire, nomBranche)
\ No newline at end of file
from git import Repo
class GitUtils:
## commit d'un fichier (branche principale)
# @param cheminFichier le chemin du fichier
# @param texteCommit le texte associé au commit
# @return le hash du commit
def commit(self, cheminFichier, nomFichier, texteCommit):
repo = Repo.init(cheminFichier)
# # Il faudra faire une extraction du nom du fichier a partir du chemin
repo.index.add([nomFichier])
repo.index.commit(texteCommit)
return repo.head.object.hexsha
## commit d'un fichier (branche principale)
# @param cheminFichier le chemin du fichier
# @param texteCommit le texte associé au commit
# @return le hash du commit
def embranchement(self, cheminFichier, nomBranche):
repo = Repo.init(cheminFichier)
repo.create_head(nomBranche, 'HEAD')
## changer la version actuelle (avec une base commit):
# @param chemin chemin du repertoire git
# @param commit branche contenant le commit de la version à charger
def changerVersionCommit(self, chemin, commit):
repo = Repo.init(chemin)
repo.head.reference = repo.commit(commit)
repo.head.reset(index=True, working_tree=True)
# repo.git.checkout("c785462dfd454045798baedb11d1674837733962")
## changer la version actuelle (avec une base branche):
# @param chemin chemin du repertoire git
# @param nombranche branche contenant la branche avec le contenu désiré
def changerVersionBranche(self, chemin, branche):
repo = Repo.init(chemin)
repo.git.checkout(branche)
repo.head.reset(index=True, working_tree=True)
## valider une nouvelle version courante d'un contenu - Un peu plus compliqué à faire.
# @param chemin chemin du repertoire git
# @param nombranche branche contenant le contenu temporaire à repasser en principal
def mergeVersion(self, chemin, nombranche):
# "objectif : fusionner main et en_cours"
repo = Repo.init(chemin)
master = repo.branches['master']
enCours = repo.branches[nombranche]
# merge des deux branches
base = repo.merge_base(enCours, master)
repo.index.merge_tree(master, base=base)
# on commit le merge
repo.index.commit('Mise à jour de la branche principale',
parent_commits=(enCours.commit, master.commit))
return repo.head.object.hexsha
from flask import Flask
from flask_pymongo import PyMongo
from config.gitUtils import GitUtils
app = Flask(__name__)
app.config["MONGO_URI"] = "mongodb://localhost:27017/squelette"
mongo = PyMongo(app)
class Utils:
## Fonction permettant de changer la version
def changer_version(self, idContenu, version, nomBranche=""):
from modele.contenu_dao import ContenuDao
# on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = ContenuDao().get_chemin_du_contenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1]
if version != 0:
# on change le repertoire récupéré ci dessus dans la bonne version (si on travaille avec une version)
idCommit = ContenuDao().get_commit_pour_une_version(idContenu, version)
GitUtils().changerVersionCommit(repertoire, idCommit)
else:
GitUtils().changerVersionBranche(repertoire, nomBranche)
def recuperer_contenu_fichier(self, id_contenu, en_cours=False):
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()
return texte.strip()
## Fonction qui permet de mettre à jour l'intérieur du texte d'un contenu
def changer_texte_fichier(self, id_contenu, nouveau_texte):
from modele.contenu_dao import ContenuDao
from modele.encours_dao import EncoursDao
chemin_fichier = EncoursDao().get_chemin_contenu_en_cours(id_contenu)
print("chemin_fichier " + chemin_fichier)
myFile = open(chemin_fichier, "w")
# y ajouter le texte du contenu
myFile.write(nouveau_texte)
myFile.close()
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgiv
\ No newline at end of file
gkvihgivle caca le pipi
\ No newline at end of file
...@@ -9,13 +9,14 @@ import os ...@@ -9,13 +9,14 @@ import os
from pathlib import Path from pathlib import Path
import string import string
from modele.demande_pubDao import * from config.gitUtils import GitUtils
from modele.encoursDao import * from modele.encours_dao import EncoursDao
class ContenuDao: class ContenuDao:
client = MongoClient('localhost', 27017) client = MongoClient('localhost', 27017)
chemin = "/home/passerat/Stage/Squelette/" chemin = "/home/passerat/Stage/flaskProject/"
gitUtils = GitUtils()
## extraction d'une base de données. Si elle n'existe pas, elle esst créée ## extraction d'une base de données. Si elle n'existe pas, elle esst créée
base_donnees = client.squelette base_donnees = client.squelette
...@@ -24,15 +25,42 @@ class ContenuDao: ...@@ -24,15 +25,42 @@ class ContenuDao:
# @param l'auteur en cours # @param l'auteur en cours
# @param nom_fichier le nom du fichier associé au contenu # @param nom_fichier le nom du fichier associé au contenu
# @param commit le 'hash' du commit associé (récupéré via git) # @param commit le 'hash' du commit associé (récupéré via git)
def ajouter_contenu(self, auteur, nom_fichier, commit): def ajouter_contenu(self, auteur, contenu_a_ecrire):
# créer la métadonnée dans la base mongo
self.base_donnees.contenu.insert_one( self.base_donnees.contenu.insert_one(
{"auteur": auteur, "note": randrange(0, 10, 1), {"auteur": auteur, "note": randrange(0, 10, 1),
"fichier": "dossier" + nom_fichier + "/" + nom_fichier, "fichier": "",
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"), "versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "commit": commit}, "popularite": 0, "commit": ""},
"tags_banque_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"], "tags_banque_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"],
"tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"], "type": " ", "source": " "}) "tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"], "type": " ", "source": " "})
# créer un fichier (au bon endroit)
# récupérer l'id mongo (pour nommer le répertoire)
never_shall_we_die = self.base_donnees.contenu.find().sort("_id", -1).limit(1)
record = next(never_shall_we_die, None)
nom_contenu = str(record.get("_id"))
chemin_fichier = self.chemin + "/" + nom_contenu + "/"
Path(chemin_fichier).mkdir(parents=True, exist_ok=True)
myFile = open(chemin_fichier + nom_contenu, "w")
# y ajouter le texte du contenu
myFile.write(contenu_a_ecrire)
myFile.close()
# mettre a jour le chemin du contenu
self.base_donnees.contenu.update_one({"_id": record.get("_id")},
{"$set": {"fichier": nom_contenu + "/" + nom_contenu}})
# initialiser le git et récupérer le commit
commit = self.gitUtils.commit(chemin_fichier, nom_contenu, "version" + str(1))
# puis le mettre a jour dans le contenu
self.base_donnees.contenu.update_one({"_id": record.get("_id")}, {"$set": {"commit": commit}})
## recherche d'un contenu par id (pour affichage de son contenu. charge la version courante ## recherche d'un contenu par id (pour affichage de son contenu. charge la version courante
# @param id_contenu l'id du contenu recherché # @param id_contenu l'id du contenu recherché
def get_contenu_par_id(self, id_contenu): def get_contenu_par_id(self, id_contenu):
...@@ -152,8 +180,8 @@ class ContenuDao: ...@@ -152,8 +180,8 @@ class ContenuDao:
# 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
id_contenu = DemandePubDao().get_id_contenu_associe_a_une_publication(id_demande_publication) id_contenu = modele.DemandePubDao().get_id_contenu_associe_a_une_publication(id_demande_publication)
id_contenu_en_cours = DemandePubDao().get_id_contenu_en_cours_associe_a_une_publication(id_demande_publication) id_contenu_en_cours = modele.DemandePubDao().get_id_contenu_en_cours_associe_a_une_publication(id_demande_publication)
chemin = self.get_chemin_du_contenu(id_contenu) chemin = self.get_chemin_du_contenu(id_contenu)
...@@ -172,19 +200,20 @@ class ContenuDao: ...@@ -172,19 +200,20 @@ class ContenuDao:
"5": "tag1"}, "5": "tag1"},
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}}) "tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
DemandePubDao().supprimer_publication(id_demande_publication) modele.DemandePubDao().supprimer_publication(id_demande_publication)
## récupère le chemin d'un contenu ## récupère le chemin d'un contenu
# @param id_contenu l'id du contenu recherché # @param id_contenu l'id du contenu recherché
# @return le chemin désiré # @return le chemin désiré
def get_chemin_du_contenu(self, id_contenu): def get_chemin_du_contenu(self, id_contenu):
if type('id_contenu') == "String":
if type('id_contenu') == str:
id_contenu = ObjectId(id_contenu) id_contenu = ObjectId(id_contenu)
return self.chemin + self.base_donnees.contenu.find_one({"_id": id_contenu})["fichier"] return self.chemin + self.base_donnees.contenu.find_one({"_id": id_contenu})["fichier"]
## récupère la version en cours du contenu ## récupère la version en cours du contenu
def get_version_courante(self, id_contenu): def get_version_courante(self, id_contenu):
if type('id_contenu') == "String": if type('id_contenu') == str:
id_contenu = ObjectId(id_contenu) id_contenu = ObjectId(id_contenu)
return self.base_donnees.contenu.find_one({"_id": id_contenu})["versionEnCours"]["numero"] return self.base_donnees.contenu.find_one({"_id": id_contenu})["versionEnCours"]["numero"]
...@@ -214,7 +243,7 @@ class ContenuDao: ...@@ -214,7 +243,7 @@ class ContenuDao:
# Mise à jour du répertoire git # Mise à jour du répertoire git
# idCommit = UtilsGit.mergeVersion(repertoire, nomBranche) # idCommit = UtilsGit.mergeVersion(repertoire, nomBranche)
if type('id_contenu') == "String": if type('id_contenu') == str:
id_contenu = ObjectId(id_contenu) id_contenu = ObjectId(id_contenu)
# Mise à jour des métadonnées - ok # Mise à jour des métadonnées - ok
...@@ -236,21 +265,12 @@ class ContenuDao: ...@@ -236,21 +265,12 @@ class ContenuDao:
repertoire_auteur = self.chemin + auteur + "/" repertoire_auteur = self.chemin + auteur + "/"
Path(repertoire_auteur).mkdir(parents=True, exist_ok=True) Path(repertoire_auteur).mkdir(parents=True, exist_ok=True)
# Copier le fichier lié au contenu dans ce répertoire # Copier le fichier lié au contenu dans ce répertoire
chemin = Utils.get_chemin_du_contenu(id) chemin = self.get_chemin_du_contenu(id)
nom_fichier = chemin[chemin.rfind("/") + 1:] nom_fichier = chemin[chemin.rfind("/") + 1:]
os.system("cp '" + chemin + "' '" + repertoire_auteur + nom_fichier + "'") os.system("cp '" + chemin + "' '" + repertoire_auteur + nom_fichier + "'")
# self.affichage(chemin) # self.affichage(chemin)
## détruire un fichier temporaire
## modification d'un contenu (version test)
# @param idCOntenu l'id du contenu à modifier
# @param auteur l'auteur soihaitant modifier le contenu
# @param enCours si true, le contenu modifié est déja un en cours. SI false, il ne l'était pas
def modifier_contenu(self, idContenu, auteur, enCours=False):
# le chemin du fichier restera tjrs le même
contenu = self.base_donnees.contenu.find_one({"id": int(idContenu)})
self.base_donnees.modification_fichier(self.chemin + contenu["fichier"], idContenu, auteur, not enCours)
## après fin de consultation, destruction du fichier temporaire généré ## après fin de consultation, destruction du fichier temporaire généré
# @param id l'id du contenu consulté # @param id l'id du contenu consulté
...@@ -277,7 +297,7 @@ class ContenuDao: ...@@ -277,7 +297,7 @@ class ContenuDao:
# @param idContenu le contenu à 'tester' # @param idContenu le contenu à 'tester'
# @return booléen true.false si le contenu est chez l'auteur ou pas # @return booléen true.false si le contenu est chez l'auteur ou pas
def is_tiers_auteur(self, auteur, idContenu): def is_tiers_auteur(self, auteur, idContenu):
return self.get_version_tiers_avec_id(idContenu, auteur) != 0 return self.get_version_tiers_avec_id(ObjectId(idContenu), auteur) != 0
## mettre à jour un contenu 'tiers' ## mettre à jour un contenu 'tiers'
# @param auteur l'auteur concerné # @param auteur l'auteur concerné
...@@ -334,3 +354,13 @@ class ContenuDao: ...@@ -334,3 +354,13 @@ class ContenuDao:
liste += self.get_contenu_avec_id_et_version(id, version) liste += self.get_contenu_avec_id_et_version(id, version)
return liste return liste
def get_commit_pour_une_version(self, idContenu, version):
if version == self.get_version_courante(idContenu):
courante = self.base_donnees.contenu.find_one({"id": idContenu})["versionEnCours"]
return courante["commit"]
else:
historique = self.base_donnees.contenu.find_one({"id": idContenu})["historique"]
for elt in historique:
if elt["numero"] == version:
return elt["commit"]
...@@ -2,8 +2,7 @@ from pymongo import MongoClient ...@@ -2,8 +2,7 @@ from pymongo import MongoClient
from datetime import datetime from datetime import datetime
from bson import ObjectId from bson import ObjectId
from modele.contenuDao import *
from modele.encoursDao import *
class DemandePubDao: class DemandePubDao:
...@@ -23,7 +22,8 @@ class DemandePubDao: ...@@ -23,7 +22,8 @@ class DemandePubDao:
self.base_donnees.demandesPub.insert_one( self.base_donnees.demandesPub.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "auteurDemande": auteur_en_cours, {"date": datetime.now().strftime("%d/%m/%y"), "auteurDemande": auteur_en_cours,
"auteurContenu": auteur, "idContenu": ObjectId(id_contenu), "auteurContenu": auteur, "idContenu": ObjectId(id_contenu),
"idContenuEnCours": ObjectId(id_contenu_en_cours), "version_en_cours": version_en_cours, "etat": "enCours"}) "idContenuEnCours": ObjectId(id_contenu_en_cours), "version_en_cours": version_en_cours,
"etat": "enCours"})
## Fonction permettant de gérer une demande de publication ## Fonction permettant de gérer une demande de publication
# @param idPublication l'id de la demande de publication # @param idPublication l'id de la demande de publication
...@@ -31,7 +31,7 @@ class DemandePubDao: ...@@ -31,7 +31,7 @@ class DemandePubDao:
# @param auteur l'auteur d'origine # @param auteur l'auteur d'origine
def gerer_demande_pub(self, idPublication, reponse, auteurEnCours): def gerer_demande_pub(self, idPublication, reponse, auteurEnCours):
if reponse == 'o': if reponse == 'o':
#branche = self.get_branche_contenu_en_cours(id_en_cours) # branche = self.get_branche_contenu_en_cours(id_en_cours)
# on récupère l'id du contenu d'origine et l'id en cours # on récupère l'id du contenu d'origine et l'id en cours
id_contenu = self.get_id_contenu_associe_a_une_publication(idPublication) id_contenu = self.get_id_contenu_associe_a_une_publication(idPublication)
...@@ -43,12 +43,11 @@ class DemandePubDao: ...@@ -43,12 +43,11 @@ class DemandePubDao:
# on notifie au 'demandeur' que sa demande de publication est acceptée # on notifie au 'demandeur' que sa demande de publication est acceptée
self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "accepté"}}) self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "accepté"}})
version = ContenuDao().get_version_courante(id_contenu) version = modele.ContenuDao().get_version_courante(id_contenu)
# On met à jour le tiers (chez le 'demandeur' de la publication) # On met à jour le tiers (chez le 'demandeur' de la publication)
ContenuDao().maj_tiers(id_contenu, version, auteurEnCours) modele.ContenuDao().maj_tiers(id_contenu, version, auteurEnCours)
EncoursDao().supprimer_contenu_en_cours(id_contenu_en_cours) modele.EncoursDao().supprimer_contenu_en_cours(id_contenu_en_cours)
else: else:
# on change l'état de la demande de publication # on change l'état de la demande de publication
self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "refus"}}) self.base_donnees.demandesPub.update_one({"_id": ObjectId(idPublication)}, {"$set": {"etat": "refus"}})
......
from pathlib import Path
from bson import ObjectId from bson import ObjectId
from pymongo import MongoClient from pymongo import MongoClient
from datetime import datetime from datetime import datetime
from config.gitUtils import GitUtils
from config.utils import Utils
class EncoursDao: class EncoursDao:
client = MongoClient('localhost', 27017) client = MongoClient('localhost', 27017)
chemin = "/home/passerat/Stage/flaskProject/"
gitUtils = GitUtils()
utils = Utils()
## extraction d'une base de données. Si elle n'existe pas, elle esst créée ## extraction d'une base de données. Si elle n'existe pas, elle esst créée
base_donnees = client.squelette base_donnees = client.squelette
...@@ -44,23 +52,49 @@ class EncoursDao: ...@@ -44,23 +52,49 @@ class EncoursDao:
## supprimer un contenu en cours ## supprimer un contenu en cours
# @param idContenu id du contenu de la reference a supprimer # @param idContenu id du contenu de la reference a supprimer
def supprimer_contenu_en_cours(self, idContenuEnCours): def supprimer_contenu_en_cours(self, idContenuEnCours):
self.base_donnees.encours.delete_one({"reference": ObjectId(idContenuEnCours)}) self.base_donnees.encours.delete_one({"reference": ObjectId(idContenuEnCours)})
## supprimer un contenu en cours avec l'id ## supprimer un contenu en cours avec l'id
# @param idContenuEnCours id du contenu a supprimer # @param idContenuEnCours id du contenu a supprimer
def supprimer_contenu_en_cours_via_id(self, idContenuEnCours): def supprimer_contenu_en_cours_via_id(self, idContenuEnCours):
self.base_donnees.encours.delete_one({"_id": ObjectId(idContenuEnCours)}) self.base_donnees.encours.delete_one({"_id": ObjectId(idContenuEnCours)})
## création d'un contenu en cours ## création d'un contenu en cours
# @param version la version du contenu d'origine # @param version la version du contenu d'origine
# @param nomBranche -> plus utile. # @param nomBranche -> plus utile.
def creer_en_cours(self, auteur, idContenu, version): def creer_en_cours(self, auteur, id_contenu, version):
self.base_donnees.encours.insert_one( self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur, {"date": datetime.now().strftime("%d/%m/%y"), "fichier": "", "auteur": auteur,
"reference": ObjectId(idContenu), "version": version}) "reference": ObjectId(id_contenu), "version": version})
id = self.recuperer_dernier_id()
# Deux choix -> création d'une branche dans le répertoire idContenu / idContenu
# chemin = ContenuDao().get_chemin_du_contenu(id_contenu)
#
# self.base_donnees.encours.update_one({"_id": id},
# {"$set": {"branche": id}})
#
# GitUtils().changerVersionBranche(chemin, id)
# Ou création d'un autre répertoire id_en_cours / id_en_cours
chemin_fichier = self.chemin + "en_cours/"
Path(chemin_fichier).mkdir(parents=True, exist_ok=True)
myFile = open(chemin_fichier + id, "w")
# y ajouter le texte du contenu
myFile.write(self.utils.recuperer_contenu_fichier(id_contenu))
myFile.close()
# mettre a jour le chemin du contenu
self.base_donnees.encours.update_one({"_id": ObjectId(id)},
{"$set": {"fichier": "en_cours/" + id}})
# initialiser le git et récupérer le commit
# self.gitUtils.commit(chemin_fichier, id, "version" + str(version))
## création d'un contenu en cours, dans l'état refuse ## création d'un contenu en cours, dans l'état refuse
# @param version la version du contenu d'origine # @param version la version du contenu d'origine
...@@ -69,3 +103,15 @@ class EncoursDao: ...@@ -69,3 +103,15 @@ class EncoursDao:
self.base_donnees.encours.insert_one( self.base_donnees.encours.insert_one(
{"date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur, {"date": datetime.now().strftime("%d/%m/%y"), "auteur": auteur,
"reference": ObjectId(idContenu), "version": version, "etat": "refuse"}) "reference": ObjectId(idContenu), "version": version, "etat": "refuse"})
def recuperer_dernier_id(self):
dernier_id_insere = self.base_donnees.encours.find().sort("_id", -1).limit(1)
record = next(dernier_id_insere, None)
return str(record.get("_id"))
def get_chemin_contenu_en_cours(self, id_contenu):
if type('id_contenu') == str:
id_contenu = ObjectId(id_contenu)
return self.chemin + self.base_donnees.encours.find_one({"_id": id_contenu})["fichier"]
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