New-Style Classes

This commit is contained in:
Emmanuel Viennet 2021-07-09 23:31:16 +02:00
parent 510e6dc9c7
commit 8d8b8a3ae9
35 changed files with 68 additions and 50 deletions

View File

@ -113,7 +113,7 @@ def TrivialFormulator(
return res, form, t.result return res, form, t.result
class TF: class TF(object):
def __init__( def __init__(
self, self,
form_url, form_url,

View File

@ -92,7 +92,7 @@ def go_dept(app, dept, verbose=True):
raise ValueError("dep %s not found" % dept) raise ValueError("dep %s not found" % dept)
class FakeUser: class FakeUser(object):
def __init__(self, name): def __init__(self, name):
self.name = name self.name = name
@ -106,7 +106,7 @@ class FakeUser:
return True return True
class DummyResponse: class DummyResponse(object):
"""Emulation vide de Reponse http Zope""" """Emulation vide de Reponse http Zope"""
def __init__(self): def __init__(self):
@ -120,7 +120,7 @@ class DummyResponse:
self.redirected = url self.redirected = url
class DummyRequest: class DummyRequest(object):
"""Emulation vide de Request Zope""" """Emulation vide de Request Zope"""
def __init__(self): def __init__(self):

View File

@ -72,7 +72,7 @@ def mark_paras(L, tags):
return L return L
class DEFAULT_TABLE_PREFERENCES: class DEFAULT_TABLE_PREFERENCES(object):
"""Default preferences for tables created without preferences argument""" """Default preferences for tables created without preferences argument"""
values = { values = {
@ -85,7 +85,7 @@ class DEFAULT_TABLE_PREFERENCES:
return self.values[k] return self.values[k]
class GenTable: class GenTable(object):
"""Simple 2D tables with export to HTML, PDF, Excel, CSV. """Simple 2D tables with export to HTML, PDF, Excel, CSV.
Can be sub-classed to generate fancy formats. Can be sub-classed to generate fancy formats.
""" """
@ -679,7 +679,7 @@ class GenTable:
# ----- # -----
class SeqGenTable: class SeqGenTable(object):
"""Sequence de GenTable: permet de générer un classeur excel avec un tab par table. """Sequence de GenTable: permet de générer un classeur excel avec un tab par table.
L'ordre des tabs est conservé (1er tab == 1ere table ajoutée) L'ordre des tabs est conservé (1er tab == 1ere table ajoutée)
""" """

View File

@ -20,7 +20,7 @@ DEFAULT_LOG_DIR = "/tmp" # clients should call set_log_directory to change this
ALARM_DESTINATION = "emmanuel.viennet@univ-paris13.fr" # XXX a mettre en preference ALARM_DESTINATION = "emmanuel.viennet@univ-paris13.fr" # XXX a mettre en preference
class _logguer: class _logguer(object):
def __init__(self): def __init__(self):
self.file = None self.file = None
self.directory = None self.directory = None

View File

@ -153,7 +153,7 @@ def comp_etud_sum_coef_modules_ue(context, formsemestre_id, etudid, ue_id):
return s return s
class NotesTable: class NotesTable(object):
"""Une NotesTable représente un tableau de notes pour un semestre de formation. """Une NotesTable représente un tableau de notes pour un semestre de formation.
Les colonnes sont des modules. Les colonnes sont des modules.
Les lignes des étudiants. Les lignes des étudiants.

View File

@ -253,7 +253,7 @@ def DBDelete(cnx, table, colid, val, commit=False):
# REQN = 0 # REQN = 0
class EditableTable: class EditableTable(object):
"""--- generic class: SQL table with create/edit/list/delete""" """--- generic class: SQL table with create/edit/list/delete"""
def __init__( def __init__(

View File

@ -85,7 +85,7 @@ def comp_nom_semestre_dans_parcours(context, sem):
# ---------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------
class JuryPE: class JuryPE(object):
"""Classe memorisant toutes les informations necessaires pour etablir un jury de PE. Modele """Classe memorisant toutes les informations necessaires pour etablir un jury de PE. Modele
base sur NotesTable base sur NotesTable

View File

@ -42,7 +42,7 @@ import datetime
from app.scodoc import notes_table from app.scodoc import notes_table
class TableTag: class TableTag(object):
""" """
Classe mémorisant les moyennes des étudiants à différents tag et permettant de calculer les rangs et les statistiques : Classe mémorisant les moyennes des étudiants à différents tag et permettant de calculer les rangs et les statistiques :
- nom : Nom représentatif des données de la Table - nom : Nom représentatif des données de la Table

View File

@ -84,7 +84,7 @@ def MonthNbDays(month, year):
return 30 return 30
class ddmmyyyy: class ddmmyyyy(object):
"""immutable dates""" """immutable dates"""
def __init__(self, date=None, fmt="ddmmyyyy", work_saturday=False): def __init__(self, date=None, fmt="ddmmyyyy", work_saturday=False):
@ -987,7 +987,7 @@ def MonthTableBody(
# absences à une date donnée). # absences à une date donnée).
# #
# -------------------------------------------------------------------- # --------------------------------------------------------------------
class CAbsSemEtud: class CAbsSemEtud(object):
"""Comptes d'absences d'un etudiant dans un semestre""" """Comptes d'absences d'un etudiant dans un semestre"""
def __init__(self, context, sem, etudid): def __init__(self, context, sem, etudid):

View File

@ -220,7 +220,7 @@ class DictCol(dict):
pass pass
class ApoElt: class ApoElt(object):
"""Definition d'un Element Apogee """Definition d'un Element Apogee
sur plusieurs colonnes du fichier CSV sur plusieurs colonnes du fichier CSV
""" """
@ -248,7 +248,7 @@ class ApoElt:
return "ApoElt(code='%s', cols=%s)" % (self.code, pprint.pformat(self.cols)) return "ApoElt(code='%s', cols=%s)" % (self.code, pprint.pformat(self.cols))
class EtuCol: class EtuCol(object):
"""Valeurs colonnes d'un element pour un etudiant""" """Valeurs colonnes d'un element pour un etudiant"""
def __init__(self, nip, apo_elt, init_vals): def __init__(self, nip, apo_elt, init_vals):
@ -669,7 +669,7 @@ class ApoEtud(dict):
return cur_sem, autre_sem return cur_sem, autre_sem
class ApoData: class ApoData(object):
def __init__( def __init__(
self, self,
data, data,

View File

@ -70,7 +70,7 @@ from app.scodoc import sco_pvjury
from app.scodoc import sco_pvpdf from app.scodoc import sco_pvpdf
class BaseArchiver: class BaseArchiver(object):
def __init__(self, archive_type=""): def __init__(self, archive_type=""):
dirs = [Config.INSTANCE_HOME, "var", "scodoc", "archives"] dirs = [Config.INSTANCE_HOME, "var", "scodoc", "archives"]
if archive_type: if archive_type:

View File

@ -130,7 +130,7 @@ BACS_SSP = {(t[0], t[1]): t[2:] for t in _BACS}
BACS_S = {t[0]: t[2:] for t in _BACS} BACS_S = {t[0]: t[2:] for t in _BACS}
class Baccalaureat: class Baccalaureat(object):
def __init__(self, bac, specialite=""): def __init__(self, bac, specialite=""):
self.bac = bac self.bac = bac
self.specialite = specialite self.specialite = specialite

View File

@ -97,7 +97,7 @@ def bulletin_get_class_name_displayed(context, formsemestre_id):
return "invalide ! (voir paramètres)" return "invalide ! (voir paramètres)"
class BulletinGenerator: class BulletinGenerator(object):
"Virtual superclass for PDF bulletin generators" "" "Virtual superclass for PDF bulletin generators" ""
# Here some helper methods # Here some helper methods
# see sco_bulletins_standard.BulletinGeneratorStandard subclass for real methods # see sco_bulletins_standard.BulletinGeneratorStandard subclass for real methods

View File

@ -387,7 +387,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator):
sco_bulletins_generator.register_bulletin_class(BulletinGeneratorLegacy) sco_bulletins_generator.register_bulletin_class(BulletinGeneratorLegacy)
class BulTableStyle: class BulTableStyle(object):
"""Construction du style de tables reportlab platypus pour les bulletins "classiques" """ """Construction du style de tables reportlab platypus pour les bulletins "classiques" """
LINEWIDTH = 0.5 LINEWIDTH = 0.5

View File

@ -32,7 +32,7 @@
import time import time
# Cache data # Cache data
class simpleCache: class simpleCache(object):
def __init__(self): def __init__(self):
self.cache = {} self.cache = {}
self.inval_cache() # > self.inval_cache() # >

View File

@ -171,7 +171,7 @@ DEVENIRS_NEXT2 = {NEXT_OR_NEXT2: 1, NEXT2: 1}
NO_SEMESTRE_ID = -1 # code semestre si pas de semestres NO_SEMESTRE_ID = -1 # code semestre si pas de semestres
# Regles gestion parcours # Regles gestion parcours
class DUTRule: class DUTRule(object):
def __init__(self, rule_id, premise, conclusion): def __init__(self, rule_id, premise, conclusion):
self.rule_id = rule_id self.rule_id = rule_id
self.premise = premise self.premise = premise
@ -196,7 +196,7 @@ class DUTRule:
DEFAULT_TYPE_PARCOURS = 100 # pour le menu de creation nouvelle formation DEFAULT_TYPE_PARCOURS = 100 # pour le menu de creation nouvelle formation
class TypeParcours: class TypeParcours(object):
TYPE_PARCOURS = None # id, utilisé par notes_formation.type_parcours TYPE_PARCOURS = None # id, utilisé par notes_formation.type_parcours
NAME = None # required NAME = None # required
NB_SEM = 1 # Nombre de semestres NB_SEM = 1 # Nombre de semestres
@ -213,7 +213,9 @@ class TypeParcours:
UNUSED_CODES = set() # Ensemble des codes jury non autorisés dans ce parcours UNUSED_CODES = set() # Ensemble des codes jury non autorisés dans ce parcours
UE_IS_MODULE = False # 1 seul module par UE (si plusieurs modules, etudiants censéments inscrits à un seul d'entre eux) UE_IS_MODULE = False # 1 seul module par UE (si plusieurs modules, etudiants censéments inscrits à un seul d'entre eux)
ECTS_ONLY = False # Parcours avec progression basée uniquement sur les ECTS ECTS_ONLY = False # Parcours avec progression basée uniquement sur les ECTS
ALLOWED_UE_TYPES = list(UE_TYPE_NAME.keys()) # par defaut, autorise tous les types d'UE ALLOWED_UE_TYPES = list(
UE_TYPE_NAME.keys()
) # par defaut, autorise tous les types d'UE
def check(self, formation=None): def check(self, formation=None):
return True, "" # status, diagnostic_message return True, "" # status, diagnostic_message

View File

@ -35,7 +35,7 @@ def get_evaluations_cache(context):
return CACHE_evaluations[u] return CACHE_evaluations[u]
class CacheNotesTable: class CacheNotesTable(object):
"""gestion rudimentaire de cache pour les NotesTables""" """gestion rudimentaire de cache pour les NotesTables"""
def __init__(self): def __init__(self):
@ -191,7 +191,12 @@ class CacheNotesTable:
if r: if r:
log( log(
"get_bulletins_pdf(%s): cache hit %s (id=%s, thread=%s)" "get_bulletins_pdf(%s): cache hit %s (id=%s, thread=%s)"
% (version, formsemestre_id, id(self), six.moves._thread.get_ident()) % (
version,
formsemestre_id,
id(self),
six.moves._thread.get_ident(),
)
) )
return r return r
finally: finally:

View File

@ -125,7 +125,7 @@ FLAG = {
} }
class DataEtudiant: class DataEtudiant(object):
""" """
Structure de donnée des informations pour un étudiant Structure de donnée des informations pour un étudiant
""" """
@ -230,7 +230,7 @@ def entete_liste_etudiant():
""" """
class EtapeBilan: class EtapeBilan(object):
""" """
Structure de donnée représentation l'état global de la comparaison ScoDoc/Apogée Structure de donnée représentation l'état global de la comparaison ScoDoc/Apogée
""" """

View File

@ -576,7 +576,7 @@ admission_list = _admissionEditor.list
admission_edit = _admissionEditor.edit admission_edit = _admissionEditor.edit
# Edition simultanee de identite et admission # Edition simultanee de identite et admission
class EtudIdentEditor: class EtudIdentEditor(object):
def create(self, cnx, args, context=None, REQUEST=None): def create(self, cnx, args, context=None, REQUEST=None):
etudid = identite_create(cnx, args, context, REQUEST) etudid = identite_create(cnx, args, context, REQUEST)
args["etudid"] = etudid args["etudid"] = etudid

View File

@ -179,7 +179,7 @@ def Excel_MakeStyle(
return style return style
class ScoExcelSheet: class ScoExcelSheet(object):
def __init__(self, sheet_name="feuille", default_style=None): def __init__(self, sheet_name="feuille", default_style=None):
self.sheet_name = sheet_name self.sheet_name = sheet_name
self.cells = [] # list of list self.cells = [] # list of list

View File

@ -386,7 +386,7 @@ def _write_formsemestre_aux(context, sem, fieldname, valuename):
# ------ Utilisé pour stocker le VDI avec le code étape (noms de fichiers maquettes et code semestres) # ------ Utilisé pour stocker le VDI avec le code étape (noms de fichiers maquettes et code semestres)
class ApoEtapeVDI: class ApoEtapeVDI(object):
_ETAPE_VDI_SEP = "!" _ETAPE_VDI_SEP = "!"
def __init__(self, etape_vdi=None, etape="", vdi=""): def __init__(self, etape_vdi=None, etape="", vdi=""):

View File

@ -1517,7 +1517,7 @@ def make_query_groups(group_ids):
return "" return ""
class GroupIdInferer: class GroupIdInferer(object):
"""Sert à retrouver l'id d'un groupe dans un semestre donné """Sert à retrouver l'id d'un groupe dans un semestre donné
à partir de son nom. à partir de son nom.
Attention: il peut y avoir plusieurs groupes de même nom Attention: il peut y avoir plusieurs groupes de même nom

View File

@ -295,7 +295,7 @@ if (group_id) {
return "\n".join(H) return "\n".join(H)
class DisplayedGroupsInfos: class DisplayedGroupsInfos(object):
"""Container with attributes describing groups to display in the page """Container with attributes describing groups to display in the page
.groups_query_args : 'group_ids=xxx&group_ids=yyy' .groups_query_args : 'group_ids=xxx&group_ids=yyy'
.base_url : url de la requete, avec les groupes, sans les autres paramètres .base_url : url de la requete, avec les groupes, sans les autres paramètres

View File

@ -130,7 +130,7 @@ def scolar_news_summary(context, n=5):
news = list(selected_news.values()) news = list(selected_news.values())
# sort by date, descending # sort by date, descending
news.sort(itemgetter("date"), reverse=True) news.sort(key=itemgetter("date"), reverse=True)
news = news[:n] news = news[:n]
# mimic EditableTable.list output formatting: # mimic EditableTable.list output formatting:
for n in news: for n in news:

View File

@ -63,7 +63,7 @@ from app.scodoc.dutrules import DUTRules # regles generees a partir du CSV
from app.scodoc.sco_exceptions import ScoValueError from app.scodoc.sco_exceptions import ScoValueError
class DecisionSem: class DecisionSem(object):
"Decision prenable pour un semestre" "Decision prenable pour un semestre"
def __init__( def __init__(
@ -116,7 +116,7 @@ def SituationEtudParcours(context, etud, formsemestre_id):
return SituationEtudParcoursGeneric(context, etud, formsemestre_id, nt) return SituationEtudParcoursGeneric(context, etud, formsemestre_id, nt)
class SituationEtudParcoursGeneric: class SituationEtudParcoursGeneric(object):
"Semestre dans un parcours" "Semestre dans un parcours"
def __init__(self, context, etud, formsemestre_id, nt): def __init__(self, context, etud, formsemestre_id, nt):

View File

@ -334,7 +334,7 @@ def pdf_basic_page(
import threading, time, six.moves.queue, six.moves._thread import threading, time, six.moves.queue, six.moves._thread
class PDFLock: class PDFLock(object):
def __init__(self, timeout=15): def __init__(self, timeout=15):
self.Q = six.moves.queue.Queue(1) self.Q = six.moves.queue.Queue(1)
self.timeout = timeout self.timeout = timeout

View File

@ -40,7 +40,7 @@ _SCO_PERMISSIONS = (
) )
class Permission: class Permission(object):
"Permissions for ScoDoc" "Permissions for ScoDoc"
NBITS = 1 # maximum bits used (for formatting) NBITS = 1 # maximum bits used (for formatting)
ALL_PERMISSIONS = [-1] ALL_PERMISSIONS = [-1]

View File

@ -50,7 +50,7 @@ def has_portal(context):
return get_portal_url(context) return get_portal_url(context)
class PortalInterface: class PortalInterface(object):
def __init__(self): def __init__(self):
self.warning = False self.warning = False
@ -157,10 +157,14 @@ def get_inscrits_etape(context, code_etape, anneeapogee=None, ntrials=2):
req = ( req = (
etud_url etud_url
+ "?" + "?"
+ six.moves.urllib.parse.urlencode((("etape", code_etape), ("annee", anneeapogee))) + six.moves.urllib.parse.urlencode(
(("etape", code_etape), ("annee", anneeapogee))
)
) )
else: else:
req = etud_url + "?" + six.moves.urllib.parse.urlencode((("etape", code_etape),)) req = (
etud_url + "?" + six.moves.urllib.parse.urlencode((("etape", code_etape),))
)
actual_timeout = float(portal_timeout) / ntrials actual_timeout = float(portal_timeout) / ntrials
if portal_timeout > 0: if portal_timeout > 0:
actual_timeout = max(1, actual_timeout) actual_timeout = max(1, actual_timeout)
@ -565,7 +569,9 @@ def get_maquette_apogee(context, etape="", annee_scolaire=""):
req = ( req = (
maquette_url maquette_url
+ "?" + "?"
+ six.moves.urllib.parse.urlencode((("etape", etape), ("annee", annee_scolaire))) + six.moves.urllib.parse.urlencode(
(("etape", etape), ("annee", annee_scolaire))
)
) )
doc = scu.query_portal(req, timeout=portal_timeout) doc = scu.query_portal(req, timeout=portal_timeout)
return doc return doc

View File

@ -479,7 +479,7 @@ def table_suivi_cohorte(
# 3-- Regroupe les semestres par date de debut # 3-- Regroupe les semestres par date de debut
P = [] # liste de periodsem P = [] # liste de periodsem
class periodsem: class periodsem(object):
pass pass
# semestre de depart: # semestre de depart:

View File

@ -59,7 +59,7 @@ from app.scodoc.sco_permissions import Permission
# module_tag_set( module_id, taglist ) -> modifie les tags # module_tag_set( module_id, taglist ) -> modifie les tags
class ScoTag: class ScoTag(object):
"""Generic tags for ScoDoc""" """Generic tags for ScoDoc"""
# must be overloaded: # must be overloaded:

View File

@ -204,7 +204,7 @@ class DictDefault(dict): # obsolete, use collections.defaultdict
return value return value
class WrapDict: class WrapDict(object):
"""Wrap a dict so that getitem returns '' when values are None""" """Wrap a dict so that getitem returns '' when values are None"""
def __init__(self, adict, NoneValue=""): def __init__(self, adict, NoneValue=""):

View File

@ -15,7 +15,7 @@
# souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention. # souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention.
class CFG: class CFG(object):
pass pass

View File

@ -16,7 +16,7 @@
# souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention. # souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention.
class CFG: class CFG(object):
pass pass

View File

@ -23,7 +23,12 @@ from config import Config
from app.scodoc.sco_exceptions import ScoConfigurationError from app.scodoc.sco_exceptions import ScoConfigurationError
class ScoDeptDescription: class ScoDeptDescription(object):
"""Description d'un département
.dept_id : eg "RT"
.db_uri : dept database URI
"""
def __init__(self, filename): def __init__(self, filename):
"""Read dept description from dept file""" """Read dept description from dept file"""
if os.path.split(filename)[1][-4:] != ".cfg": if os.path.split(filename)[1][-4:] != ".cfg":

View File

@ -63,7 +63,7 @@ def logging_meth(func):
return wrapper_logging_meth return wrapper_logging_meth
class ScoFake: class ScoFake(object):
def __init__(self, context, verbose=True): def __init__(self, context, verbose=True):
self.context = context self.context = context
self.verbose = verbose self.verbose = verbose