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
7 changed files with 22 additions and 29 deletions
Showing only changes of commit dc4eb63afe - Show all commits

View File

@ -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,

View File

@ -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 (

View File

@ -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

View File

@ -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.

View File

@ -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"]

View File

@ -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)

View File

@ -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):