-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstreamlit_manage_open_question_evaluation.py
More file actions
136 lines (121 loc) · 6.58 KB
/
streamlit_manage_open_question_evaluation.py
File metadata and controls
136 lines (121 loc) · 6.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import streamlit as st
from db_utils import get_db
from bson.objectid import ObjectId
import datetime
def manage_open_question_evaluation():
st.title("Gérer les Évaluations de Questions Ouvertes")
db = get_db()
if db is None:
st.error("Échec de connexion à la base de données. Vérifiez votre connexion MongoDB.")
return
evaluations_collection = db.open_question_evaluations
st.header("Ajouter une Nouvelle Évaluation")
with st.form("add_evaluation"):
_id = st.text_input("ID Évaluation (Optionnel, auto-généré si vide)")
text = st.text_area("Texte Original")
question = st.text_area("Question")
student_answer = st.text_area("Réponse de l'Élève")
final_score = st.number_input("Score Final", min_value=0.0, max_value=100.0, step=0.1)
feedback = st.text_area("Commentaire")
timestamp = st.text_input("Horodatage (ex: AAAA-MM-JJ HH:MM:SS)", value=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
submitted = st.form_submit_button("Ajouter l'Évaluation")
if submitted:
evaluation_data = {
"text": text,
"question": question,
"student_answer": student_answer,
"final_score": final_score,
"feedback": feedback,
"timestamp": timestamp
}
if _id:
evaluation_data["_id"] = _id
try:
result = evaluations_collection.insert_one(evaluation_data)
st.success(f"Évaluation ajoutée avec succès (ID: {result.inserted_id}).")
except Exception as e:
st.error(f"Erreur lors de l'ajout de l'évaluation : {e}")
st.header("Évaluations Existantes")
search_query = st.text_input("Rechercher par ID ou question")
query = {}
if search_query:
query = {
"$or": [
{"_id": search_query}, # Search by exact string ID
{"question": {"$regex": search_query, "$options": "i"}}, # Case-insensitive regex search for question
{"text": {"$regex": search_query, "$options": "i"}} # Case-insensitive regex search for original text
]
}
evaluations = list(evaluations_collection.find(query))
if evaluations:
for eval_item in evaluations:
st.subheader(f"ID Évaluation: {eval_item.get('_id', 'N/A')}")
st.write(f"**Texte Original :** {eval_item.get('text', 'N/A')}")
st.write(f"**Question :** {eval_item.get('question', 'N/A')}")
st.write(f"**Réponse de l'Élève :** {eval_item.get('student_answer', 'N/A')}")
st.write(f"**Score Final :** {eval_item.get('final_score', 'N/A')}")
st.write(f"**Commentaire :** {eval_item.get('feedback', 'N/A')}")
st.write(f"**Horodatage :** {eval_item.get('timestamp', 'N/A')}")
col1, col2 = st.columns(2)
with col1:
if st.button(f"Modifier {eval_item.get('_id', '')}"):
st.session_state.edit_evaluation_id = str(eval_item["_id"])
st.session_state.edit_evaluation_data = {
"_id": str(eval_item["_id"]),
"text": eval_item.get("text", ""),
"question": eval_item.get("question", ""),
"student_answer": eval_item.get("student_answer", ""),
"final_score": eval_item.get("final_score", 0.0),
"feedback": eval_item.get("feedback", ""),
"timestamp": eval_item.get("timestamp", "")
}
with col2:
if st.button(f"Supprimer {eval_item.get('_id', '')}"):
try:
# Determine if _id is ObjectId or string
if isinstance(eval_item["_id"], ObjectId):
evaluations_collection.delete_one({"_id": eval_item["_id"]})
else:
evaluations_collection.delete_one({"_id": eval_item["_id"]})
st.success(f"Évaluation {eval_item.get('_id', '')} supprimée.")
st.experimental_rerun()
except Exception as e:
st.error(f"Erreur lors de la suppression de l'évaluation : {e}")
st.markdown("---")
else:
st.info("Aucune évaluation trouvée.")
if "edit_evaluation_id" in st.session_state and st.session_state.edit_evaluation_id:
st.header(f"Modifier l'Évaluation : {st.session_state.edit_evaluation_id}")
edit_data = st.session_state.edit_evaluation_data
with st.form("edit_evaluation"):
new_text = st.text_area("Texte Original", value=edit_data["text"])
new_question = st.text_area("Question", value=edit_data["question"])
new_student_answer = st.text_area("Réponse de l'Élève", value=edit_data["student_answer"])
new_final_score = st.number_input("Score Final", min_value=0.0, max_value=100.0, step=0.1, value=edit_data["final_score"])
new_feedback = st.text_area("Commentaire", value=edit_data["feedback"])
new_timestamp = st.text_input("Horodatage (ex: AAAA-MM-JJ HH:MM:SS)", value=edit_data["timestamp"])
update_submitted = st.form_submit_button("Mettre à jour l'Évaluation")
if update_submitted:
try:
# Determine if _id is ObjectId or string for update
target_id = edit_data["_id"]
if ObjectId.is_valid(target_id): # Check if it's a valid ObjectId string
target_id = ObjectId(target_id)
evaluations_collection.update_one(
{"_id": target_id},
{"$set": {
"text": new_text,
"question": new_question,
"student_answer": new_student_answer,
"final_score": new_final_score,
"feedback": new_feedback,
"timestamp": new_timestamp
}}
)
st.success(f"Évaluation {edit_data['_id']} mise à jour avec succès !")
st.session_state.edit_evaluation_id = None
st.experimental_rerun()
except Exception as e:
st.error(f"Erreur lors de la mise à jour de l'évaluation : {e}")
if __name__ == "__main__":
manage_open_question_evaluation()