From dc4eb63afe3cfef4ecfd4321d027e15f65621d44 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 12 Sep 2023 19:57:39 +0200 Subject: [PATCH] Fix some type annotations --- app/but/jury_but.py | 3 +-- app/but/rcue.py | 3 +-- app/models/assiduites.py | 6 +++--- app/scodoc/sco_archives.py | 3 +-- app/scodoc/sco_assiduites.py | 25 +++++++++++-------------- app/views/assiduites.py | 8 ++++---- tools/migrate_abs_to_assiduites.py | 3 +-- 7 files changed, 22 insertions(+), 29 deletions(-) diff --git a/app/but/jury_but.py b/app/but/jury_but.py index 4eb7525f1..22cbc070a 100644 --- a/app/but/jury_but.py +++ b/app/but/jury_but.py @@ -61,7 +61,6 @@ DecisionsProposeesUE: décisions de jury sur une UE du BUT from datetime import datetime import html import re -from typing import Union import numpy as np from flask import flash, g, url_for @@ -150,7 +149,7 @@ class DecisionsProposees: def __init__( self, etud: Identite = None, - code: Union[str, list[str]] = None, + code: str | list[str] | None = None, explanation="", code_valide=None, include_communs=True, diff --git a/app/but/rcue.py b/app/but/rcue.py index b7cf2711e..5a5fce3ea 100644 --- a/app/but/rcue.py +++ b/app/but/rcue.py @@ -6,7 +6,6 @@ """Jury BUT: un RCUE, ou Regroupe Cohérent d'UEs """ -from typing import Union from flask_sqlalchemy.query import Query from app.comp.res_but import ResultatsSemestreBUT @@ -205,7 +204,7 @@ class RegroupementCoherentUE: self.moy_rcue > codes_cursus.BUT_BARRE_RCUE ) - def code_valide(self) -> Union[ApcValidationRCUE, None]: + def code_valide(self) -> ApcValidationRCUE | None: "Si ce RCUE est ADM, CMP ou ADJ, la validation. Sinon, None" validation = self.query_validations().first() if (validation is not None) and ( diff --git a/app/models/assiduites.py b/app/models/assiduites.py index 994a88e07..ca787e980 100644 --- a/app/models/assiduites.py +++ b/app/models/assiduites.py @@ -123,7 +123,7 @@ class Assiduite(db.Model): user_id: int = None, est_just: bool = False, external_data: dict = None, - ) -> object or int: + ) -> "Assiduite": """Créer une nouvelle assiduité pour l'étudiant""" # Vérification de non duplication des périodes assiduites: Query = etud.assiduites @@ -285,7 +285,7 @@ class Justificatif(db.Model): entry_date: datetime = None, user_id: int = None, external_data: dict = None, - ) -> object or int: + ) -> "Justificatif": """Créer un nouveau justificatif pour l'étudiant""" nouv_justificatif = Justificatif( date_debut=date_debut, @@ -313,7 +313,7 @@ def is_period_conflicting( date_debut: datetime, date_fin: datetime, collection: Query, - collection_cls: Assiduite or Justificatif, + collection_cls: Assiduite | Justificatif, ) -> bool: """ Vérifie si une date n'entre pas en collision diff --git a/app/scodoc/sco_archives.py b/app/scodoc/sco_archives.py index 51bba4b20..9c05c6535 100644 --- a/app/scodoc/sco_archives.py +++ b/app/scodoc/sco_archives.py @@ -47,7 +47,6 @@ nommé _description.txt qui est une description (humaine, format libre) de l'archive. """ -from typing import Union import datetime import glob import json @@ -253,7 +252,7 @@ class BaseArchiver: self, archive_id: str, filename: str, - data: Union[str, bytes], + data: str | bytes, dept_id: int = None, ): """Store data in archive, under given filename. diff --git a/app/scodoc/sco_assiduites.py b/app/scodoc/sco_assiduites.py index 1ad5332d4..c80a5f55e 100644 --- a/app/scodoc/sco_assiduites.py +++ b/app/scodoc/sco_assiduites.py @@ -141,12 +141,9 @@ class CountCalculator: self.hours += finish_hours.total_seconds() / 3600 self.hours += self.hour_per_day - (start_hours.total_seconds() / 3600) - def compute_assiduites(self, assiduites: Query or list): + def compute_assiduites(self, assiduites: Query | list): """Calcule les métriques pour la collection d'assiduité donnée""" assi: Assiduite - assiduites: list[Assiduite] = ( - assiduites.all() if isinstance(assiduites, Query) else assiduites - ) for assi in assiduites: self.count += 1 delta: timedelta = assi.date_fin - assi.date_debut @@ -167,7 +164,7 @@ class CountCalculator: self.hours += delta.total_seconds() / 3600 - def to_dict(self) -> dict[str, int or float]: + def to_dict(self) -> dict[str, int | float]: """Retourne les métriques sous la forme d'un dictionnaire""" return { "compte": self.count, @@ -179,7 +176,7 @@ class CountCalculator: def get_assiduites_stats( assiduites: Query, metric: str = "all", filtered: dict[str, object] = None -) -> dict[str, int or float]: +) -> dict[str, int | float]: """Compte les assiduités en fonction des filtres""" if filtered is not None: @@ -276,7 +273,7 @@ def filter_assiduites_by_est_just(assiduites: Assiduite, est_just: bool) -> Quer def filter_by_user_id( - collection: Assiduite or Justificatif, + collection: Assiduite | Justificatif, user_id: int, ) -> Query: """ @@ -286,8 +283,8 @@ def filter_by_user_id( def filter_by_date( - collection: Assiduite or Justificatif, - collection_cls: Assiduite or Justificatif, + collection: Assiduite | Justificatif, + collection_cls: Assiduite | Justificatif, date_deb: datetime = None, date_fin: datetime = None, strict: bool = False, @@ -320,7 +317,7 @@ def filter_justificatifs_by_etat(justificatifs: Query, etat: str) -> Query: return justificatifs.filter(Justificatif.etat.in_(etats)) -def filter_by_module_impl(assiduites: Assiduite, module_impl_id: int or None) -> Query: +def filter_by_module_impl(assiduites: Assiduite, module_impl_id: int | None) -> Query: """ Filtrage d'une collection d'assiduites en fonction de l'ID du module_impl """ @@ -328,8 +325,8 @@ def filter_by_module_impl(assiduites: Assiduite, module_impl_id: int or None) -> def filter_by_formsemestre( - collection_query: Assiduite or Justificatif, - collection_class: Assiduite or Justificatif, + collection_query: Assiduite | Justificatif, + collection_class: Assiduite | Justificatif, formsemestre: FormSemestre, ) -> Query: """ @@ -358,7 +355,7 @@ def filter_by_formsemestre( return collection_result.filter(collection_class.date_fin <= form_date_fin) -def justifies(justi: Justificatif, obj: bool = False) -> list[int] or Query: +def justifies(justi: Justificatif, obj: bool = False) -> list[int] | Query: """ Retourne la liste des assiduite_id qui sont justifié par la justification Une assiduité est justifiée si elle est COMPLETEMENT ou PARTIELLEMENT @@ -597,7 +594,7 @@ def invalidate_assiduites_etud_date(etudid, date: datetime): invalidate_assiduites_count(etudid, sem) -def simple_invalidate_cache(obj: dict, etudid: str or int = None): +def simple_invalidate_cache(obj: dict, etudid: str | int = None): """Invalide le cache de l'étudiant et du / des semestres""" date_debut = ( obj["date_debut"] diff --git a/app/views/assiduites.py b/app/views/assiduites.py index c40345c9b..a2e5a3b1d 100644 --- a/app/views/assiduites.py +++ b/app/views/assiduites.py @@ -109,13 +109,13 @@ class HTMLStringElement(HTMLElement): class HTMLBuilder: - def __init__(self, *content: HTMLElement or str) -> None: - self.content: list[HTMLElement or str] = list(content) + def __init__(self, *content: HTMLElement | str) -> None: + self.content: list[HTMLElement | str] = list(content) - def add(self, *element: HTMLElement or str): + def add(self, *element: HTMLElement | str): self.content.extend(element) - def remove(self, element: HTMLElement or str): + def remove(self, element: HTMLElement | str): if element in self.content: self.content.remove(element) diff --git a/tools/migrate_abs_to_assiduites.py b/tools/migrate_abs_to_assiduites.py index 68e2cab98..87c799dff 100644 --- a/tools/migrate_abs_to_assiduites.py +++ b/tools/migrate_abs_to_assiduites.py @@ -152,7 +152,6 @@ class _Merger: def export(self): """Génère un nouvel objet Assiduité ou Justificatif""" - obj: Assiduite or Justificatif = None if self.est_abs: _glob.COMPTE[0] += 1 self._to_assi() @@ -167,7 +166,7 @@ def _assi_in_justifs(deb, fin, etudid): class _Statistics: def __init__(self) -> None: - self.object: dict[str, dict or int] = {"total": 0} + self.object: dict[str, dict | int] = {"total": 0} self.year: int = None def __set_year(self, year: int):