Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
OpenQuizz
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
10
Issues
10
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Weber Rodolphe
OpenQuizz
Commits
4190ba71
Commit
4190ba71
authored
May 03, 2021
by
Jérémie Passerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ajout d'une fonction de détection des utilisateurs & maj du 'README'
parent
d14ad378
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
163 additions
and
35 deletions
+163
-35
Main.py
Main.py
+13
-16
Menu.py
Menu.py
+50
-3
Utils.py
Utils.py
+100
-16
No files found.
Main.py
View file @
4190ba71
...
...
@@ -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()
Menu.py
View file @
4190ba71
...
...
@@ -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
)
Utils.py
View file @
4190ba71
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"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment