Code source de parcoursup.ordreappel.VoeuClasse

#!/usr/bin/env python3
# -*- coding: utf-8; mode: python -*-
""" VoeuClasse, pour https://github.com/Naereen/ParcourSup.py.

- Auteurs : Lilian Besson, Bastien Trotobas et al, (C) 2018.
- Adresse : https://github.com/Naereen/ParcourSup.py
- Licence : MIT License (http://lbesson.mit-license.org).
"""
__author__ = "Lilian Besson, Bastien Trotobas et al"
__version__ = "0.0.1"

from functools import total_ordering
from enum import Enum


#: Les différents types de candidats
TypeCandidat = Enum('TypeCandidat', [
    'BoursierResident',
    'BoursierNonResident',
    'NonBoursierResident',
    'NonBoursierNonResident',
])


[docs]def typeCandidat_vers_str(typeCandidat: TypeCandidat) -> str: return str(typeCandidat).replace('TypeCandidat.', '')
[docs]def typeCandidat_si_Boursier_etou_Resident(estBoursier: bool, estResident: bool) -> TypeCandidat: """ Donne le type de candidat selon qu'il/elle soit boursier-e et/ou résident-e. """ if estBoursier and estResident: return TypeCandidat.BoursierResident elif estBoursier and not estResident: return TypeCandidat.BoursierNonResident elif not estBoursier and estResident: return TypeCandidat.NonBoursierResident elif not estBoursier and not estResident: return TypeCandidat.NonBoursierNonResident raise ValueError(f"Impossible d'avoir ce cas là dans typeCandidat_si_Boursier_etou_Resident({estBoursier}, {estResident})")
[docs]@total_ordering class VoeuClasse(object): """ Classe représentant un vœu d'un candidat."""
[docs] def __init__(self, G_CN_COD: int, rang: int, estBoursier: bool, estResident: bool): assert G_CN_COD > 0, f"Erreur : {self.__class__.__name__} le paramètre G_CN_COD doit être > 0, et pas {G_CN_COD}..." # DEBUG self.G_CN_COD = G_CN_COD #: G_CN_COD assert rang > 0, f"Erreur : {self.__class__.__name__} le paramètre rang doit être > 0, et pas {rang}..." # DEBUG self.rang = rang #: rang self.typeCandidat = typeCandidat_si_Boursier_etou_Resident(estBoursier, estResident) #: typeCandidat
[docs] def __repr__(self) -> str: return f"{self.__class__.__name__}({self.G_CN_COD}, {self.rang}, {self.estBoursier()}, {self.estResident()})"
[docs] def estBoursier(self) -> bool: """ Pour savoir si le candidat est boursier-e.""" return self.typeCandidat == TypeCandidat.BoursierResident or self.typeCandidat == TypeCandidat.BoursierNonResident
[docs] def estResident(self) -> bool: """ Pour savoir si le candidat est résident-e.""" return self.typeCandidat == TypeCandidat.BoursierResident or self.typeCandidat == TypeCandidat.NonBoursierResident
# --- Méthodes pour comparer les objets, les autres sont automatiques avec @total_ordering
[docs] def __lt__(self, voeu) -> bool: """ Comparateur permettant de trier les vœux par ordre du groupe de classement.""" return self.rang > voeu.rang
[docs] def __eq__(self, voeu) -> bool: """ Comparateur permettant de trier les vœux par ordre du groupe de classement.""" return (self.rang == voeu.rang) and (self.G_CN_COD == voeu.G_CN_COD) and (self.typeCandidat == voeu.typeCandidat)