Some code cleaning

This commit is contained in:
Emmanuel Viennet 2022-04-02 10:56:10 +02:00
parent 1e5ef96f8f
commit ae0baf8c1a
12 changed files with 50 additions and 36 deletions

View File

@ -21,7 +21,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
self.infos est le dict issu de BulletinBUT.bulletin_etud_complet() self.infos est le dict issu de BulletinBUT.bulletin_etud_complet()
""" """
list_in_menu = False # spécialisation du BulletinGeneratorStandard, ne pas présenter à l'utilisateur # spécialisation du BulletinGeneratorStandard, ne pas présenter à l'utilisateur:
list_in_menu = False
scale_table_in_page = False # pas de mise à l'échelle pleine page auto scale_table_in_page = False # pas de mise à l'échelle pleine page auto
multi_pages = True # plusieurs pages par bulletins multi_pages = True # plusieurs pages par bulletins
small_fontsize = "8" small_fontsize = "8"
@ -78,7 +79,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
"coef": 2 * cm, "coef": 2 * cm,
} }
title_bg = tuple(x / 255.0 for x in title_bg) title_bg = tuple(x / 255.0 for x in title_bg)
nota_bene = "La moyenne des ressources et SAÉs dans une UE dépend des poids donnés aux évaluations." nota_bene = """La moyenne des ressources et SAÉs dans une UE
dépend des poids donnés aux évaluations."""
# elems pour générer table avec gen_table (liste de dicts) # elems pour générer table avec gen_table (liste de dicts)
rows = [ rows = [
# Ligne de titres # Ligne de titres
@ -130,7 +132,9 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
t = { t = {
"titre": f"{ue_acronym} - {ue['titre']}", "titre": f"{ue_acronym} - {ue['titre']}",
"moyenne": Paragraph( "moyenne": Paragraph(
f"""<para align=right><b>{moy_ue.get("value", "-") if moy_ue is not None else "-"}</b></para>""" f"""<para align=right><b>{moy_ue.get("value", "-")
if moy_ue is not None else "-"
}</b></para>"""
), ),
"_css_row_class": "note_bold", "_css_row_class": "note_bold",
"_pdf_row_markup": ["b"], "_pdf_row_markup": ["b"],
@ -331,7 +335,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard):
col_idx = 1 # 1ere col. poids col_idx = 1 # 1ere col. poids
for ue_acro in ue_acros: for ue_acro in ue_acros:
t[ue_acro] = Paragraph( t[ue_acro] = Paragraph(
f"""<para align=right fontSize={self.small_fontsize}><i>{e["poids"].get(ue_acro, "") or ""}</i></para>""" f"""<para align=right fontSize={self.small_fontsize}><i>{
e["poids"].get(ue_acro, "") or ""}</i></para>"""
) )
t["_pdf_style"].append( t["_pdf_style"].append(
( (

View File

@ -3,11 +3,9 @@
"""Matrices d'inscription aux modules d'un semestre """Matrices d'inscription aux modules d'un semestre
""" """
import numpy as np
import pandas as pd import pandas as pd
from app import db from app import db
from app import models
# #
# Le chargement des inscriptions est long: matrice nb_module x nb_etuds # Le chargement des inscriptions est long: matrice nb_module x nb_etuds

View File

@ -16,7 +16,7 @@ from app.scodoc import sco_codes_parcours
class ValidationsSemestre(ResultatsCache): class ValidationsSemestre(ResultatsCache):
""" """ """Les décisions de jury pour un semestre"""
_cached_attrs = ( _cached_attrs = (
"decisions_jury", "decisions_jury",

View File

@ -19,7 +19,6 @@ from app.models.moduleimpls import ModuleImpl
from app.models.ues import UniteEns from app.models.ues import UniteEns
from app.scodoc.sco_codes_parcours import UE_SPORT from app.scodoc.sco_codes_parcours import UE_SPORT
from app.scodoc import sco_preferences from app.scodoc import sco_preferences
import app.scodoc.sco_utils as scu
class ResultatsSemestreBUT(NotesTableCompat): class ResultatsSemestreBUT(NotesTableCompat):

View File

@ -11,6 +11,14 @@ from app.models import FormSemestre
class ResultatsCache: class ResultatsCache:
"""Résultats cachés (via redis)
L'attribut _cached_attrs donne la liste des noms des attributs à cacher
(doivent être sérialisables facilement, se limiter à des types simples)
store() enregistre les attributs dans le cache, et
load_cached() les recharge.
"""
_cached_attrs = () # virtual _cached_attrs = () # virtual
def __init__(self, formsemestre: FormSemestre, cache_class=None): def __init__(self, formsemestre: FormSemestre, cache_class=None):

View File

@ -131,8 +131,9 @@ class NotesTableCompat(ResultatsSemestre):
Markup( Markup(
f"""Calcul moyenne générale impossible: ECTS des UE manquants !<br> f"""Calcul moyenne générale impossible: ECTS des UE manquants !<br>
(dans {' ,'.join([ue.acronyme for ue in ue_sans_ects])} (dans {' ,'.join([ue.acronyme for ue in ue_sans_ects])}
de la formation: <a href="{url_for("notes.ue_table", de la formation: <a href="{url_for("notes.ue_table",
scodoc_dept=g.scodoc_dept, formation_id=formation.id)}">{formation.get_titre_version()}</a>) scodoc_dept=g.scodoc_dept, formation_id=formation.id)
}">{formation.get_titre_version()}</a>)
) )
""" """
), ),
@ -146,7 +147,7 @@ class NotesTableCompat(ResultatsSemestre):
""" """
modimpls_dict = [] modimpls_dict = []
for modimpl in self.formsemestre.modimpls_sorted: for modimpl in self.formsemestre.modimpls_sorted:
if ue_id == None or modimpl.module.ue.id == ue_id: if (ue_id is None) or (modimpl.module.ue.id == ue_id):
d = modimpl.to_dict() d = modimpl.to_dict()
# compat ScoDoc < 9.2: ajoute matières # compat ScoDoc < 9.2: ajoute matières
d["mat"] = modimpl.module.matiere.to_dict() d["mat"] = modimpl.module.matiere.to_dict()
@ -285,7 +286,8 @@ class NotesTableCompat(ResultatsSemestre):
def get_etud_ects_pot(self, etudid: int) -> dict: def get_etud_ects_pot(self, etudid: int) -> dict:
""" """
Un dict avec les champs Un dict avec les champs
ects_pot : (float) nb de crédits ECTS qui seraient validés (sous réserve de validation par le jury) ects_pot : (float) nb de crédits ECTS qui seraient validés
(sous réserve de validation par le jury)
ects_pot_fond: (float) nb d'ECTS issus d'UE fondamentales (non électives) ects_pot_fond: (float) nb d'ECTS issus d'UE fondamentales (non électives)
Ce sont les ECTS des UE au dessus de la barre (10/20 en principe), avant le jury (donc non Ce sont les ECTS des UE au dessus de la barre (10/20 en principe), avant le jury (donc non
@ -307,7 +309,10 @@ class NotesTableCompat(ResultatsSemestre):
"ects_pot_fond": 0.0, # not implemented (anciennemment pour école ingé) "ects_pot_fond": 0.0, # not implemented (anciennemment pour école ingé)
} }
def get_etud_rang(self, etudid: int): def get_etud_rang(self, etudid: int) -> str:
"""Le rang (classement) de l'étudiant dans le semestre.
Result: "13" ou "12 ex"
"""
return self.etud_moy_gen_ranks.get(etudid, 99999) return self.etud_moy_gen_ranks.get(etudid, 99999)
def get_etud_rang_group(self, etudid: int, group_id: int): def get_etud_rang_group(self, etudid: int, group_id: int):

View File

@ -1,14 +1,11 @@
# -*- coding: UTF-8 -* # -*- coding: UTF-8 -*
"""Decorators for permissions, roles and ScoDoc7 Zope compatibility """Decorators for permissions, roles and ScoDoc7 Zope compatibility
""" """
import functools
from functools import wraps from functools import wraps
import inspect import inspect
import types
import logging
import werkzeug import werkzeug
from werkzeug.exceptions import BadRequest
import flask import flask
from flask import g, current_app, request from flask import g, current_app, request
from flask import abort, url_for, redirect from flask import abort, url_for, redirect

View File

@ -15,6 +15,7 @@ from app.scodoc import sco_preferences
def send_async_email(app, msg): def send_async_email(app, msg):
"Send an email, async"
with app.app_context(): with app.app_context():
mail.send(msg) mail.send(msg)

View File

@ -29,17 +29,13 @@
Formulaires configuration Exports Apogée (codes) Formulaires configuration Exports Apogée (codes)
""" """
from flask import flash, url_for, redirect, render_template
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SubmitField, validators from wtforms import SubmitField, validators
from wtforms.fields.simple import StringField from wtforms.fields.simple import StringField
from app import models
from app.models import ScoDocSiteConfig
from app.models import SHORT_STR_LEN from app.models import SHORT_STR_LEN
from app.scodoc import sco_codes_parcours from app.scodoc import sco_codes_parcours
from app.scodoc import sco_utils as scu
def _build_code_field(code): def _build_code_field(code):
@ -61,6 +57,7 @@ def _build_code_field(code):
class CodesDecisionsForm(FlaskForm): class CodesDecisionsForm(FlaskForm):
"Formulaire code décisions Apogée"
ADC = _build_code_field("ADC") ADC = _build_code_field("ADC")
ADJ = _build_code_field("ADJ") ADJ = _build_code_field("ADJ")
ADM = _build_code_field("ADM") ADM = _build_code_field("ADM")

View File

@ -47,8 +47,6 @@ from app.scodoc.sco_config_actions import (
LogoInsert, LogoInsert,
) )
from app.scodoc import sco_utils as scu
from app.scodoc.sco_logos import find_logo from app.scodoc.sco_logos import find_logo

View File

@ -29,7 +29,6 @@
Formulaires création département Formulaires création département
""" """
from flask import flash, url_for, redirect, render_template
from flask_wtf import FlaskForm from flask_wtf import FlaskForm
from wtforms import SubmitField, validators from wtforms import SubmitField, validators
from wtforms.fields.simple import StringField, BooleanField from wtforms.fields.simple import StringField, BooleanField

View File

@ -51,27 +51,34 @@ from app.pe import pe_avislatex
def _pe_view_sem_recap_form(formsemestre_id): def _pe_view_sem_recap_form(formsemestre_id):
H = [ H = [
html_sco_header.sco_header(page_title="Avis de poursuite d'études"), html_sco_header.sco_header(page_title="Avis de poursuite d'études"),
"""<h2 class="formsemestre">Génération des avis de poursuites d'études</h2> f"""<h2 class="formsemestre">Génération des avis de poursuites d'études</h2>
<p class="help"> <p class="help">
Cette fonction génère un ensemble de fichiers permettant d'éditer des avis de poursuites d'études. Cette fonction génère un ensemble de fichiers permettant d'éditer des avis de
poursuites d'études.
<br/> <br/>
De nombreux aspects sont paramétrables: De nombreux aspects sont paramétrables:
<a href="https://scodoc.org/AvisPoursuiteEtudes" target="_blank" rel="noopener noreferrer"> <a href="https://scodoc.org/AvisPoursuiteEtudes" target="_blank" rel="noopener">
voir la documentation</a>. voir la documentation</a>.
</p> </p>
<form method="post" action="pe_view_sem_recap" id="pe_view_sem_recap_form" enctype="multipart/form-data"> <form method="post" action="pe_view_sem_recap" id="pe_view_sem_recap_form"
enctype="multipart/form-data">
<div class="pe_template_up"> <div class="pe_template_up">
Les templates sont généralement installés sur le serveur ou dans le paramétrage de ScoDoc.<br/> Les templates sont généralement installés sur le serveur ou dans le
Au besoin, vous pouvez spécifier ici votre propre fichier de template (<tt>un_avis.tex</tt>): paramétrage de ScoDoc.
<div class="pe_template_upb">Template: <input type="file" size="30" name="avis_tmpl_file"/></div> <br/>
<div class="pe_template_upb">Pied de page: <input type="file" size="30" name="footer_tmpl_file"/></div> Au besoin, vous pouvez spécifier ici votre propre fichier de template
(<tt>un_avis.tex</tt>):
<div class="pe_template_upb">Template:
<input type="file" size="30" name="avis_tmpl_file"/>
</div>
<div class="pe_template_upb">Pied de page:
<input type="file" size="30" name="footer_tmpl_file"/>
</div>
</div> </div>
<input type="submit" value="Générer les documents"/> <input type="submit" value="Générer les documents"/>
<input type="hidden" name="formsemestre_id" value="{formsemestre_id}"> <input type="hidden" name="formsemestre_id" value="{formsemestre_id}">
</form> </form>
""".format( """,
formsemestre_id=formsemestre_id
),
] ]
return "\n".join(H) + html_sco_header.sco_footer() return "\n".join(H) + html_sco_header.sco_footer()