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
520f210a
Commit
520f210a
authored
Aug 27, 2021
by
Jérémie Passerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Tests tags ok
parent
74a34fc7
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
254 additions
and
141 deletions
+254
-141
app.py
app.py
+8
-12
contenu_dao.py
modele/contenu_dao.py
+31
-13
test_flask_contenu.py
tests/test_flask_contenu.py
+215
-116
No files found.
app.py
View file @
520f210a
...
...
@@ -424,13 +424,13 @@ class get_tags_contenu(Resource):
## 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"
])),
id_
contenu
=
json
.
loads
(
id_contenu
)
return
json
.
loads
(
json
.
dumps
(
list
(
contenu_dao
.
get_tags_contenu
(
id_
contenu
[
"$oid"
])),
default
=
json_util
.
default
)),
200
@
contenus
.
route
(
"/modifierTags"
)
@
contenus
.
doc
(
params
=
{
'id_
publication
'
:
"l'id du contenu pour lequel on veut récupérer des tags"
})
@
contenus
.
doc
(
params
=
{
'id_
contenu
'
:
"l'id du contenu pour lequel on veut récupérer des tags"
})
@
contenus
.
doc
(
params
=
{
'tags'
:
"les nouveaux tags du contenu"
})
@
contenus
.
doc
(
description
=
"modifier les tags d'un contenu"
)
class
modifier_tags_contenus
(
Resource
):
...
...
@@ -445,7 +445,6 @@ class modifier_tags_contenus(Resource):
@
contenus
.
route
(
"/newTagLibre"
)
@
contenus
.
doc
(
params
=
{
'auteur'
:
"le créateur du tag"
})
@
contenus
.
doc
(
params
=
{
'id_contenu'
:
"le contenu auquel le tag est associé. Possiblement vide"
})
@
contenus
.
doc
(
params
=
{
'tag'
:
"Le tag créé"
})
@
contenus
.
doc
(
description
=
"ajouter un tag libre"
)
class
ajouter_tag_libre
(
Resource
):
...
...
@@ -453,12 +452,9 @@ class ajouter_tag_libre(Resource):
## ajouter un tag libre (lié à un contenu ou non)
@
jwt_required
()
def
patch
(
self
):
if
request
.
json
[
'id_contenu'
]
!=
""
:
id_contenu
=
json
.
loads
(
request
.
json
[
"id_contenu"
])
id_contenu
=
id_contenu
[
"$oid"
]
else
:
id_contenu
=
""
ContenuDao
()
.
creer_tag_libre
(
request
.
json
[
"auteur"
],
request
.
json
[
"tag"
],
id_contenu
)
id_contenu
=
""
ContenuDao
()
.
creer_tag_libre
(
request
.
json
[
"auteur"
],
request
.
json
[
"tag"
])
return
"tag créé"
,
201
...
...
@@ -497,7 +493,7 @@ class associer_tag_libre(Resource):
def
patch
(
self
):
id_contenu
=
json
.
loads
(
request
.
json
[
"id_contenu"
])
ContenuDao
()
.
associer_tag_libre
(
request
.
json
[
"auteur"
],
request
.
json
[
"tag"
],
id_contenu
[
"$oid"
])
return
"tag associe"
,
20
0
return
"tag associe"
,
20
1
@
contenus
.
route
(
"/dissocierTagLibre"
)
...
...
@@ -511,7 +507,7 @@ class dissocier_tag_libre(Resource):
def
patch
(
self
):
id_contenu
=
json
.
loads
(
request
.
json
[
"id_contenu"
])
ContenuDao
()
.
dissocier_tag_libre
(
request
.
json
[
"auteur"
],
request
.
json
[
"tag"
],
id_contenu
[
"$oid"
])
return
"tag dissocié"
,
20
0
return
"tag dissocié"
,
20
1
@
contenus
.
route
(
"/supprimerTagLibre"
)
...
...
modele/contenu_dao.py
View file @
520f210a
...
...
@@ -218,8 +218,6 @@ class ContenuDao:
def
supprimer_contenu
(
self
,
id_contenu
):
import
shutil
if
self
.
existe_en_tiers
(
id_contenu
)
!=
0
:
self
.
dissocier_contenu
(
id_contenu
)
...
...
@@ -236,7 +234,6 @@ class ContenuDao:
# @param la note associee au contenu
def
supprimer_tiers
(
self
,
id_tiers
,
auteur
,
version
,
note
):
# on distingue le cas ou une note a été donnée ou non
if
note
==
"-"
:
self
.
base_donnees
.
utilisateur
.
update
({
"nom"
:
auteur
},
...
...
@@ -500,20 +497,43 @@ class ContenuDao:
# @param id_contenu l'id du contenu concerné
# @return les tags associés au contenu
def
get_tags_contenu
(
self
,
id_contenu
):
return
self
.
base_donnees
.
contenu
.
find
({
"_id"
:
ObjectId
(
id_contenu
)})[
"tags_fixes"
]
return
self
.
base_donnees
.
contenu
.
find
_one
({
"_id"
:
ObjectId
(
id_contenu
)})[
"tags_fixes"
]
## Mise à jour des tags associés au contenu
## Mise à jour des tags
fixes
associés au contenu
# @param id_contenu l'id du contenu concerné
# @param tags les nouveaux tags
def
changer_tags_contenus
(
self
,
id_contenu
,
tags
):
ancien_chemin
=
self
.
get_chemin_du_contenu
(
id_contenu
)
# on modifie les tags
self
.
base_donnees
.
contenu
.
update
({
"_id"
:
ObjectId
(
id_contenu
)},
{
"$set"
:
{
"tags_fixes"
:
tags
}})
# et le chemin du fichier
chemin_tags
=
'/'
.
join
(
tags
)
+
"/"
# mettre a jour le chemin du contenu
self
.
base_donnees
.
contenu
.
update_one
({
"_id"
:
ObjectId
(
id_contenu
)},
{
"$set"
:
{
"fichier"
:
chemin_tags
+
id_contenu
+
"/"
+
id_contenu
}})
# print(self.get_chemin_du_contenu(id_contenu))
Path
(
self
.
chemin
+
chemin_tags
+
id_contenu
+
"/"
)
.
mkdir
(
0o777
,
parents
=
True
,
exist_ok
=
True
)
print
(
ancien_chemin
[:
ancien_chemin
.
rfind
(
"/"
)])
print
(
ancien_chemin
[:
ancien_chemin
.
rfind
(
"/"
)
+
1
])
Path
(
ancien_chemin
)
.
rename
(
self
.
get_chemin_du_contenu
(
id_contenu
))
self
.
rm_tree
(
Path
(
ancien_chemin
[:
ancien_chemin
.
rfind
(
"/"
)
+
1
]))
# Path(ancien_chemin[:ancien_chemin.rfind("/") + 1]).rmdir()
## Fonction utilitaire -> supprimer un repertoire
# @param path le chemin du repertoire
def
rm_tree
(
self
,
pth
):
for
child
in
pth
.
iterdir
():
if
child
.
is_file
():
child
.
unlink
()
else
:
self
.
rm_tree
(
child
)
pth
.
rmdir
()
## Modification d'un titre d'un contenu personnel
# @param id_en_cours l'id du contenu
# @param nouveau_titre le titre à changer
...
...
@@ -524,13 +544,11 @@ class ContenuDao:
# @param auteur l'auteur du nouveau tag
# @param tag le tag créé
# @param id_contenu l'id du contenu associé (potentiellement vide)
def
creer_tag_libre
(
self
,
auteur
,
tag
,
id_contenu
):
contenus
=
list
()
if
id_contenu
!=
""
:
contenus
.
append
(
ObjectId
(
id_contenu
))
def
creer_tag_libre
(
self
,
auteur
,
tag
):
self
.
base_donnees
.
utilisateur
.
update
({
"nom"
:
auteur
},
{
"$push"
:
{
"tags"
:
[{
"tag"
:
tag
},
{
"contenu
"
:
contenus
}]}})
"tags"
:
[{
"tag"
:
tag
},
{
"contenu
s"
:
[]
}]}})
## Fonction permettant de supprimer un tag libre
# @param auteur l'auteur du nouveau tag
...
...
@@ -561,7 +579,7 @@ class ContenuDao:
# on parcourt chaque tag et on vire les mentions à id_contenu
for
tag
in
tags
:
if
tag
[
0
][
'tag'
]
==
mon_tag
:
tag
[
1
][
'contenu'
]
.
remove
(
ObjectId
(
id_contenu
))
tag
[
1
][
'contenu
s
'
]
.
remove
(
ObjectId
(
id_contenu
))
self
.
base_donnees
.
utilisateur
.
update
({
"nom"
:
auteur
},
{
"$set"
:
{
"tags"
:
tags
}})
## Fonction permettant d'associer un contenu à un tag libre
...
...
@@ -576,7 +594,7 @@ class ContenuDao:
# on parcourt chaque tag et on vire les mentions à id_contenu
for
letag
in
tags
:
if
letag
[
0
][
'tag'
]
==
tag
:
letag
[
1
][
'contenu'
]
.
append
(
ObjectId
(
id_contenu
))
letag
[
1
][
'contenu
s
'
]
.
append
(
ObjectId
(
id_contenu
))
# print(letag[1]['contenu'], type(letag[1]['contenu']))
# for contenu_associe in letag[1]:
# print(contenu_associe)
...
...
@@ -601,7 +619,7 @@ class ContenuDao:
tags
=
self
.
base_donnees
.
utilisateur
.
find_one
({
"nom"
:
auteur
})[
"tags"
]
tags_auteur
=
list
()
for
f
in
tags
:
for
cont
in
f
[
1
][
'contenu'
]:
for
cont
in
f
[
1
][
'contenu
s
'
]:
if
cont
==
ObjectId
(
id_contenu
):
tags_auteur
.
append
(
f
[
0
][
'tag'
])
return
tags_auteur
...
...
tests/test_flask_contenu.py
View file @
520f210a
This diff is collapsed.
Click to expand it.
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