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
# 6 -> Consulter les évaluations crééees \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
# 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
# 11 -> Demandes de publication recues et émises
# 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()
from datetime import datetime
'''
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})
'''
#Utils.initialiseMongo()
#Utils.getContenuFichiers()
......@@ -15,6 +15,8 @@ class Menu:
def __init__(self):
# obligatoire à faire au début
Utils.initialiseMongo()
# si les auteurs n'existent pas on les créée
Utils.creerAuteurSiBesoin()
self.menuDeBase()
## 1er menu affiché et proposé à l'utilisateur
......@@ -89,9 +91,7 @@ class Menu:
elif argument == 8:
self.naviguerContenu()
elif argument == 9:
os.system('clear')
print("Bonjour ", self.auteurEnCours)
print("Fonctionnalité à venir")
self.rechercherContenu()
elif argument == 10:
self.consulterEnCours()
elif argument == 11:
......@@ -606,3 +606,50 @@ class Menu:
print("Vous n'avez aucun favori, appuyez sur q pour revenir en arriere")
input()
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 nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from pymongo import MongoClient
from random import randrange
import os
from UtilsGit import UtilsGit
from pathlib import Path
import re
import string
## Classe utils.
......@@ -76,7 +80,7 @@ class Utils:
# Un contenu doit être dans un répertoire isolé pour pouvoir le manipuler en versionnage
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")
print("commit : ", commit)
......@@ -86,9 +90,9 @@ class Utils:
"fichier": "dossier" + nomFichier + "/" + nomFichier,
"versionEnCours": {"numero": 1, "date": datetime.now().strftime("%d/%m/%y"),
"popularite": 0, "commit": commit},
"tags_fixes": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1",
"5": "tag1"},
"tags": {"1": "tag1", "2": "tag1", "3": "tag1", "4": "tag1", "5": "tag1"}})
"tags_banque_fixes": ["tag1", "tag2", "tag3", "tag4", "tag5"],
"tags_banque_libres": ["tagl1", "tagl2", "tagl3", "tagl4", "tagl5"]})
print("Le contenu a bien été ajouté pour l'utilisateur ", auteur)
## Consultation de tous les contenus publics :
......@@ -412,7 +416,7 @@ class Utils:
@staticmethod
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"]
@staticmethod
......@@ -432,7 +436,7 @@ class Utils:
# @param version la version du contenu désirée
# @param nomBranche changement direct de branche -> utile pour naviguer parmi les versions "en cours"
@staticmethod
def changerVersion(idContenu, version, nomBranche = ""):
def changerVersion(idContenu, version, nomBranche=""):
# on recupere le chemin du fichier associé au contenu (dans les 2 cas)
chemin = Utils.getCheminDuContenu(idContenu)
repertoire = chemin[:chemin.rfind("/") + 1]
......@@ -547,12 +551,12 @@ class Utils:
# @param version le numéro de version désiré
@staticmethod
def getCommitPourUneVersion(idContenu, version):
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"]
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"]
for elt in historique:
if elt["numero"] == version:
return elt["commit"]
#return 42
# return 42
## permet de gerer la reponse à la publication
# @param idPublication la publication concernée
......@@ -573,7 +577,7 @@ class Utils:
# 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": 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
# @param auteur l'auteur en cours
......@@ -584,9 +588,10 @@ class Utils:
favoris = Utils.getFavoris(auteur)
for (id, version) in favoris:
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:
#Utils.isMajRefusee(auteur, id["contenu"], versionCourante)
# Utils.isMajRefusee(auteur, id["contenu"], versionCourante)
if not Utils.isMajRefusee(auteur, id["contenu"], versionCourante):
print("Mise à jour possible")
print("Voulez vous la faire (O / N)")
......@@ -627,8 +632,87 @@ class Utils:
@staticmethod
def isMajRefusee(auteur, idContenu, versionMaj):
print("print")
compteur = Utils.statdb.utilisateur.find({"nom" : auteur} and
{"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu, "version": versionMaj}}}}).count() != 0
print ("Compteur : ", compteur)
exit(0)
compteur = Utils.statdb.utilisateur.find({"nom": auteur} and
{"majRejetees": {"$elemMatch": {"$elemMatch": {"contenu": idContenu,
"version": versionMaj}}}}).count() != 0
print("Compteur : ", 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