1
0
forked from ScoDoc/ScoDoc

Enhance ScoValueError messages (lié à 87aaf12d27)

This commit is contained in:
Emmanuel Viennet 2024-05-20 10:46:36 +02:00
parent 8847a1f008
commit 3b436fa0f3
10 changed files with 36 additions and 21 deletions

View File

@ -124,7 +124,9 @@ def _build_bulletin_but_infos(
formsemestre, bulletins_sem.res formsemestre, bulletins_sem.res
) )
if warn_html: if warn_html:
raise ScoValueError("<b>Formation mal configurée pour le BUT</b>" + warn_html) raise ScoValueError(
"<b>Formation mal configurée pour le BUT</b>" + warn_html, safe=True
)
ue_validation_by_niveau = validations_view.get_ue_validation_by_niveau( ue_validation_by_niveau = validations_view.get_ue_validation_by_niveau(
refcomp, etud refcomp, etud
) )

View File

@ -242,7 +242,8 @@ class ResultatsSemestreClassic(NotesTableCompat):
) )
}">saisir le coefficient de cette UE avant de continuer</a></p> }">saisir le coefficient de cette UE avant de continuer</a></p>
</div> </div>
""" """,
safe=True,
) )

View File

@ -518,7 +518,8 @@ class ResultatsSemestre(ResultatsCache):
Corrigez ou faite corriger le programme Corrigez ou faite corriger le programme
<a href="{url_for('notes.ue_table', scodoc_dept=g.scodoc_dept, <a href="{url_for('notes.ue_table', scodoc_dept=g.scodoc_dept,
formation_id=ue_capitalized.formation_id)}">via cette page</a>. formation_id=ue_capitalized.formation_id)}">via cette page</a>.
""" """,
safe=True,
) )
else: else:
# Coefs de l'UE capitalisée en formation classique: # Coefs de l'UE capitalisée en formation classique:

View File

@ -122,7 +122,8 @@ def replacement_function(match) -> str:
return r'<img %s src="%s"%s/>' % (match.group(2), logo.filepath, match.group(4)) return r'<img %s src="%s"%s/>' % (match.group(2), logo.filepath, match.group(4))
raise ScoValueError( raise ScoValueError(
'balise "%s": logo "%s" introuvable' 'balise "%s": logo "%s" introuvable'
% (pydoc.html.escape(balise), pydoc.html.escape(name)) % (pydoc.html.escape(balise), pydoc.html.escape(name)),
safe=True,
) )

View File

@ -216,11 +216,11 @@ def _drop_ano_db(ano_db_name):
log("_drop_ano_db: no temp db, nothing to drop") log("_drop_ano_db: no temp db, nothing to drop")
return return
cmd = ["dropdb", ano_db_name] cmd = ["dropdb", ano_db_name]
log("sco_dump_and_send_db: {}".format(cmd)) log(f"sco_dump_and_send_db: {cmd}")
try: try:
_ = subprocess.check_output(cmd) _ = subprocess.check_output(cmd)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as exc:
log("sco_dump_and_send_db: exception dropdb {}".format(e)) log(f"sco_dump_and_send_db: exception dropdb {exc}")
raise ScoValueError( raise ScoValueError(
"erreur lors de la suppression de la base {}".format(ano_db_name) f"erreur lors de la suppression de la base {ano_db_name}"
) ) from exc

View File

@ -326,6 +326,7 @@ def do_formation_create(args: dict) -> Formation:
scodoc_dept=g.scodoc_dept, scodoc_dept=g.scodoc_dept,
formation_id=formation.id, formation_id=formation.id,
), ),
safe=True,
) from exc ) from exc
ScolarNews.add( ScolarNews.add(

View File

@ -45,13 +45,17 @@ class ScoInvalidCSRF(ScoException):
class ScoValueError(ScoException): class ScoValueError(ScoException):
"Exception avec page d'erreur utilisateur, et qui stoque dest_url" """Exception avec page d'erreur utilisateur
- dest_url : url aller après la page d'erreur
- safe (default False): si vrai, affiche le message non html quoté.
"""
# mal nommée: super classe de toutes les exceptions avec page # mal nommée: super classe de toutes les exceptions avec page
# d'erreur gentille. # d'erreur gentille.
def __init__(self, msg, dest_url=None): def __init__(self, msg, dest_url=None, safe=False):
super().__init__(msg) super().__init__(msg)
self.dest_url = dest_url self.dest_url = dest_url
self.safe = safe # utilisé par template sco_value_error.j2
class ScoPermissionDenied(ScoValueError): class ScoPermissionDenied(ScoValueError):

View File

@ -115,7 +115,8 @@ def formsemestre_synchro_etuds(
url_for('notes.formsemestre_editwithmodules', url_for('notes.formsemestre_editwithmodules',
scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id) scodoc_dept=g.scodoc_dept, formsemestre_id=formsemestre.id)
}">Modifier ce semestre</a>) }">Modifier ce semestre</a>)
""" """,
safe=True,
) )
footer = html_sco_header.sco_footer() footer = html_sco_header.sco_footer()
base_url = url_for( base_url = url_for(

View File

@ -5,15 +5,19 @@
<h2>Erreur !</h2> <h2>Erreur !</h2>
{% if exc.safe %}
{{ exc | safe }}
{% else %}
{{ exc }} {{ exc }}
{% endif %}
<div style="margin-top: 16px;"> <div style="margin-top: 16px;">
{% if g.scodoc_dept %} {% if g.scodoc_dept %}
<a href="{{ exc.dest_url or url_for('scolar.index_html', scodoc_dept=g.scodoc_dept) }}">continuer</a> <a class="stdlink" href="{{ exc.dest_url or url_for('scolar.index_html', scodoc_dept=g.scodoc_dept) }}">continuer</a>
{% elif exc.dest_url %} {% elif exc.dest_url %}
<a href="{{ exc.dest_url or url_for('scodoc.index') }}">continuer</a> <a class="stdlink" href="{{ exc.dest_url or url_for('scodoc.index') }}">continuer</a>
{% else %} {% else %}
<a href="{{ exc.dest_url or url_for('scodoc.index') }}">retour page d'accueil</a> <a class="stdlink" href="{{ exc.dest_url or url_for('scodoc.index') }}">retour page d'accueil</a>
{% endif %} {% endif %}
</div> </div>

View File

@ -1436,14 +1436,14 @@ def formsemestre_desinscription(etudid, formsemestre_id, dialog_confirmed=False)
if nt.etud_has_decision(etudid): if nt.etud_has_decision(etudid):
raise ScoValueError( raise ScoValueError(
f"""Désinscription impossible: l'étudiant a une décision de jury f"""Désinscription impossible: l'étudiant a une décision de jury
(la supprimer avant si nécessaire: (la supprimer avant si nécessaire avec
<a href="{ <a class="stdlink" href="{
url_for("notes.formsemestre_validation_suppress_etud", url_for("notes.formsemestre_validation_suppress_etud",
scodoc_dept=g.scodoc_dept, etudid=etudid, scodoc_dept=g.scodoc_dept, etudid=etudid,
formsemestre_id=formsemestre_id) formsemestre_id=formsemestre_id)
}">supprimer décision jury</a> }">supprimer décision jury</a>)
) """,
""" safe=True,
) )
if not dialog_confirmed: if not dialog_confirmed:
etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0]