Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
11 changed files with 28 additions and 24 deletions
Showing only changes of commit 8eedac0f03 - Show all commits

View File

@ -337,7 +337,7 @@ def assiduites_group(with_query: bool = False):
try: try:
etuds = [int(etu) for etu in etuds] etuds = [int(etu) for etu in etuds]
except ValueError: except ValueError:
return json_error(404, "Le champs etudids n'est pas correctement formé") return json_error(404, "Le champ etudids n'est pas correctement formé")
# Vérification que tous les étudiants sont du même département # Vérification que tous les étudiants sont du même département
query = Identite.query.filter(Identite.id.in_(etuds)) query = Identite.query.filter(Identite.id.in_(etuds))

View File

@ -17,7 +17,7 @@ def UEParcoursECTSForm(ue: UniteEns) -> FlaskForm:
pass pass
parcours: list[ApcParcours] = ue.formation.referentiel_competence.parcours parcours: list[ApcParcours] = ue.formation.referentiel_competence.parcours
# Initialise un champs de saisie par parcours # Initialise un champ de saisie par parcours
for parcour in parcours: for parcour in parcours:
ects = ue.get_ects(parcour, only_parcours=True) ects = ue.get_ects(parcour, only_parcours=True)
setattr( setattr(

View File

@ -82,7 +82,7 @@ class ConfigCASForm(FlaskForm):
cas_attribute_id = StringField( cas_attribute_id = StringField(
label="Attribut CAS utilisé comme id (laissez vide pour prendre l'id par défaut)", label="Attribut CAS utilisé comme id (laissez vide pour prendre l'id par défaut)",
description="""Le champs CAS qui sera considéré comme l'id unique des description="""Le champ CAS qui sera considéré comme l'id unique des
comptes utilisateurs.""", comptes utilisateurs.""",
) )

View File

@ -297,7 +297,7 @@ class ScoDocSiteConfig(db.Model):
@classmethod @classmethod
def _get_int_field(cls, name: str, default=None) -> int: def _get_int_field(cls, name: str, default=None) -> int:
"""Valeur d'un champs integer""" """Valeur d'un champ integer"""
cfg = ScoDocSiteConfig.query.filter_by(name=name).first() cfg = ScoDocSiteConfig.query.filter_by(name=name).first()
if (cfg is None) or cfg.value is None: if (cfg is None) or cfg.value is None:
return default return default
@ -311,7 +311,7 @@ class ScoDocSiteConfig(db.Model):
default=None, default=None,
range_values: tuple = (), range_values: tuple = (),
) -> bool: ) -> bool:
"""Set champs integer. True si changement.""" """Set champ integer. True si changement."""
if value != cls._get_int_field(name, default=default): if value != cls._get_int_field(name, default=default):
if not isinstance(value, int) or ( if not isinstance(value, int) or (
range_values and (value < range_values[0]) or (value > range_values[1]) range_values and (value < range_values[0]) or (value > range_values[1])

View File

@ -396,7 +396,7 @@ class TF(object):
self.values[field] = int(self.values[field]) self.values[field] = int(self.values[field])
except ValueError: except ValueError:
msg.append( msg.append(
f"valeur invalide ({self.values[field]}) pour le champs {field}" f"valeur invalide ({self.values[field]}) pour le champ {field}"
) )
ok = False ok = False
elif typ == "float" or typ == "real": elif typ == "float" or typ == "real":
@ -404,7 +404,7 @@ class TF(object):
self.values[field] = float(self.values[field].replace(",", ".")) self.values[field] = float(self.values[field].replace(",", "."))
except ValueError: except ValueError:
msg.append( msg.append(
f"valeur invalide ({self.values[field]}) pour le champs {field}" f"valeur invalide ({self.values[field]}) pour le champ {field}"
) )
ok = False ok = False
if ok: if ok:

View File

@ -265,7 +265,7 @@ def DBUpdateArgs(cnx, table, vals, where=None, commit=False, convert_empty_to_nu
# log('vals=%s\n'%vals) # log('vals=%s\n'%vals)
except psycopg2.errors.StringDataRightTruncation as exc: except psycopg2.errors.StringDataRightTruncation as exc:
cnx.rollback() cnx.rollback()
raise ScoValueError("champs de texte trop long !") from exc raise ScoValueError("champ de texte trop long !") from exc
except: except:
cnx.rollback() # 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)) log('Exception in DBUpdateArgs:\n\treq="%s"\n\tvals="%s"\n' % (req, vals))

View File

@ -166,9 +166,9 @@ def process_field(
values={pprint.pformat(cdict)} values={pprint.pformat(cdict)}
""" """
) )
text = f"""<para><i>format invalide: champs</i> {missing_key} <i>inexistant !</i></para>""" text = f"""<para><i>format invalide: champ</i> {missing_key} <i>inexistant !</i></para>"""
scu.flash_once( scu.flash_once(
f"Attention: format PDF invalide (champs {field}, clef {missing_key})" f"Attention: format PDF invalide (champ {field}, clef {missing_key})"
) )
raise raise
except: # pylint: disable=bare-except except: # pylint: disable=bare-except

View File

@ -494,7 +494,7 @@ def _normalize_apo_fields(infolist):
infolist: liste de dict renvoyés par le portail Apogee infolist: liste de dict renvoyés par le portail Apogee
recode les champs: paiementinscription (-> booleen), datefinalisationinscription (date) recode les champs: paiementinscription (-> booleen), datefinalisationinscription (date)
ajoute le champs 'paiementinscription_str' : 'ok', 'Non' ou '?' ajoute le champ 'paiementinscription_str' : 'ok', 'Non' ou '?'
ajoute les champs 'etape' (= None) et 'prenom' ('') s'ils ne sont pas présents. ajoute les champs 'etape' (= None) et 'prenom' ('') s'ils ne sont pas présents.
ajoute le champ 'civilite_etat_civil' (=''), et 'prenom_etat_civil' (='') si non présent. ajoute le champ 'civilite_etat_civil' (=''), et 'prenom_etat_civil' (='') si non présent.
""" """

View File

@ -342,13 +342,15 @@ def _build_page(
"\n".join(options), "\n".join(options),
"""</select> """</select>
""", """,
"" (
if read_only ""
else f""" if read_only
else f"""
<input type="hidden" name="formsemestre_id" value="{sem['formsemestre_id']}"/> <input type="hidden" name="formsemestre_id" value="{sem['formsemestre_id']}"/>
<input type="submit" name="submitted" value="Appliquer les modifications"/> <input type="submit" name="submitted" value="Appliquer les modifications"/>
&nbsp;<a href="#help">aide</a> &nbsp;<a href="#help">aide</a>
""", """
),
sco_inscr_passage.etuds_select_boxes( sco_inscr_passage.etuds_select_boxes(
etuds_by_cat, etuds_by_cat,
sel_inscrits=False, sel_inscrits=False,
@ -356,9 +358,11 @@ def _build_page(
base_url=base_url, base_url=base_url,
read_only=read_only, read_only=read_only,
), ),
"" (
if read_only ""
else """<p/><input type="submit" name="submitted" value="Appliquer les modifications"/>""", if read_only
else """<p/><input type="submit" name="submitted" value="Appliquer les modifications"/>"""
),
formsemestre_synchro_etuds_help(sem), formsemestre_synchro_etuds_help(sem),
"""</form>""", """</form>""",
] ]
@ -420,9 +424,9 @@ def list_synch(sem, annee_apogee=None):
log(f"XXX key2etud etudid={etudid}, type {type(etudid)}") log(f"XXX key2etud etudid={etudid}, type {type(etudid)}")
etud = etuds[0] etud = etuds[0]
etud["inscrit"] = is_inscrit # checkbox state etud["inscrit"] = is_inscrit # checkbox state
etud[ etud["datefinalisationinscription"] = (
"datefinalisationinscription" date_finalisation_inscr_by_nip.get(key, None)
] = date_finalisation_inscr_by_nip.get(key, None) )
if key in etudsapo_ident: if key in etudsapo_ident:
etud["etape"] = etudsapo_ident[key].get("etape", "") etud["etape"] = etudsapo_ident[key].get("etape", "")
else: else:
@ -855,7 +859,7 @@ def formsemestre_import_etud_admission(
if import_email: if import_email:
if not "mail" in data_apo: if not "mail" in data_apo:
raise ScoValueError( raise ScoValueError(
"la réponse portail n'a pas le champs requis 'mail'" "la réponse portail n'a pas le champ requis 'mail'"
) )
if ( if (
adresse.email != data_apo["mail"] adresse.email != data_apo["mail"]

View File

@ -1018,7 +1018,7 @@ def flash_errors(form):
"""Flashes form errors (version sommaire)""" """Flashes form errors (version sommaire)"""
for field, errors in form.errors.items(): for field, errors in form.errors.items():
flash( flash(
"Erreur: voir le champs %s" % (getattr(form, field).label.text,), "Erreur: voir le champ %s" % (getattr(form, field).label.text,),
"warning", "warning",
) )
# see https://getbootstrap.com/docs/4.0/components/alerts/ # see https://getbootstrap.com/docs/4.0/components/alerts/

View File

@ -49,7 +49,7 @@ table#edt2group tbody tr.active-row {
</div> </div>
{% if ScoDocSiteConfig.get("edt_ics_group_field") %} {% if ScoDocSiteConfig.get("edt_ics_group_field") %}
<div>Les groupes sont extrait du champs <b>{{ScoDocSiteConfig.get("edt_ics_group_field")}}</b> <div>Les groupes sont extrait du champ <b>{{ScoDocSiteConfig.get("edt_ics_group_field")}}</b>
à l'aide de l'expression régulière: <tt>{{ScoDocSiteConfig.get("edt_ics_group_regexp")}}</tt> à l'aide de l'expression régulière: <tt>{{ScoDocSiteConfig.get("edt_ics_group_regexp")}}</tt>
</div> </div>
{% else %} {% else %}