améliore affichage exceptions (ex: erreur inscription étudiants)

This commit is contained in:
Emmanuel Viennet 2021-09-21 14:01:46 +02:00
parent 5dfc64a62d
commit 2c97349acf
10 changed files with 57 additions and 50 deletions

View File

@ -25,7 +25,7 @@ from flask_moment import Moment
from flask_caching import Cache from flask_caching import Cache
import sqlalchemy import sqlalchemy
from app.scodoc.sco_exceptions import ScoValueError, APIInvalidParams from app.scodoc.sco_exceptions import ScoGenError, ScoValueError, APIInvalidParams
from config import DevConfig from config import DevConfig
import sco_version import sco_version
@ -163,6 +163,7 @@ def create_app(config_class=DevConfig):
cache.init_app(app) cache.init_app(app)
sco_cache.CACHE = cache sco_cache.CACHE = cache
app.register_error_handler(ScoGenError, handle_sco_value_error)
app.register_error_handler(ScoValueError, handle_sco_value_error) app.register_error_handler(ScoValueError, handle_sco_value_error)
app.register_error_handler(500, internal_server_error) app.register_error_handler(500, internal_server_error)
app.register_error_handler(503, postgresql_server_error) app.register_error_handler(503, postgresql_server_error)

View File

@ -259,12 +259,13 @@ def do_module_delete(oid):
# S'il y a des moduleimpls, on ne peut pas detruire le module ! # S'il y a des moduleimpls, on ne peut pas detruire le module !
mods = sco_moduleimpl.do_moduleimpl_list(module_id=oid) mods = sco_moduleimpl.do_moduleimpl_list(module_id=oid)
if mods: if mods:
err_page = scu.confirm_dialog( err_page = f"""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>
message="""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>""", <p class="help">Il faut d'abord supprimer le semestre. Mais il est peut être préférable de
helpmsg="""Il faut d'abord supprimer le semestre. Mais il est peut être préférable de laisser ce programme intact et d'en créer une nouvelle version pour la modifier.""", laisser ce programme intact et d'en créer une nouvelle version pour la modifier.
dest_url="ue_list", </p>
parameters={"formation_id": mod["formation_id"]}, <a href="{url_for('notes.ue_list', scodoc_dept=g.scodoc_dept,
) formation_id=mod["formation_id"])}">reprendre</a>
"""
raise ScoGenError(err_page) raise ScoGenError(err_page)
# delete # delete
cnx = ndb.GetDBConnexion() cnx = ndb.GetDBConnexion()

View File

@ -770,7 +770,7 @@ def view_apo_csv(etape_apo="", semset_id="", format="html", REQUEST=None):
return "\n".join(H) return "\n".join(H)
# called from Web # called from Web (GET)
def apo_csv_export_results( def apo_csv_export_results(
semset_id, semset_id,
block_export_res_etape=False, block_export_res_etape=False,

View File

@ -338,31 +338,33 @@ def _check_duplicate_code(
) )
if etudid: if etudid:
OK = "retour à la fiche étudiant" OK = "retour à la fiche étudiant"
dest_url = "ficheEtud" dest_endpoint = "scolar.ficheEtud"
parameters = {"etudid": etudid} parameters = {"etudid": etudid}
else: else:
if "tf_submitted" in args: if "tf_submitted" in args:
del args["tf_submitted"] del args["tf_submitted"]
OK = "Continuer" OK = "Continuer"
dest_url = "etudident_create_form" dest_endpoint = "scolar.etudident_create_form"
parameters = args parameters = args
else: else:
OK = "Annuler" OK = "Annuler"
dest_url = "" dest_endpoint = "notes.index_html"
parameters = {} parameters = {}
if not disable_notify: if not disable_notify:
err_page = scu.confirm_dialog( err_page = f"""<h3><h3>Code étudiant ({code_name}) dupliqué !</h3>
message="""<h3>Code étudiant (%s) dupliqué !</h3>""" % code_name, <p class="help">Le {code_name} {args[code_name]} est déjà utilisé: un seul étudiant peut avoir
helpmsg="""Le %s %s est déjà utilisé: un seul étudiant peut avoir ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.<p><ul><li>""" ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.
% (code_name, args[code_name]) </p>
+ "</li><li>".join(listh) <ul><li>
+ "</li></ul><p>", { '</li><li>'.join(listh) }
OK=OK, </li></ul>
dest_url=dest_url, <p>
parameters=parameters, <a href="{ url_for(dest_endpoint, scodoc_dept=g.scodoc_dept, **parameters) }
) ">{OK}</a>
</p>
"""
else: else:
err_page = """<h3>Code étudiant (%s) dupliqué !</h3>""" % code_name err_page = f"""<h3>Code étudiant ({code_name}) dupliqué !</h3>"""
log("*** error: code %s duplique: %s" % (code_name, args[code_name])) log("*** error: code %s duplique: %s" % (code_name, args[code_name]))
raise ScoGenError(err_page) raise ScoGenError(err_page)

View File

@ -51,11 +51,7 @@ import app.scodoc.sco_utils as scu
from app.scodoc.sco_exceptions import ( from app.scodoc.sco_exceptions import (
AccessDenied, AccessDenied,
ScoException,
ScoValueError, ScoValueError,
ScoInvalidDateError,
ScoLockedFormError,
ScoGenError,
) )

View File

@ -838,9 +838,10 @@ def confirm_dialog(
action = f'action="{dest_url}"' action = f'action="{dest_url}"'
H = [ H = [
f"""<form {action} method="post">""", f"""<form {action} method="POST">
message, {message}
"""<input type="submit" value="%s"/>""" % OK, <input type="submit" value="{OK}"/>
""",
] ]
if cancel_url: if cancel_url:
H.append( H.append(

View File

@ -154,7 +154,7 @@ div.scovalueerror {
p.footer { p.footer {
font-size: 80%; font-size: 80%;
color: rgb(60,60,60); color: rgb(60,60,60);
margin-top: 10px; margin-top: 15px;
border-top: 1px solid rgb(60,60,60); border-top: 1px solid rgb(60,60,60);
} }

View File

@ -5,13 +5,14 @@
<h2>Erreur !</h2> <h2>Erreur !</h2>
<p>{{ exc }}</p> {{ exc | safe }}
<p> <p class="footer">
{% 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 href="{{ exc.dest_url or url_for('scolar.index_html', scodoc_dept=g.scodoc_dept) }}">retour page d'accueil
departement {{ g.scodoc_dept }}</a>
{% else %} {% else %}
<a href="{{ exc.dest_url or url_for('scodoc.index') }}">continuer</a> <a href="{{ exc.dest_url or url_for('scodoc.index') }}">retour page d'accueil</a>
{% endif %} {% endif %}
</p> </p>

View File

@ -146,23 +146,31 @@ def sco_publish(route, function, permission, methods=["GET"]):
# --------------------- Quelques essais élémentaires: # --------------------- Quelques essais élémentaires:
@bp.route("/essai") # @bp.route("/essai")
@scodoc # @scodoc
@permission_required(Permission.ScoView) # @permission_required(Permission.ScoView)
@scodoc7func # @scodoc7func
def essai(REQUEST=None): # def essai(REQUEST=None):
return essai_(REQUEST) # return essai_(REQUEST)
def essai_(REQUEST): # def essai_(REQUEST):
return "<html><body><h2>essai !</h2><p>%s</p></body></html>" % (REQUEST,) # return "<html><body><h2>essai !</h2><p>%s</p></body></html>" % (REQUEST,)
def essai2(): # def essai2():
return essai_("sans request") # err_page = f"""<h3>Destruction du module impossible car il est utilisé dans des semestres existants !</h3>
# <p class="help">Il faut d'abord supprimer le semestre. Mais il est peut être préférable de
# laisser ce programme intact et d'en créer une nouvelle version pour la modifier.
# </p>
# <a href="url_for('notes.ue_list', scodoc-dept=g.scodoc_dept, formation_id='XXX')">reprendre</a>
# """
# raise ScoGenError(err_page)
# # raise ScoGenError("une erreur banale")
# return essai_("sans request")
sco_publish("/essai2", essai2, Permission.ScoImplement) # sco_publish("/essai2", essai2, Permission.ScoImplement)
# -------------------------------------------------------------------- # --------------------------------------------------------------------
@ -2252,11 +2260,13 @@ sco_publish(
"/view_apo_csv_store", "/view_apo_csv_store",
sco_etape_apogee_view.view_apo_csv_store, sco_etape_apogee_view.view_apo_csv_store,
Permission.ScoEditApo, Permission.ScoEditApo,
methods=["GET", "POST"],
) )
sco_publish( sco_publish(
"/view_apo_csv_download_and_store", "/view_apo_csv_download_and_store",
sco_etape_apogee_view.view_apo_csv_download_and_store, sco_etape_apogee_view.view_apo_csv_download_and_store,
Permission.ScoEditApo, Permission.ScoEditApo,
methods=["GET", "POST"],
) )
sco_publish( sco_publish(
"/view_apo_csv_delete", "/view_apo_csv_delete",

View File

@ -68,13 +68,8 @@ from app.scodoc.sco_exceptions import (
AccessDenied, AccessDenied,
ScoException, ScoException,
ScoValueError, ScoValueError,
ScoInvalidDateError,
ScoLockedFormError,
ScoGenError,
ScoInvalidDept,
) )
from app.scodoc.TrivialFormulator import TrivialFormulator, tf_error_message from app.scodoc.TrivialFormulator import TrivialFormulator, tf_error_message
import sco_version
import app import app
from app.scodoc.gen_tables import GenTable from app.scodoc.gen_tables import GenTable
from app.scodoc import html_sco_header from app.scodoc import html_sco_header