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
e5ee0da7
Commit
e5ee0da7
authored
Sep 15, 2021
by
Jérémie Passerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Ajout (non fini) de fonctions pour maj un xml moodle
parent
17461616
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
241 additions
and
7 deletions
+241
-7
app.py
app.py
+15
-0
contenu_dao.py
modele/contenu_dao.py
+226
-7
No files found.
app.py
View file @
e5ee0da7
...
...
@@ -672,6 +672,21 @@ class parser_contenu_xml(Resource):
return
ContenuDao
()
.
previsualiser_xml_moodle
(
id_contenu
[
"$oid"
]),
200
@
contenus
.
route
(
"/modifierXML"
)
@
contenus
.
doc
(
params
=
{
'id_contenu'
:
"L'id du contenu à modifier"
})
@
contenus
.
doc
(
params
=
{
'elements_contenu'
:
"Le détail du contenu"
})
@
contenus
.
doc
(
desciption
=
"modifier un xml moodle"
)
class
modifier_xml
(
Resource
):
@
contenus
.
response
(
200
,
"contenu modifié"
)
def
patch
(
self
):
id_contenu
=
json
.
loads
(
request
.
json
[
'id_contenu'
])
elements_contenu
=
json
.
loads
(
request
.
json
[
'elements_contenu'
])
print
(
"elements_contenu : "
,
elements_contenu
)
ContenuDao
()
.
modifier_xml_moodle
(
id_contenu
[
"$oid"
],
elements_contenu
)
return
"contenu modifié"
,
200
en_cours
=
api
.
namespace
(
'en_cours'
,
description
=
'Entrées liées à la gestion des contenus en cours'
)
...
...
modele/contenu_dao.py
View file @
e5ee0da7
...
...
@@ -9,6 +9,9 @@ import os
# from UtilsGit import UtilsGit
from
pathlib
import
Path
import
string
from
xml.etree
import
ElementTree
as
ET
from
xml.dom
import
minidom
from
xml.etree.ElementTree
import
Element
,
SubElement
,
Comment
from
werkzeug.utils
import
secure_filename
...
...
@@ -77,8 +80,6 @@ class ContenuDao:
Path
(
chemin_fichier
)
.
mkdir
(
0o777
,
parents
=
True
,
exist_ok
=
True
)
file
.
save
(
os
.
path
.
join
(
chemin_fichier
,
filename
))
print
(
chemin_fichier
+
filename
)
xmldoc
=
minidom
.
parse
(
chemin_fichier
+
filename
)
mite
=
xmldoc
.
getElementsByTagName
(
'name'
)
titre
=
mite
[
0
]
.
childNodes
[
1
]
.
firstChild
.
nodeValue
...
...
@@ -710,9 +711,227 @@ class ContenuDao:
{
"$set"
:
{
"historique"
:
contenus
}})
return
json
.
dumps
([
cont
[
'note'
],
cont
[
'nbreNotes'
]])
#
# Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation & l'édition
#
@param id_contenu l'id du contenu à parser
#
@return un dictionnaire comprenant toutes les informations
utiles
#
# Fonction qui permet de parser un contenu (de type XML - Moodle) -Fonction utile pour la prévisualisation &
#
l'édition @param id_contenu l'id du contenu à parser @return un dictionnaire comprenant toutes les informations
# utiles
def
previsualiser_xml_moodle
(
self
,
id_contenu
):
print
(
"Shiny "
,
id_contenu
,
" "
,
type
(
id_contenu
))
return
"Seize the day"
texte
=
Utils
()
.
recuperer_contenu_fichier
(
id_contenu
)
# nom_fichier = os.path.basename(self.lineedit_adresse.text())
# adresse_fichier = os.path.dirname(self.lineedit_adresse.text())
type_question
=
""
nom_question
=
""
intitule_question
=
""
note_defaut
=
""
penalite
=
""
feedback_general
=
""
elements_question
=
dict
()
root
=
ET
.
fromstring
(
texte
)
for
question
in
root
.
iter
(
'question'
):
if
question
.
attrib
[
"type"
]
!=
"category"
:
elements_question
[
"type_question"
]
=
question
.
attrib
[
"type"
]
for
note
in
root
.
iter
(
'defaultgrade'
):
elements_question
[
"note_defaut"
]
=
note
.
text
for
penalty
in
root
.
iter
(
'penalty'
):
elements_question
[
"penalite"
]
=
penalty
.
text
for
name
in
root
.
iter
(
'name'
):
for
nom
in
name
.
iter
(
'text'
):
elements_question
[
"nom_question"
]
=
nom
.
text
for
question
in
root
.
iter
(
'questiontext'
):
for
intitule
in
question
.
iter
(
'text'
):
# print("new game now loading : " + intitule.text)
# elements_question["intitule_question"] = intitule.text[3:len(intitule.text) - 4]
elements_question
[
"intitule_question"
]
=
intitule
.
text
for
general
in
root
.
iter
(
'generalfeedback'
):
for
feedback
in
general
.
iter
(
'text'
):
elements_question
[
"feedback_general"
]
=
feedback
.
text
if
elements_question
[
"type_question"
]
==
"truefalse"
:
note_faux
=
0
# on récupère la bonne réponse (mise par défault à Vrai mais changée si besoin).
elements_question
[
"bonne_reponse"
]
=
'Vrai'
for
answer
in
root
.
iter
(
'answer'
):
note_faux
=
answer
.
attrib
[
"fraction"
]
# On analyse la dernière réponse enrengistrée dans le for. Si elle est égale à 100, on change la bonne réponse.
if
note_faux
==
'100'
:
elements_question
[
"bonne_reponse"
]
=
'Faux'
# on récupère le texte associé aux deux réponses (pas forcément vrai / faux, l'auteur peut mettre a peu près ce qu'il veut)
liste_feedback
=
[]
for
answer
in
root
.
iter
(
'answer'
):
for
feedback
in
answer
.
iter
(
'text'
):
liste_feedback
.
append
(
feedback
.
text
)
elements_question
[
"liste_feedback"
]
=
liste_feedback
elif
elements_question
[
"type_question"
]
==
"shortanswer"
:
# majuscule -> permet la casse (à 1) ou non (à 0)
# majuscule = ''
for
usecase
in
root
.
iter
(
'usecase'
):
elements_question
[
"majuscule"
]
=
usecase
.
text
# on récupère les réponses valables, les notes associées et les feedback
liste_reponse
=
[]
liste_note
=
[]
liste_feedback
=
[]
for
answer
in
root
.
iter
(
'answer'
):
liste_note
.
append
(
answer
.
attrib
[
"fraction"
])
for
question
in
answer
.
iter
(
'text'
):
liste_reponse
.
append
(
question
.
text
)
for
feedback
in
answer
.
iter
(
'feedback'
):
for
feed
in
feedback
.
iter
(
'text'
):
liste_feedback
.
append
(
feed
.
text
)
# for k in range(3):
# liste_reponse.append("")
# liste_note.append("")
# liste_feedback.append("")
elements_question
[
"liste_reponse"
]
=
liste_reponse
elements_question
[
"liste_note"
]
=
liste_note
elements_question
[
"liste_feedback"
]
=
liste_feedback
elif
elements_question
[
"type_question"
]
==
"multichoice"
:
# nb_reponse = ''
for
single
in
root
.
iter
(
'single'
):
elements_question
[
"nb_reponse"
]
=
single
.
text
# print ("nb_reponse : ", nb_reponse)
for
shuffleanswers
in
root
.
iter
(
'shuffleanswers'
):
elements_question
[
"melange_reponse"
]
=
shuffleanswers
.
text
for
answernumbering
in
root
.
iter
(
'answernumbering'
):
elements_question
[
"numerotation"
]
=
answernumbering
.
text
liste_reponse
=
[]
liste_note
=
[]
liste_feedback
=
[]
for
answer
in
root
.
iter
(
'answer'
):
liste_note
.
append
(
answer
.
attrib
[
"fraction"
])
for
question
in
answer
.
iter
(
'text'
):
if
question
.
text
is
not
None
:
liste_reponse
.
append
(
question
.
text
)
for
feedback
in
answer
.
iter
(
'feedback'
):
for
feed
in
feedback
.
iter
(
'text'
):
liste_feedback
.
append
(
feed
.
text
)
elements_question
[
"liste_reponse"
]
=
liste_reponse
elements_question
[
"liste_note"
]
=
liste_note
elements_question
[
"liste_feedback"
]
=
liste_feedback
liste_feedback_principaux
=
[]
for
feedback
in
root
.
iter
(
'text'
):
liste_feedback_principaux
.
append
(
feedback
.
text
)
elements_question
[
"liste_feedback_principaux"
]
=
liste_feedback_principaux
elif
elements_question
[
"type_question"
]
==
"numerical"
or
\
elements_question
[
"type_question"
]
==
"calculatedsimple"
:
for
unit
in
root
.
iter
(
'unitgradingtype'
):
elements_question
[
"traitement_unite"
]
=
unit
.
text
for
showunits
in
root
.
iter
(
'showunits'
):
elements_question
[
"saisie_unite"
]
=
showunits
.
text
for
unitsleft
in
root
.
iter
(
'unitsleft'
):
elements_question
[
"position_unite"
]
=
unitsleft
.
text
liste_unite_nom
=
[]
for
unit_name
in
root
.
iter
(
'unit_name'
):
liste_unite_nom
.
append
(
unit_name
.
text
)
for
k
in
range
(
3
):
liste_unite_nom
.
append
(
''
)
liste_unite_coef
=
[]
for
multiplier
in
root
.
iter
(
'multiplier'
):
liste_unite_coef
.
append
(
multiplier
.
text
)
for
k
in
range
(
3
):
liste_unite_coef
.
append
(
''
)
elements_question
[
"liste_unite_nom"
]
=
liste_unite_nom
elements_question
[
"liste_unite_coef"
]
=
liste_unite_coef
liste_reponse
=
[]
liste_note
=
[]
liste_feedback
=
[]
liste_tolerance
=
[]
for
answer
in
root
.
iter
(
'answer'
):
liste_note
.
append
(
answer
.
attrib
[
"fraction"
])
for
question
in
answer
.
iter
(
'text'
):
if
question
.
text
is
not
None
:
liste_reponse
.
append
(
question
.
text
)
for
feedback
in
answer
.
iter
(
'feedback'
):
for
feed
in
feedback
.
iter
(
'text'
):
liste_feedback
.
append
(
feed
.
text
)
for
tolerance
in
answer
.
iter
(
'tolerance'
):
#print ("tolerance : ", tolerance.text)
if
tolerance
.
text
is
not
None
:
liste_tolerance
.
append
(
tolerance
.
text
)
elements_question
[
"liste_reponse"
]
=
liste_reponse
elements_question
[
"liste_note"
]
=
liste_note
elements_question
[
"liste_feedback"
]
=
liste_feedback
elements_question
[
"liste_tolerance"
]
=
liste_tolerance
# elif elements_question["type_question"] == 'calculatedsimple':
# print("calculatedsimple")
#
# liste_reponse = []
# liste_note = []
# liste_feedback = []
# liste_erreur = []
# for answer in root.iter('answer'):
# liste_note.append(answer.attrib["fraction"])
# for question in answer.iter('text'):
# liste_reponse.append(question.text)
# for feedback in answer.iter('feedback'):
# for feed in feedback.iter('text'):
# liste_feedback.append(feed.text)
# for tolerance in answer.iter('tolerance'):
# liste_erreur.append(tolerance.text)
#
# elements_question["liste_reponse"] = liste_reponse
# elements_question["liste_note"] = liste_note
# elements_question["liste_feedback"] = liste_feedback
# elements_question["liste_tolerance"] = liste_erreur
# print("elements_question : ", elements_question)
return
elements_question
## Fonction permettant de modifier un xml Moodle
# @param id_contenu
# @param elements_contenu
def
modifier_xml_moodle
(
self
,
id_contenu
,
elements_contenu
):
texte
=
Utils
()
.
recuperer_contenu_fichier
(
id_contenu
)
root
=
ET
.
fromstring
(
texte
)
print
(
"root"
)
print
(
root
)
print
(
type
(
root
))
print
(
ET
.
tostring
(
root
))
for
name
in
root
.
iter
(
'name'
):
for
nom
in
name
.
iter
(
'text'
):
nom
.
text
=
"Chabala"
print
(
ET
.
tostring
(
root
))
pass
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