From 9b5b4777e25a2d02f9c4460b9af005452f3c2591 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 29 Dec 2021 19:30:49 +0100 Subject: [PATCH] Messages erreurs quand saisie champs trop longs --- app/models/absences.py | 3 --- app/models/entreprises.py | 3 --- app/models/etudiants.py | 3 --- app/models/evaluations.py | 3 --- app/models/events.py | 2 -- app/models/groups.py | 2 -- app/models/notes.py | 1 - app/scodoc/notesdb.py | 5 ++++- app/scodoc/sco_edit_formation.py | 2 ++ app/scodoc/sco_edit_module.py | 12 +++++++----- app/scodoc/sco_edit_ue.py | 2 ++ app/scodoc/sco_formsemestre_edit.py | 3 +++ app/scodoc/sco_groups.py | 6 +++++- app/static/js/groupmgr.js | 4 ++++ app/templates/scolar/affect_groups.html | 2 +- 15 files changed, 28 insertions(+), 25 deletions(-) diff --git a/app/models/absences.py b/app/models/absences.py index 658a390de4..bbff2c5cf2 100644 --- a/app/models/absences.py +++ b/app/models/absences.py @@ -4,9 +4,6 @@ """ from app import db -from app.models import APO_CODE_STR_LEN -from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN class Absence(db.Model): diff --git a/app/models/entreprises.py b/app/models/entreprises.py index bdb5672a8a..c5d05e9340 100644 --- a/app/models/entreprises.py +++ b/app/models/entreprises.py @@ -4,9 +4,6 @@ """ from app import db -from app.models import APO_CODE_STR_LEN -from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN class Entreprise(db.Model): diff --git a/app/models/etudiants.py b/app/models/etudiants.py index 0ae36bd28e..9c8457fac1 100644 --- a/app/models/etudiants.py +++ b/app/models/etudiants.py @@ -8,9 +8,6 @@ from flask import g, url_for from app import db from app import models -from app.models import APO_CODE_STR_LEN -from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN class Identite(db.Model): diff --git a/app/models/evaluations.py b/app/models/evaluations.py index e0733fb77e..4f06fb75f4 100644 --- a/app/models/evaluations.py +++ b/app/models/evaluations.py @@ -4,9 +4,6 @@ """ from app import db -from app.models import APO_CODE_STR_LEN -from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN from app.models import UniteEns import app.scodoc.notesdb as ndb diff --git a/app/models/events.py b/app/models/events.py index 0cdd7e9308..55b34d38d4 100644 --- a/app/models/events.py +++ b/app/models/events.py @@ -4,9 +4,7 @@ """ from app import db -from app.models import APO_CODE_STR_LEN from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN class Scolog(db.Model): diff --git a/app/models/groups.py b/app/models/groups.py index 688744b098..902298ccf1 100644 --- a/app/models/groups.py +++ b/app/models/groups.py @@ -5,9 +5,7 @@ from typing import Any from app import db -from app.models import APO_CODE_STR_LEN from app.models import SHORT_STR_LEN -from app.models import CODE_STR_LEN from app.models import GROUPNAME_STR_LEN diff --git a/app/models/notes.py b/app/models/notes.py index df2766d04a..fa8dc8d106 100644 --- a/app/models/notes.py +++ b/app/models/notes.py @@ -4,7 +4,6 @@ """ from app import db -from app.models import APO_CODE_STR_LEN from app.models import SHORT_STR_LEN from app.models import CODE_STR_LEN diff --git a/app/scodoc/notesdb.py b/app/scodoc/notesdb.py index 5418c3ce28..3de5c281f9 100644 --- a/app/scodoc/notesdb.py +++ b/app/scodoc/notesdb.py @@ -265,8 +265,11 @@ def DBUpdateArgs(cnx, table, vals, where=None, commit=False, convert_empty_to_nu cursor.execute(req, vals) # log('req=%s\n'%req) # log('vals=%s\n'%vals) + except psycopg2.errors.StringDataRightTruncation: + cnx.rollback() + raise ScoValueError("champs de texte trop long !") except: - cnx.commit() # get rid of this transaction + cnx.rollback() # get rid of this transaction log('Exception in DBUpdateArgs:\n\treq="%s"\n\tvals="%s"\n' % (req, vals)) raise # and re-raise exception if commit: diff --git a/app/scodoc/sco_edit_formation.py b/app/scodoc/sco_edit_formation.py index bd01abaecb..4901f494d4 100644 --- a/app/scodoc/sco_edit_formation.py +++ b/app/scodoc/sco_edit_formation.py @@ -33,6 +33,7 @@ from flask import g, url_for, request from app import db from app import log +from app.models import SHORT_STR_LEN from app.models.formations import Formation from app.models.modules import Module @@ -209,6 +210,7 @@ def formation_edit(formation_id=None, create=False): "size": 12, "title": "Code formation", "explanation": "code interne. Toutes les formations partageant le même code sont compatibles (compensation de semestres, capitalisation d'UE). Laisser vide si vous ne savez pas, ou entrer le code d'une formation existante.", + "validator": lambda val, _: len(val) < SHORT_STR_LEN, }, ), ( diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index 24232164a7..ee87f7e72f 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -32,6 +32,7 @@ import flask from flask import url_for, render_template from flask import g, request from flask_login import current_user +from app.models import APO_CODE_STR_LEN from app.models import Matiere, Module, UniteEns import app.scodoc.notesdb as ndb @@ -397,21 +398,21 @@ def module_delete(module_id=None): return flask.redirect(dest_url) -def do_module_edit(val): +def do_module_edit(vals: dict) -> None: "edit a module" from app.scodoc import sco_edit_formation # check - mod = module_list({"module_id": val["module_id"]})[0] + mod = module_list({"module_id": vals["module_id"]})[0] if module_is_locked(mod["module_id"]): # formation verrouillée: empeche de modifier certains champs: protected_fields = ("coefficient", "ue_id", "matiere_id", "semestre_id") for f in protected_fields: - if f in val: - del val[f] + if f in vals: + del vals[f] # edit cnx = ndb.GetDBConnexion() - _moduleEditor.edit(cnx, val) + _moduleEditor.edit(cnx, vals) Formation.query.get(mod["formation_id"]).invalidate_cached_sems() @@ -604,6 +605,7 @@ def module_edit(module_id=None): "title": "Code Apogée", "size": 25, "explanation": "(optionnel) code élément pédagogique Apogée ou liste de codes ELP séparés par des virgules", + "validator": lambda val, _: len(val) < APO_CODE_STR_LEN, }, ), ( diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index cdc83a042a..192ed8d3d9 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -33,6 +33,7 @@ from flask import url_for, render_template from flask import g, request from flask_login import current_user +from app.models import APO_CODE_STR_LEN from app.models import Formation, UniteEns, ModuleImpl, Module import app.scodoc.notesdb as ndb import app.scodoc.sco_utils as scu @@ -324,6 +325,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None): "title": "Code Apogée", "size": 25, "explanation": "(optionnel) code élément pédagogique Apogée ou liste de codes ELP séparés par des virgules", + "validator": lambda val, _: len(val) < APO_CODE_STR_LEN, }, ), ( diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index 2f9308f7e9..bf90fe26a9 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -33,6 +33,7 @@ from flask_login import current_user from app import db from app.auth.models import User +from app.models import APO_CODE_STR_LEN, SHORT_STR_LEN from app.models import ModuleImpl, Evaluation, EvaluationUEPoids import app.scodoc.notesdb as ndb import app.scodoc.sco_utils as scu @@ -359,6 +360,7 @@ def do_formsemestre_createwithmodules(edit=False): mf_manual = { "size": 12, "template": '%(label)s%(elem)s', + "validator": lambda val, _: len(val) < APO_CODE_STR_LEN, } if etapes: mf = { @@ -495,6 +497,7 @@ def do_formsemestre_createwithmodules(edit=False): "size": 8, "title": "Couleur fond des bulletins", "explanation": "version web seulement (ex: #ffeeee)", + "validator": lambda val, _: len(val) < SHORT_STR_LEN, }, ), ( diff --git a/app/scodoc/sco_groups.py b/app/scodoc/sco_groups.py index da46270d67..44aa779711 100644 --- a/app/scodoc/sco_groups.py +++ b/app/scodoc/sco_groups.py @@ -45,6 +45,7 @@ from flask import g, request from flask import url_for, make_response from app import db +from app.models import GROUPNAME_STR_LEN, SHORT_STR_LEN from app.models.groups import Partition import app.scodoc.sco_utils as scu import app.scodoc.notesdb as ndb @@ -870,10 +871,11 @@ def editPartitionForm(formsemestre_id=None): page_title="Partitions...", javascripts=["js/editPartitionForm.js"], ), + # limite à SHORT_STR_LEN r"""