forked from ScoDoc/ScoDoc
Update opolka/ScoDoc from ScoDoc/ScoDoc #2
@ -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,
|
||||
|
@ -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 (
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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"]
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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):
|
||||
|
Loading…
Reference in New Issue
Block a user