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
709a9c4f
Commit
709a9c4f
authored
Jun 29, 2021
by
Jérémie Passerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Suppression d'un import erroné dans Utils
parent
bec2f386
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
79 additions
and
10 deletions
+79
-10
app.py
app.py
+52
-2
utils.py
config/utils.py
+0
-6
classjinja2_1_1compiler_1_1_code_generator.js
...tation/html/classjinja2_1_1compiler_1_1_code_generator.js
+1
-1
contenu_dao.py
modele/contenu_dao.py
+1
-1
test_flask.py
test_flask.py
+25
-0
No files found.
app.py
View file @
709a9c4f
...
...
@@ -3,8 +3,9 @@ import http
from
distutils
import
util
import
flask
import
pytest
from
bson
import
json_util
,
ObjectId
from
flask
import
Flask
,
request
,
jsonify
,
Blueprint
from
flask
import
Flask
,
request
,
jsonify
,
Blueprint
,
make_response
from
pymongo
import
MongoClient
from
config.utils
import
Utils
...
...
@@ -20,6 +21,11 @@ from flask import Flask
from
flask_cors
import
CORS
,
cross_origin
from
flask_restx
import
Api
,
Resource
,
Namespace
,
namespace
from
flask_jwt_extended
import
create_access_token
from
flask_jwt_extended
import
get_jwt_identity
from
flask_jwt_extended
import
jwt_required
from
flask_jwt_extended
import
JWTManager
app
=
Flask
(
__name__
)
cors
=
CORS
(
app
)
app
.
config
[
'CORS_HEADERS'
]
=
'Content-Type'
...
...
@@ -34,6 +40,9 @@ client = MongoClient('localhost', 27017)
base_donnees
=
client
.
squelette
app
.
config
[
"JWT_SECRET_KEY"
]
=
"l'ordinateur-c'est-magique"
# Change this!
jwt
=
JWTManager
(
app
)
## *********************************************************************************************************************
## Entrées spécifique pour swagger
blueprint
=
Blueprint
(
'api'
,
__name__
)
...
...
@@ -66,9 +75,15 @@ class CreerUtilisateur(Resource):
@
users
.
doc
(
description
=
"vérification qu'un utilisateur est enrengistré dans la base"
)
class
VerifierUtilisateur
(
Resource
):
@
users
.
response
(
200
,
"Vérification de l'utilisateur effectuée"
)
@
users
.
response
(
200
,
"Vérification de l'utilisateur ratée"
)
## vérification qu'un utilisateur est enrengistré dans la base
def
get
(
self
):
return
str
(
utilisateur_dao
.
presence_utilisateur
(
request
.
args
.
get
(
"login"
))),
200
if
utilisateur_dao
.
presence_utilisateur
(
request
.
args
.
get
(
"login"
)):
access_token
=
create_access_token
(
identity
=
request
.
args
.
get
(
"login"
))
return
make_response
(
jsonify
(
access_token
=
access_token
),
200
)
else
:
return
"L'utilisateur n'existe pas"
,
404
@
users
.
route
(
'/changePassword'
)
...
...
@@ -77,6 +92,7 @@ class ChangerMdp(Resource):
@
users
.
response
(
200
,
"Mot de Passe changé"
)
@
users
.
response
(
409
,
'Erreur changement mot de passe'
)
## changement du mot de passe d'un utilisateur
@
jwt_required
()
def
patch
(
self
):
pass
...
...
@@ -86,6 +102,7 @@ class ChangerMdp(Resource):
class
RecupererTousLesUtilisateurs
(
Resource
):
@
users
.
response
(
200
,
"Utilisateurs récupérés"
)
## récupération de tous les utilisateurs en base
@
jwt_required
()
def
get
(
self
):
return
json
.
loads
(
json
.
dumps
(
list
(
utilisateur_dao
.
get_all_utilisateurs
()),
default
=
json_util
.
default
)),
200
...
...
@@ -104,6 +121,7 @@ contenus = api.namespace('contenus', description='Entrées liées à la gestion
class
AjouterContenu
(
Resource
):
@
contenus
.
response
(
201
,
"Contenu créé"
)
## ajouter un nouveau contenu
@
jwt_required
()
def
post
(
self
):
auteur
=
request
.
json
[
"auteur"
]
contenu_a_ecrire
=
request
.
json
[
"contenu_a_ecrire"
]
...
...
@@ -120,6 +138,7 @@ class AjouterContenu(Resource):
class
AjouterTiers
(
Resource
):
@
contenus
.
response
(
201
,
"Tiers créé"
)
## ajouter un nouveau contenu tiers pour un auteur
@
jwt_required
()
def
patch
(
self
):
id_tiers
=
json
.
loads
(
request
.
json
[
"id_tiers"
])
contenu_dao
.
creer_tiers
(
request
.
json
[
"auteur"
],
id_tiers
[
"$oid"
],
request
.
json
[
"version"
])
...
...
@@ -132,6 +151,7 @@ class AjouterTiers(Resource):
class
GetContenuParId
(
Resource
):
@
contenus
.
response
(
200
,
"Contenu récupéré"
)
## récupérer un contenu via son id
@
jwt_required
()
def
get
(
self
,
id
):
return
json
.
loads
(
json
.
dumps
(
list
(
contenu_dao
.
get_contenu_par_id
(
int
(
id
))),
default
=
json_util
.
default
)),
200
...
...
@@ -144,6 +164,7 @@ class GetContenuParId(Resource):
class
GetContenuPanier
(
Resource
):
@
contenus
.
response
(
200
,
"Panier récupéré"
)
## récupérer le contenu du panier d'un auteur
@
jwt_required
()
def
get
(
self
,
auteur
):
auteur
=
auteur
.
replace
(
"_"
,
" "
)
return
json
.
loads
(
...
...
@@ -157,6 +178,7 @@ class GetContenuPanier(Resource):
class
GetContenuBanque
(
Resource
):
@
contenus
.
response
(
200
,
"Banque récupérée"
)
## récupérer le contenu de la banque pour un auteur
@
jwt_required
()
def
get
(
self
,
auteur
):
auteur
=
auteur
.
replace
(
"_"
,
" "
)
return
json
.
loads
(
json
.
dumps
(
list
(
contenu_dao
.
get_contenus_non_auteur
(
auteur
)),
...
...
@@ -168,6 +190,7 @@ class GetContenuBanque(Resource):
class
SupprimerPerso
(
Resource
):
@
contenus
.
response
(
200
,
"Contenu supprimé"
)
## supprimer un contenu
@
jwt_required
()
def
delete
(
self
,
id_perso
):
id_perso
=
json
.
loads
(
id_perso
)
contenu_dao
.
supprimer_contenu
(
id_perso
[
"$oid"
])
...
...
@@ -181,6 +204,7 @@ class SupprimerPerso(Resource):
class
supprimer_tiers
(
Resource
):
@
contenus
.
response
(
200
,
"Tiers supprimé"
)
## supprimer un tiers pour un auteur
@
jwt_required
()
def
delete
(
self
):
id_tiers
=
json
.
loads
(
request
.
args
.
get
(
"id_tiers"
))
...
...
@@ -197,6 +221,7 @@ class supprimer_tiers(Resource):
class
creer_nouveau_contenu
(
Resource
):
@
contenus
.
response
(
201
,
"Nouveau contenu créé"
)
## créer un contenu à partir d'une demande de publication refusée
@
jwt_required
()
def
post
(
self
):
id_demande_pub
=
json
.
loads
(
request
.
json
[
"id_demande_pub"
])
contenu_dao
.
creer_nouveau_contenu
(
id_demande_pub
[
"$oid"
],
request
.
json
[
"auteur"
])
...
...
@@ -211,6 +236,7 @@ class creer_nouveau_contenu(Resource):
class
maj_contenu
(
Resource
):
@
contenus
.
response
(
200
,
"Contenu maj"
)
## mettre à jour un contenu (en cours - le changement de version d'un contenu se fait via gerer_demande_pub)"
@
jwt_required
()
def
patch
(
self
):
id_contenu_en_cours
=
json
.
loads
(
request
.
json
[
"id_contenu_en_cours"
])
if
request
.
json
[
"auteur"
]
==
""
:
...
...
@@ -229,6 +255,7 @@ class maj_contenu(Resource):
class
gerer_demande_pub
(
Resource
):
@
contenus
.
response
(
200
,
"Réponse à la publication gérée"
)
## gerer la reponse à une demande de publication
@
jwt_required
()
def
patch
(
self
):
id_publication
=
json
.
loads
(
request
.
json
[
"id_publication"
])
print
(
"Je suis l'id de la publication : "
,
id_publication
[
"$oid"
])
...
...
@@ -241,6 +268,7 @@ class gerer_demande_pub(Resource):
class
get_tous_les_contenus
(
Resource
):
@
contenus
.
response
(
200
,
"Tous les contenus récupérés"
)
## récupérer tous les contenus
@
jwt_required
()
def
get
(
self
):
return
json
.
loads
(
json
.
dumps
(
list
(
contenu_dao
.
get_tous_les_contenus
()),
default
=
json_util
.
default
)),
200
...
...
@@ -251,6 +279,7 @@ class get_tous_les_contenus(Resource):
class
get_tags_contenu
(
Resource
):
@
contenus
.
response
(
200
,
"Tags récupérés"
)
## récupérer les tags d'un contenu
@
jwt_required
()
def
get
(
self
,
id_contenu
):
id_tiers
=
json
.
loads
(
request
.
json
[
"id_tiers"
])
return
json
.
loads
(
json
.
dumps
(
list
(
contenu_dao
.
get_tags_contenu
(
id_tiers
[
"$oid"
])),
...
...
@@ -262,6 +291,7 @@ class get_tags_contenu(Resource):
class
is_contenu_anonyme
(
Resource
):
@
contenus
.
response
(
200
,
"Résultat pour savoir si le contenu est anonyme ou non"
)
## Résultat pour savoir si le contenu est anonyme ou non
@
jwt_required
()
def
get
(
self
,
id_contenu
):
return
str
(
contenu_dao
.
is_anonyme
(
id_contenu
)),
200
...
...
@@ -271,6 +301,7 @@ class is_contenu_anonyme(Resource):
class
is_maj_tiers_disponible
(
Resource
):
@
contenus
.
response
(
200
,
"Résultat pour savoir si des mises à jours tiers sont disponibles"
)
## Résultat pour savoir si des mises à jours tiers sont disponibles
@
jwt_required
()
def
get
(
self
,
auteur
):
return
str
(
contenu_dao
.
is_tiers_maj
(
auteur
)),
200
...
...
@@ -280,6 +311,7 @@ class is_maj_tiers_disponible(Resource):
class
liste_maj_tiers
(
Resource
):
@
contenus
.
response
(
200
,
"Liste des Maj Tiers récupérée"
)
## Liste des Maj Tiers récupérée
@
jwt_required
()
def
get
(
self
,
auteur
):
return
json
.
loads
(
json
.
dumps
(
contenu_dao
.
liste_tiers_maj
(
auteur
),
default
=
json_util
.
default
)),
200
...
...
@@ -293,6 +325,7 @@ class liste_maj_tiers(Resource):
class
gerer_maj_tiers
(
Resource
):
@
contenus
.
response
(
200
,
"Maj du tiers gérée"
)
## gérer la réponse à une maj tiers
@
jwt_required
()
def
patch
(
self
):
id_tiers
=
json
.
loads
(
request
.
json
[
"id_tiers"
])
...
...
@@ -313,6 +346,7 @@ class gerer_maj_tiers(Resource):
class
get_texte_contenu
(
Resource
):
@
contenus
.
response
(
200
,
"Texte du contenu changé pour la version en cours"
)
## récupérer le texte de la version en cours du contenu
@
jwt_required
()
def
get
(
self
,
id_json
):
id_contenu
=
json
.
loads
(
id_json
)
return
Utils
()
.
recuperer_contenu_fichier
(
id_contenu
[
"$oid"
]),
200
...
...
@@ -326,6 +360,7 @@ class get_texte_contenu(Resource):
class
get_texte_version_contenu
(
Resource
):
@
contenus
.
response
(
200
,
"Texte du contenu récupéré pour la version renseignée"
)
## récupérer le texte d'une version donnée du contenu
@
jwt_required
()
def
get
(
self
,
id_json
,
version
):
id_contenu
=
json
.
loads
(
id_json
)
return
Utils
()
.
recuperer_contenu_version_fichier
(
id_contenu
[
"$oid"
],
version
),
200
...
...
@@ -337,6 +372,7 @@ class get_texte_version_contenu(Resource):
class
changer_texte_contenu
(
Resource
):
@
contenus
.
response
(
200
,
"Texte du contenu changé"
)
## changer le texte d'un contenu (maj de la version en cours)
@
jwt_required
()
def
patch
(
self
,
id_contenu
):
if
len
(
id_contenu
)
%
12
==
0
:
id_contenu
=
ObjectId
(
id_contenu
)
...
...
@@ -359,6 +395,7 @@ en_cours = api.namespace('en_cours', description='Entrées liées à la gestion
class
GetTexteContenuEnCours
(
Resource
):
@
en_cours
.
response
(
200
,
"Texte du contenu en cours récupéré"
)
## récupérer le texte d'un contenu en cours
@
jwt_required
()
def
get
(
self
,
id_en_cours
):
if
len
(
id_en_cours
)
%
12
==
0
:
...
...
@@ -375,6 +412,7 @@ class GetTexteContenuEnCours(Resource):
class
GetContenuEnCours
(
Resource
):
@
en_cours
.
response
(
200
,
"Contenu en cours récupéré"
)
## récupérer un contenu en cours via son id
@
jwt_required
()
def
get
(
self
,
id_en_cours
):
return
json
.
loads
(
json
.
dumps
(
list
(
en_cours_dao
.
get_contenu_en_cours_via_id
(
id_en_cours
)),
default
=
json_util
.
default
)),
200
...
...
@@ -385,6 +423,7 @@ class GetContenuEnCours(Resource):
class
GetAuteurOtigineContenuEnCours
(
Resource
):
@
en_cours
.
response
(
200
,
"Auteur du contenu en cours récupéré"
)
## récupérer l'auteur d'origine d'un contenu en cours
@
jwt_required
()
def
get
(
self
,
id_en_cours
):
return
json
.
loads
(
json
.
dumps
(
list
(
en_cours_dao
.
get_auteur_origine_contenu_en_cours
(
id_en_cours
)),
...
...
@@ -397,6 +436,7 @@ class GetAuteurOtigineContenuEnCours(Resource):
class
IsContenuDemandePublication
(
Resource
):
@
en_cours
.
response
(
200
,
"Résultat pour savoir si le contenu en cours a fait l'objet d'une demande de publication"
)
## le contenu en cours à t'il fait l'objet d'une demande de publication par l'auteur renseigné ?
@
jwt_required
()
def
get
(
self
,
id_en_cours
,
auteur
):
return
str
(
en_cours_dao
.
is_en_cours_demande
(
id_en_cours
,
auteur
)),
200
...
...
@@ -406,6 +446,7 @@ class IsContenuDemandePublication(Resource):
class
SupprimerEnCoursParId
(
Resource
):
@
en_cours
.
response
(
200
,
"Contenu en cours supprimé"
)
## supprimer un contenu en cours
@
jwt_required
()
def
delete
(
self
,
id_en_cours
):
id_contenu
=
json
.
loads
(
id_en_cours
)
en_cours_dao
.
supprimer_contenu_en_cours_via_id
(
id_contenu
[
"$oid"
])
...
...
@@ -421,6 +462,7 @@ class SupprimerEnCoursParId(Resource):
class
CreerEnCours
(
Resource
):
@
en_cours
.
response
(
200
,
"Contenu en cours créé"
)
## créer un contenu en cours
@
jwt_required
()
def
post
(
self
):
id_contenu
=
json
.
loads
(
request
.
json
[
"id_contenu"
])
en_cours_dao
.
creer_en_cours
(
request
.
json
[
'auteur'
],
id_contenu
[
"$oid"
],
request
.
json
[
'version'
],
...
...
@@ -436,6 +478,7 @@ class CreerEnCours(Resource):
class
CreerEnCoursRefuse
(
Resource
):
@
en_cours
.
response
(
201
,
"Contenu en cours mis à jour au statut de refusé"
)
## créer un contenu en cours refusé, consécutivement à une demande de publication refusée
@
jwt_required
()
def
patch
(
self
):
id_contenu_en_cours
=
json
.
loads
(
request
.
json
[
"id_contenu_en_cours"
])
...
...
@@ -458,6 +501,7 @@ demande_pub = api.namespace('demande_pub', description='Entrées liées à la ge
class
demande_de_publication
(
Resource
):
@
demande_pub
.
response
(
201
,
"Demande de publication créée"
)
## créer une demande de publication
@
jwt_required
()
def
post
(
self
):
id_contenu
=
json
.
loads
(
request
.
json
[
"id_contenu"
])
id_contenu_en_cours
=
json
.
loads
(
request
.
json
[
"id_contenu_en_cours"
])
...
...
@@ -474,6 +518,7 @@ class demande_de_publication(Resource):
class
get_demandes_pub
(
Resource
):
@
demande_pub
.
response
(
200
,
"Demande de publication récupérées pour l'auteur renseigné"
)
## récupérer les demandes de publication pour un auteur, proposées ou recues
@
jwt_required
()
def
get
(
self
,
auteur
,
emise
):
return
json
.
loads
(
json
.
dumps
(
list
(
demande_pub_Dao
.
get_demandes_pub
(
auteur
,
distutils
.
util
.
strtobool
(
emise
))),
default
=
json_util
.
default
))
...
...
@@ -484,6 +529,7 @@ class get_demandes_pub(Resource):
class
supprimer_demande_pub
(
Resource
):
@
demande_pub
.
response
(
200
,
"Demande de publication supprimée"
)
## supprimer une demande de publication
@
jwt_required
()
def
delete
(
self
,
id_publication
):
id_publication
=
json
.
loads
(
id_publication
)
...
...
@@ -504,6 +550,7 @@ evaluations = api.namespace('evaluations', description='Entrées liées à la ge
class
creer_evaluation
(
Resource
):
@
evaluations
.
response
(
201
,
"Evaluation créée"
)
## créer une évaluation
@
jwt_required
()
def
post
(
self
):
evaluation_dao
.
creer_evaluation
(
request
.
args
.
get
(
'contenus'
),
request
.
args
.
get
(
'auteur'
))
return
"evaluation créée"
,
201
...
...
@@ -514,6 +561,7 @@ class creer_evaluation(Resource):
class
get_evaluation
(
Resource
):
@
evaluations
.
response
(
200
,
"Evaluation récupérée"
)
## récupérer une évaluation d'un auteur via son id
@
jwt_required
()
def
get
(
self
,
auteur
,
id_evaluation
):
return
json
.
loads
(
json
.
dumps
(
list
(
evaluation_dao
.
get_evaluations
(
auteur
,
id_evaluation
)),
default
=
json_util
.
default
)),
200
...
...
@@ -524,6 +572,7 @@ class get_evaluation(Resource):
class
get_all_evaluations
(
Resource
):
@
evaluations
.
response
(
200
,
"Toutes les évaluations récupérées"
)
## récupérer toutes les évaluations d'un auteur
@
jwt_required
()
def
get
(
self
,
auteur
):
return
json
.
loads
(
json
.
dumps
(
list
(
evaluation_dao
.
get_evaluations
(
auteur
,
0
)),
default
=
json_util
.
default
)),
200
...
...
@@ -533,6 +582,7 @@ class get_all_evaluations(Resource):
class
supprimer_evaluation
(
Resource
):
@
evaluations
.
response
(
200
,
"Evaluation supprimée"
)
## supprimer une évaluation
@
jwt_required
()
def
delete
(
self
,
id_evaluation
):
evaluation_dao
.
supprimer_evaluation
(
id_evaluation
)
return
"Evaluation supprimée"
,
200
...
...
config/utils.py
View file @
709a9c4f
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
)
## Fonctions 'générales', principalement de manipulation des fichiers
class
Utils
:
## Fonction permettant de changer la version
...
...
documentation/html/classjinja2_1_1compiler_1_1_code_generator.js
View file @
709a9c4f
...
...
@@ -100,5 +100,5 @@ var classjinja2_1_1compiler_1_1_code_generator =
[
"optimized"
,
"classjinja2_1_1compiler_1_1_code_generator.html#a5ab6474ed31a2311422a69823d8dd8c4"
,
null
],
[
"optimizer"
,
"classjinja2_1_1compiler_1_1_code_generator.html#a6e7f6ae6228957cb12294e2ffbc0fbc8"
,
null
],
[
"stream"
,
"classjinja2_1_1compiler_1_1_code_generator.html#ae489866f8220882799d2786ca0690e5b"
,
null
],
[
"test
s
"
,
"classjinja2_1_1compiler_1_1_code_generator.html#aa58c6e40436bbb090294218b7d758a15"
,
null
]
[
"test"
,
"classjinja2_1_1compiler_1_1_code_generator.html#aa58c6e40436bbb090294218b7d758a15"
,
null
]
];
\ No newline at end of file
modele/contenu_dao.py
View file @
709a9c4f
...
...
@@ -16,7 +16,7 @@ from modele.encours_dao import EncoursDao
class
ContenuDao
:
client
=
MongoClient
(
'localhost'
,
27017
)
chemin
=
"/home/
passerat/Stage/flaskProject
/contenus/"
chemin
=
"/home/
OpenQuizz/Flask
/contenus/"
gitUtils
=
GitUtils
()
## extraction d'une base de données. Si elle n'existe pas, elle esst créée
...
...
test_flask.py
0 → 100644
View file @
709a9c4f
import
pytest
import
os
import
pytest
from
app
import
app
from
flask
import
url_for
@
pytest
.
fixture
def
client
():
app
.
config
[
'TESTING'
]
=
True
app
.
config
[
'SERVER_NAME'
]
=
'TEST'
client
=
app
.
test_client
()
with
app
.
app_context
():
pass
app
.
app_context
()
.
push
()
yield
client
def
test_multiplication
():
assert
4
==
2
*
2
def
test_index
(
client
):
rv
=
client
.
get
(
'/'
)
assert
rv
.
status_code
==
404
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