Commit 4190ba71 authored by Jérémie Passerat's avatar Jérémie Passerat

Ajout d'une fonction de détection des utilisateurs & maj du 'README'

parent d14ad378
...@@ -33,27 +33,24 @@ from Utils import Utils ...@@ -33,27 +33,24 @@ from Utils import Utils
# 6 -> Consulter les évaluations crééees \n # 6 -> Consulter les évaluations crééees \n
# 7 -> Permet de modifier un des fichiers importé OU un des favoris \n # 7 -> Permet de modifier un des fichiers importé OU un des favoris \n
# 8 -> Permet de sélectionner un contenu et une version particulière. Sera intégré, à terme, dans le panier # 8 -> Permet de sélectionner un contenu et une version particulière. Sera intégré, à terme, dans le panier
# 9 -> Recherche par auteur, date, tag (imposés / libres), contenu / titre, note \n # 9 -> Recherche par auteur, date, tag (imposés / libres), contenu / titre, note DANS LA BANQUE OU DANS LE PANIER \n
# 10 -> Par la suite, les contenus "en cours" seront disponibles dans le panier\n # 10 -> Par la suite, les contenus "en cours" seront disponibles dans le panier\n
# 11 -> Demandes de publication recues et émises # 11 -> Demandes de publication recues et émises
# 12 -> Sera intégré, à terme, dans le panier # 12 -> Sera intégré, à terme, dans le panier
# @section Les plugins et outils utilisés sont :
# Doxygen 1.8.17 (& l'outil DoxyWizard, plus facile à manipuler)
# Python 3.8.5
# Mongodb 4.4.5
# plugins python (pip3 20.0.2) : gitpython 3.1.14, pymongo 3.11.3
# # @section Installation :
# Cloner le projet sur le disque
# Installer les outils mentionnés ci dessus
# 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)
# Lancer Main.py, soit directement à la main, soit via un IDE configuré pour ça (environnement virtual utilisable)
Menu() Menu()
from datetime import datetime #Utils.initialiseMongo()
''' #Utils.getContenuFichiers()
Utils.initialiseMongo()
Utils.toutPeter()
Utils.statdb.demandesPub.insert_one(
{"id": 1, "date": datetime.now().strftime("%d/%m/%y"), "auteurDemande": "Auteur 1",
"auteurContenu": "Auteur 2",
"idContenu": 1, "idContenuEnCours": 1, "etat": "enCours"})
# Utils.statdb.demandesPub.update_one({"id": 1}, {"$set": {"etat": "refus"}})
print(Utils.statdb.demandesPub.find_one({"id": 1}))
#Utils.statdb.demandesPub.update_one({"id": 1}, {"$set": {"etat": "refus"}})
Utils.statdb.demandesPub.delete_one({"id": 1})
'''
...@@ -15,6 +15,8 @@ class Menu: ...@@ -15,6 +15,8 @@ class Menu:
def __init__(self): def __init__(self):
# obligatoire à faire au début # obligatoire à faire au début
Utils.initialiseMongo() Utils.initialiseMongo()
# si les auteurs n'existent pas on les créée
Utils.creerAuteurSiBesoin()
self.menuDeBase() self.menuDeBase()
## 1er menu affiché et proposé à l'utilisateur ## 1er menu affiché et proposé à l'utilisateur
...@@ -89,9 +91,7 @@ class Menu: ...@@ -89,9 +91,7 @@ class Menu:
elif argument == 8: elif argument == 8:
self.naviguerContenu() self.naviguerContenu()
elif argument == 9: elif argument == 9:
os.system('clear') self.rechercherContenu()
print("Bonjour ", self.auteurEnCours)
print("Fonctionnalité à venir")
elif argument == 10: elif argument == 10:
self.consulterEnCours() self.consulterEnCours()
elif argument == 11: elif argument == 11:
...@@ -606,3 +606,50 @@ class Menu: ...@@ -606,3 +606,50 @@ class Menu:
print("Vous n'avez aucun favori, appuyez sur q pour revenir en arriere") print("Vous n'avez aucun favori, appuyez sur q pour revenir en arriere")
input() input()
self.menuDesActions() self.menuDesActions()
## rechercher un contenu dans la banque
def rechercherContenu(self):
os.system('clear')
print("Bonjour ", self.auteurEnCours)
print("Bienvenue dans la fonction de recherche")
print("Pour le moment, la recherche ne marche que pour la banque")
print("Dans la future application, une recherche 'panier' sera implémentée")
print("Choisir parmi les modes de recherche disponibles : (ou q pour quitter) ")
print("1. Recherche par auteur")
print("2. Recherche par date")
print("3. Recherche par note")
print("4. Recherche par tag")
print("5. Recherche sur le contenu")
choix = input()
if choix == 'q':
self.menuDesActions()
elif choix.isdigit():
self.gererRecherche(int(choix))
## gérer la recherche en fonction du type choisi
def gererRecherche(self, choix):
if choix == 1:
print("Vous avez choisi une recherche par auteur")
print ("Entrez le nom de l'auteur : ")
choix = input()
Utils.rechercheSurContenu(1, choix)
elif choix == 2:
print("Vous avez choisi une recherche par date")
print ("Entrez la date (format JJ/MM/YY) : ")
choix = input()
Utils.rechercheSurContenu(2, choix)
elif choix == 3:
print("Vous avez choisi une recherche par note")
print ("Entrez la note : ")
choix = input()
Utils.rechercheSurContenu(3, choix)
elif choix == 4:
print("Vous avez choisi une recherche par tag")
print ("Entrer un tag : ")
choix = input()
Utils.rechercheSurContenu(4, choix)
elif choix == 5:
print("Vous avez choisi une recherche sur le contenu")
print ("Entrer un mot : ")
choix = input()
Utils.rechercheSurContenu(5, choix)
from datetime import datetime from datetime import datetime
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from pymongo import MongoClient from pymongo import MongoClient
from random import randrange from random import randrange
import os import os
from UtilsGit import UtilsGit from UtilsGit import UtilsGit
from pathlib import Path from pathlib import Path
import re
import string
## Classe utils. ## Classe utils.
...@@ -76,7 +80,7 @@ class Utils: ...@@ -76,7 +80,7 @@ class Utils:
# Un contenu doit être dans un répertoire isolé pour pouvoir le manipuler en versionnage # Un contenu doit être dans un répertoire isolé pour pouvoir le manipuler en versionnage
Path(cheminFichier).mkdir(parents=True, exist_ok=True) Path(cheminFichier).mkdir(parents=True, exist_ok=True)
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)
...@@ -86,9 +90,9 @@ class Utils: ...@@ -86,9 +90,9 @@ class Utils:
"fichier": "dossier" + nomFichier + "/" + nomFichier, "fichier": "dossier" + nomFichier + "/" + nomFichier,
"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": commit},
"tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "tags_banque_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"],
"5": "tag1"}, "tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"]})
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteur) print("Le contenu a bien été ajouté pour l'utilisateur ", auteur)
## Consultation de tous les contenus publics : ## Consultation de tous les contenus publics :
...@@ -412,7 +416,7 @@ class Utils: ...@@ -412,7 +416,7 @@ class Utils:
@staticmethod @staticmethod
def getIdContenuAssocieAUnePublication(idDdePublication): def getIdContenuAssocieAUnePublication(idDdePublication):
#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.demandesPub.find_one({"id": int(idDdePublication)})["idContenu"] return Utils.statdb.demandesPub.find_one({"id": int(idDdePublication)})["idContenu"]
@staticmethod @staticmethod
...@@ -432,7 +436,7 @@ class Utils: ...@@ -432,7 +436,7 @@ class Utils:
# @param version la version du contenu désirée # @param version la version du contenu désirée
# @param nomBranche changement direct de branche -> utile pour naviguer parmi les versions "en cours" # @param nomBranche changement direct de branche -> utile pour naviguer parmi les versions "en cours"
@staticmethod @staticmethod
def changerVersion(idContenu, version, nomBranche = ""): def changerVersion(idContenu, version, nomBranche=""):
# on recupere le chemin du fichier associé au contenu (dans les 2 cas) # on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = Utils.getCheminDuContenu(idContenu) chemin = Utils.getCheminDuContenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1] repertoire = chemin[:chemin.rfind("/") + 1]
...@@ -547,12 +551,12 @@ class Utils: ...@@ -547,12 +551,12 @@ class Utils:
# @param version le numéro de version désiré # @param version le numéro de version désiré
@staticmethod @staticmethod
def getCommitPourUneVersion(idContenu, version): def getCommitPourUneVersion(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)
historique = Utils.statdb.contenu.find_one({"id" : idContenu})["historique"] historique = Utils.statdb.contenu.find_one({"id": idContenu})["historique"]
for elt in historique: for elt in historique:
if elt["numero"] == version: if elt["numero"] == version:
return elt["commit"] return elt["commit"]
#return 42 # return 42
## permet de gerer la reponse à la publication ## permet de gerer la reponse à la publication
# @param idPublication la publication concernée # @param idPublication la publication concernée
...@@ -573,7 +577,7 @@ class Utils: ...@@ -573,7 +577,7 @@ class Utils:
# on change la valeur "acceptation" de la demande de publication # on change la valeur "acceptation" de la demande de publication
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 favoris d'un auteur ## listing de toutes les mises a jour possibles pour les favoris d'un auteur
# @param auteur l'auteur en cours # @param auteur l'auteur en cours
...@@ -584,9 +588,10 @@ class Utils: ...@@ -584,9 +588,10 @@ class Utils:
favoris = Utils.getFavoris(auteur) favoris = Utils.getFavoris(auteur)
for (id, version) in favoris: for (id, version) in favoris:
versionCourante = Utils.getVersionCourante(id["contenu"]) versionCourante = Utils.getVersionCourante(id["contenu"])
print("contenu : ", id["contenu"], " - version : ", version["version"], " - versionCourante : ", versionCourante) print("contenu : ", id["contenu"], " - version : ", version["version"], " - versionCourante : ",
versionCourante)
if version["version"] < versionCourante: if version["version"] < versionCourante:
#Utils.isMajRefusee(auteur, id["contenu"], versionCourante) # Utils.isMajRefusee(auteur, id["contenu"], versionCourante)
if not Utils.isMajRefusee(auteur, id["contenu"], versionCourante): if not Utils.isMajRefusee(auteur, id["contenu"], versionCourante):
print("Mise à jour possible") print("Mise à jour possible")
print("Voulez vous la faire (O / N)") print("Voulez vous la faire (O / N)")
...@@ -627,8 +632,87 @@ class Utils: ...@@ -627,8 +632,87 @@ class Utils:
@staticmethod @staticmethod
def isMajRefusee(auteur, idContenu, versionMaj): def isMajRefusee(auteur, idContenu, versionMaj):
print("print") print("print")
compteur = Utils.statdb.utilisateur.find({"nom" : auteur} and compteur = Utils.statdb.utilisateur.find({"nom": auteur} and
{"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu, "version": versionMaj}}}}).count() != 0 {"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu,
print ("Compteur : ", compteur) "version": versionMaj}}}}).count() != 0
exit(0) print("Compteur : ", compteur)
return compteur return compteur
## Fonction globale de gestion de la recherche sur contenu
# Très basique pour le moment elle permettra des recherches plus complexes prochainement
@staticmethod
def rechercheSurContenu(action, texteRecherche):
if action == 1:
print("Recherche pour l'auteur ", texteRecherche)
if Utils.presenceUtilisateur(texteRecherche):
print("J'ai", Utils.statdb.contenu.find({"auteur": texteRecherche}).count(),
"contenu(s) pour cet auteur")
else:
print("Utilisateur inconnu")
elif action == 2:
print("Recherche pour la date ", texteRecherche)
print("J'ai", Utils.statdb.contenu.find({"versionEnCours.date": texteRecherche}).count(),
"contenu(s) pour cette date")
elif action == 3:
print("Recherche pour la note ", texteRecherche)
print("J'ai", Utils.statdb.contenu.find({"note": int(texteRecherche)}).count(),
"contenu(s) pour cette note")
elif action == 4:
print("Recherche pour le tag ", texteRecherche)
print("J'ai", Utils.statdb.contenu.find({"tags_banque_fixes": texteRecherche}).count(),
"contenu(s) pour ce tag (fixe)")
print("J'ai", Utils.statdb.contenu.find({"tags_banque_libres": texteRecherche}).count(),
"contenu(s) pour ce tag (libre)")
elif action == 5:
print("Recherche pour le contenu ", texteRecherche)
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
## Fonction test permettant de récupérer le contenu des fichiers
@staticmethod
def getContenuFichiers():
fichier1 = "Contenu1"
fichier2 = "Contenu2"
chemin1 = Utils.chemin + fichier1
chemin2 = Utils.chemin + fichier2
with open(chemin1, "r") as fichier:
texte = fichier.read()
contenu1 = fichier1 + " " + texte
with open(chemin2, "r") as fichier:
texte = fichier.read()
contenu2 = fichier2 + " " + texte
french_stopwords = set(stopwords.words('french'))
filtre_stopfr = lambda text: [token for token in texte if token.lower() not in french_stopwords]
print(contenu1.split())
contenu1 = filtre_stopfr(contenu1.split())
print(contenu1)
stringC1 = ' '.join(list(set(contenu1)))
stringC1 = stringC1.translate(str.maketrans('', '', string.punctuation))
stringC1 = stringC1.translate(str.maketrans('', '', string.digits))
contenu1 = stringC1.split()
contenu2 = filtre_stopfr(contenu2)
print(contenu2)
stringC2 = ' '.join(list(set(contenu1)))
stringC1 = stringC1.translate(str.maketrans('', '', string.punctuation))
stringC1 = stringC1.translate(str.maketrans('', '', string.digits))
contenu1 = stringC1.split()
## Fonction permettant de détecter si les auteurs sont créés, et les créer si besoin
# (exclusive squelette)
@staticmethod
def creerAuteurSiBesoin():
nmbreAuteurs = Utils.statdb.utilisateur.find({}).count()
if not nmbreAuteurs:
Utils.ajouterUtilisateur("Auteur 1")
Utils.ajouterUtilisateur("Auteur 2")
Utils.ajouterUtilisateur("Auteur 3")
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