diff --git a/app/but/bulletin_but_pdf.py b/app/but/bulletin_but_pdf.py index 29b9d674..36d11d1e 100644 --- a/app/but/bulletin_but_pdf.py +++ b/app/but/bulletin_but_pdf.py @@ -21,7 +21,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): 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 multi_pages = True # plusieurs pages par bulletins small_fontsize = "8" @@ -78,7 +79,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): "coef": 2 * cm, } 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) rows = [ # Ligne de titres @@ -130,7 +132,9 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): t = { "titre": f"{ue_acronym} - {ue['titre']}", "moyenne": Paragraph( - f"""{moy_ue.get("value", "-") if moy_ue is not None else "-"}""" + f"""{moy_ue.get("value", "-") + if moy_ue is not None else "-" + }""" ), "_css_row_class": "note_bold", "_pdf_row_markup": ["b"], @@ -331,7 +335,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): col_idx = 1 # 1ere col. poids for ue_acro in ue_acros: t[ue_acro] = Paragraph( - f"""{e["poids"].get(ue_acro, "") or ""}""" + f"""{ + e["poids"].get(ue_acro, "") or ""}""" ) t["_pdf_style"].append( ( diff --git a/app/comp/inscr_mod.py b/app/comp/inscr_mod.py index cc03e673..56567f80 100644 --- a/app/comp/inscr_mod.py +++ b/app/comp/inscr_mod.py @@ -3,11 +3,9 @@ """Matrices d'inscription aux modules d'un semestre """ -import numpy as np import pandas as pd from app import db -from app import models # # Le chargement des inscriptions est long: matrice nb_module x nb_etuds diff --git a/app/comp/jury.py b/app/comp/jury.py index 6581a2fb..d9be05b6 100644 --- a/app/comp/jury.py +++ b/app/comp/jury.py @@ -16,7 +16,7 @@ from app.scodoc import sco_codes_parcours class ValidationsSemestre(ResultatsCache): - """ """ + """Les décisions de jury pour un semestre""" _cached_attrs = ( "decisions_jury", diff --git a/app/comp/res_but.py b/app/comp/res_but.py index bc6e7dd6..116ec09b 100644 --- a/app/comp/res_but.py +++ b/app/comp/res_but.py @@ -19,7 +19,6 @@ from app.models.moduleimpls import ModuleImpl from app.models.ues import UniteEns from app.scodoc.sco_codes_parcours import UE_SPORT from app.scodoc import sco_preferences -import app.scodoc.sco_utils as scu class ResultatsSemestreBUT(NotesTableCompat): diff --git a/app/comp/res_cache.py b/app/comp/res_cache.py index 47c40b7e..890526b9 100644 --- a/app/comp/res_cache.py +++ b/app/comp/res_cache.py @@ -11,6 +11,14 @@ from app.models import FormSemestre 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 def __init__(self, formsemestre: FormSemestre, cache_class=None): diff --git a/app/comp/res_compat.py b/app/comp/res_compat.py index 5d7b80c2..c18f549e 100644 --- a/app/comp/res_compat.py +++ b/app/comp/res_compat.py @@ -131,8 +131,9 @@ class NotesTableCompat(ResultatsSemestre): Markup( f"""Calcul moyenne générale impossible: ECTS des UE manquants !
(dans {' ,'.join([ue.acronyme for ue in ue_sans_ects])} - de la formation: {formation.get_titre_version()}) + de la formation: {formation.get_titre_version()}) ) """ ), @@ -146,7 +147,7 @@ class NotesTableCompat(ResultatsSemestre): """ modimpls_dict = [] 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() # compat ScoDoc < 9.2: ajoute matières d["mat"] = modimpl.module.matiere.to_dict() @@ -285,7 +286,8 @@ class NotesTableCompat(ResultatsSemestre): def get_etud_ects_pot(self, etudid: int) -> dict: """ 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) 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é) } - 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) def get_etud_rang_group(self, etudid: int, group_id: int): diff --git a/app/decorators.py b/app/decorators.py index 220ece56..d6c6ed23 100644 --- a/app/decorators.py +++ b/app/decorators.py @@ -1,14 +1,11 @@ # -*- coding: UTF-8 -* """Decorators for permissions, roles and ScoDoc7 Zope compatibility """ -import functools from functools import wraps import inspect -import types -import logging + import werkzeug -from werkzeug.exceptions import BadRequest import flask from flask import g, current_app, request from flask import abort, url_for, redirect diff --git a/app/email.py b/app/email.py index 1fc7632b..ebd3ae0d 100644 --- a/app/email.py +++ b/app/email.py @@ -15,6 +15,7 @@ from app.scodoc import sco_preferences def send_async_email(app, msg): + "Send an email, async" with app.app_context(): mail.send(msg) diff --git a/app/forms/main/config_apo.py b/app/forms/main/config_apo.py index 6ebb6a8b..facbf85f 100644 --- a/app/forms/main/config_apo.py +++ b/app/forms/main/config_apo.py @@ -29,17 +29,13 @@ Formulaires configuration Exports Apogée (codes) """ -from flask import flash, url_for, redirect, render_template from flask_wtf import FlaskForm from wtforms import SubmitField, validators from wtforms.fields.simple import StringField -from app import models -from app.models import ScoDocSiteConfig from app.models import SHORT_STR_LEN from app.scodoc import sco_codes_parcours -from app.scodoc import sco_utils as scu def _build_code_field(code): @@ -61,6 +57,7 @@ def _build_code_field(code): class CodesDecisionsForm(FlaskForm): + "Formulaire code décisions Apogée" ADC = _build_code_field("ADC") ADJ = _build_code_field("ADJ") ADM = _build_code_field("ADM") diff --git a/app/forms/main/config_logos.py b/app/forms/main/config_logos.py index c8998327..db69ae35 100644 --- a/app/forms/main/config_logos.py +++ b/app/forms/main/config_logos.py @@ -47,8 +47,6 @@ from app.scodoc.sco_config_actions import ( LogoInsert, ) - -from app.scodoc import sco_utils as scu from app.scodoc.sco_logos import find_logo diff --git a/app/forms/main/create_dept.py b/app/forms/main/create_dept.py index cd053405..c0e18eff 100644 --- a/app/forms/main/create_dept.py +++ b/app/forms/main/create_dept.py @@ -29,7 +29,6 @@ Formulaires création département """ -from flask import flash, url_for, redirect, render_template from flask_wtf import FlaskForm from wtforms import SubmitField, validators from wtforms.fields.simple import StringField, BooleanField diff --git a/app/pe/pe_view.py b/app/pe/pe_view.py index 558b4bf8..ba129f7b 100644 --- a/app/pe/pe_view.py +++ b/app/pe/pe_view.py @@ -51,27 +51,34 @@ from app.pe import pe_avislatex def _pe_view_sem_recap_form(formsemestre_id): H = [ html_sco_header.sco_header(page_title="Avis de poursuite d'études"), - """

Génération des avis de poursuites d'études

+ f"""

Génération des avis de poursuites d'études

- 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.
- De nombreux aspects sont paramétrables: - + De nombreux aspects sont paramétrables: + voir la documentation.

-
+
- Les templates sont généralement installés sur le serveur ou dans le paramétrage de ScoDoc.
- Au besoin, vous pouvez spécifier ici votre propre fichier de template (un_avis.tex): -
Template:
-
Pied de page:
+ Les templates sont généralement installés sur le serveur ou dans le + paramétrage de ScoDoc. +
+ Au besoin, vous pouvez spécifier ici votre propre fichier de template + (un_avis.tex): +
Template: + +
+
Pied de page: + +
- """.format( - formsemestre_id=formsemestre_id - ), + """, ] return "\n".join(H) + html_sco_header.sco_footer()