From 14991a2119877ac6942a10e7cdeb6014bca77fc5 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Sat, 21 Aug 2021 00:24:51 +0200 Subject: [PATCH] =?UTF-8?q?refactoring:=20=C3=A9limination=20de=20'context?= =?UTF-8?q?'=20(tr=C3=A8s=20frais,=20tests=20en=20cours).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/auth/models.py | 2 +- app/decorators.py | 177 ++++++-------- app/scodoc/debug.py | 142 ----------- app/scodoc/html_sco_header.py | 4 +- app/scodoc/notes_log.py | 4 +- app/scodoc/notes_table.py | 34 +-- app/scodoc/pe_avislatex.py | 18 +- app/scodoc/pe_jurype.py | 49 ++-- app/scodoc/pe_semestretag.py | 7 +- app/scodoc/pe_tools.py | 2 +- app/scodoc/pe_view.py | 20 +- app/scodoc/sco_abs.py | 32 ++- app/scodoc/sco_abs_notification.py | 47 ++-- app/scodoc/sco_abs_views.py | 70 +++--- app/scodoc/sco_apogee_compare.py | 12 +- app/scodoc/sco_apogee_csv.py | 44 ++-- app/scodoc/sco_archives.py | 27 +-- app/scodoc/sco_archives_etud.py | 16 +- app/scodoc/sco_bulletins.py | 50 ++-- app/scodoc/sco_bulletins_generator.py | 7 +- app/scodoc/sco_bulletins_json.py | 10 +- app/scodoc/sco_bulletins_legacy.py | 10 +- app/scodoc/sco_bulletins_pdf.py | 15 +- app/scodoc/sco_bulletins_signature.py | 14 +- app/scodoc/sco_bulletins_standard.py | 7 +- app/scodoc/sco_bulletins_ucac.py | 3 +- app/scodoc/sco_bulletins_xml.py | 6 +- app/scodoc/sco_cache.py | 7 +- app/scodoc/sco_compute_moy.py | 16 +- app/scodoc/sco_cost_formation.py | 3 - app/scodoc/sco_debouche.py | 42 ++-- app/scodoc/sco_dept.py | 20 +- app/scodoc/sco_dump_db.py | 10 +- app/scodoc/sco_edit_module.py | 2 +- app/scodoc/sco_edit_ue.py | 2 +- app/scodoc/sco_edt_cal.py | 26 +- app/scodoc/sco_emails.py | 14 +- app/scodoc/sco_entreprises.py | 38 ++- app/scodoc/sco_etape_apogee.py | 104 ++++---- app/scodoc/sco_etape_apogee_view.py | 69 +++--- app/scodoc/sco_etape_bilan.py | 5 +- app/scodoc/sco_etud.py | 79 +++--- app/scodoc/sco_evaluations.py | 12 +- app/scodoc/sco_excel.py | 6 +- app/scodoc/sco_export_results.py | 22 +- app/scodoc/sco_find_etud.py | 13 +- app/scodoc/sco_formsemestre.py | 5 +- app/scodoc/sco_formsemestre_custommenu.py | 12 +- app/scodoc/sco_formsemestre_edit.py | 53 ++-- app/scodoc/sco_formsemestre_exterieurs.py | 34 ++- app/scodoc/sco_formsemestre_inscriptions.py | 43 ++-- app/scodoc/sco_formsemestre_status.py | 45 ++-- app/scodoc/sco_formsemestre_validation.py | 45 ++-- app/scodoc/sco_groups_edit.py | 2 +- app/scodoc/sco_groups_view.py | 42 ++-- app/scodoc/sco_import_etuds.py | 40 ++-- app/scodoc/sco_import_users.py | 4 +- app/scodoc/sco_inscr_passage.py | 42 ++-- app/scodoc/sco_liste_notes.py | 22 +- app/scodoc/sco_lycee.py | 17 +- app/scodoc/sco_modalites.py | 18 +- app/scodoc/sco_moduleimpl_inscriptions.py | 31 ++- app/scodoc/sco_moduleimpl_status.py | 13 +- app/scodoc/sco_news.py | 15 +- app/scodoc/sco_page_etud.py | 24 +- app/scodoc/sco_parcours_dut.py | 13 +- app/scodoc/sco_permissions_check.py | 9 +- app/scodoc/sco_photos.py | 42 ++-- app/scodoc/sco_placement.py | 18 +- app/scodoc/sco_portal_apogee.py | 2 +- app/scodoc/sco_poursuite_dut.py | 14 +- app/scodoc/sco_preferences.py | 3 - app/scodoc/sco_prepajury.py | 4 +- app/scodoc/sco_pvjury.py | 51 ++-- app/scodoc/sco_pvpdf.py | 27 +-- app/scodoc/sco_recapcomplet.py | 32 +-- app/scodoc/sco_report.py | 82 +++---- app/scodoc/sco_saisie_notes.py | 66 +++-- app/scodoc/sco_semset.py | 40 ++-- app/scodoc/sco_synchro_etuds.py | 57 ++--- app/scodoc/sco_tag_module.py | 22 +- app/scodoc/sco_trombino.py | 70 +++--- app/scodoc/sco_trombino_tours.py | 6 +- app/scodoc/sco_ue_external.py | 18 +- app/scodoc/sco_undo_notes.py | 18 +- app/scodoc/sco_up_to_date.py | 6 +- app/scodoc/sco_users.py | 8 +- app/scodoc/sco_utils.py | 13 - app/views/absences.py | 127 ++++------ app/views/entreprises.py | 242 ++++++++----------- app/views/notes.py | 252 +++++++++----------- app/views/scolar.py | 196 +++++++-------- app/views/users.py | 29 +-- misc/csv2rules.py | 4 +- scotests/test_absence2.py | 28 +-- scotests/test_api7doc.py | 5 +- scotests/test_billet.py | 1 - scotests/test_capitalisation.py | 2 +- scotests/test_deleteBilletAbsence.py | 1 - scotests/test_demissions.py | 4 +- scotests/test_etudiant.py | 66 ++--- scotests/test_evaluation.py | 13 +- scotests/test_groupes.py | 2 - tests/scenarios/test_scenario1_formation.py | 2 - tests/unit/sco_fake_gen.py | 19 +- tests/unit/test_abs_counts.py | 10 +- tests/unit/test_abs_demijournee.py | 33 +-- tests/unit/test_caches.py | 1 - tests/unit/test_departements.py | 10 +- tests/unit/test_formations.py | 23 +- tests/unit/test_sco_basic.py | 18 +- 111 files changed, 1384 insertions(+), 2151 deletions(-) delete mode 100644 app/scodoc/debug.py diff --git a/app/auth/models.py b/app/auth/models.py index c0e5f2a5..17cdce3d 100644 --- a/app/auth/models.py +++ b/app/auth/models.py @@ -258,7 +258,7 @@ class User(UserMixin, db.Model): if self.nom: n = sco_etud.format_nom(self.nom) else: - n = scu.strupper(self.user_name) + n = self.user_name.upper() return "%s %s (%s)" % ( n, sco_etud.format_prenom(self.prenom), diff --git a/app/decorators.py b/app/decorators.py index 2ebb5acc..a6399cd7 100644 --- a/app/decorators.py +++ b/app/decorators.py @@ -145,122 +145,95 @@ def admin_required(f): return permission_required(Permission.ScoSuperAdmin)(f) -def scodoc7func(context): +def scodoc7func(func): """Décorateur pour intégrer les fonctions Zope 2 de ScoDoc 7. Ajoute l'argument REQUEST s'il est dans la signature de la fonction. Les paramètres de la query string deviennent des (keywords) paramètres de la fonction. """ - def s7_decorator(func): - @wraps(func) - def scodoc7func_decorator(*args, **kwargs): - """Decorator allowing legacy Zope published methods to be called via Flask - routes without modification. + @wraps(func) + def scodoc7func_decorator(*args, **kwargs): + """Decorator allowing legacy Zope published methods to be called via Flask + routes without modification. - There are two cases: the function can be called - 1. via a Flask route ("top level call") - 2. or be called directly from Python. + There are two cases: the function can be called + 1. via a Flask route ("top level call") + 2. or be called directly from Python. - If called via a route, this decorator setups a REQUEST object (emulating Zope2 REQUEST) - """ - # Détermine si on est appelé via une route ("toplevel") - # ou par un appel de fonction python normal. - top_level = not hasattr(g, "zrequest") - if not top_level: - # ne "redécore" pas - return func(*args, **kwargs) - # --- Emulate Zope's REQUEST - REQUEST = ZRequest() - g.zrequest = REQUEST - req_args = REQUEST.form # args from query string (get) or form (post) - # --- Add positional arguments - pos_arg_values = [] - argspec = inspect.getfullargspec(func) - # current_app.logger.info("argspec=%s" % str(argspec)) - nb_default_args = len(argspec.defaults) if argspec.defaults else 0 - if nb_default_args: - arg_names = argspec.args[:-nb_default_args] + If called via a route, this decorator setups a REQUEST object (emulating Zope2 REQUEST) + """ + # Détermine si on est appelé via une route ("toplevel") + # ou par un appel de fonction python normal. + top_level = not hasattr(g, "zrequest") + if not top_level: + # ne "redécore" pas + return func(*args, **kwargs) + # --- Emulate Zope's REQUEST + REQUEST = ZRequest() + g.zrequest = REQUEST + req_args = REQUEST.form # args from query string (get) or form (post) + # --- Add positional arguments + pos_arg_values = [] + argspec = inspect.getfullargspec(func) + # current_app.logger.info("argspec=%s" % str(argspec)) + nb_default_args = len(argspec.defaults) if argspec.defaults else 0 + if nb_default_args: + arg_names = argspec.args[:-nb_default_args] + else: + arg_names = argspec.args + for arg_name in arg_names: + if arg_name == "REQUEST": # special case + pos_arg_values.append(REQUEST) else: - arg_names = argspec.args - for arg_name in arg_names: + v = req_args[arg_name] + # try to convert all arguments to INTEGERS + # necessary for db ids and boolean values + try: + v = int(v) + except ValueError: + pass + pos_arg_values.append(v) + # current_app.logger.info("pos_arg_values=%s" % pos_arg_values) + # current_app.logger.info("req_args=%s" % req_args) + # Add keyword arguments + if nb_default_args: + for arg_name in argspec.args[-nb_default_args:]: if arg_name == "REQUEST": # special case - pos_arg_values.append(REQUEST) - elif arg_name == "context": - pos_arg_values.append(context) - else: + kwargs[arg_name] = REQUEST + elif arg_name in req_args: + # set argument kw optionnel v = req_args[arg_name] # try to convert all arguments to INTEGERS # necessary for db ids and boolean values try: v = int(v) - except ValueError: + except (ValueError, TypeError): pass - pos_arg_values.append(v) - # current_app.logger.info("pos_arg_values=%s" % pos_arg_values) - # current_app.logger.info("req_args=%s" % req_args) - # Add keyword arguments - if nb_default_args: - for arg_name in argspec.args[-nb_default_args:]: - if arg_name == "REQUEST": # special case - kwargs[arg_name] = REQUEST - elif arg_name in req_args: - # set argument kw optionnel - v = req_args[arg_name] - # try to convert all arguments to INTEGERS - # necessary for db ids and boolean values - try: - v = int(v) - except (ValueError, TypeError): - pass - kwargs[arg_name] = v - # current_app.logger.info( - # "scodoc7func_decorator: top_level=%s, pos_arg_values=%s, kwargs=%s" - # % (top_level, pos_arg_values, kwargs) - # ) - value = func(*pos_arg_values, **kwargs) + kwargs[arg_name] = v + # current_app.logger.info( + # "scodoc7func_decorator: top_level=%s, pos_arg_values=%s, kwargs=%s" + # % (top_level, pos_arg_values, kwargs) + # ) + value = func(*pos_arg_values, **kwargs) - if not top_level: - return value - else: - if isinstance(value, werkzeug.wrappers.response.Response): - return value # redirected - # Build response, adding collected http headers: - headers = [] - kw = {"response": value, "status": 200} - if g.zrequest: - headers = g.zrequest.RESPONSE.headers - if not headers: - # no customized header, speedup: - return value - if "content-type" in headers: - kw["mimetype"] = headers["content-type"] - r = flask.Response(**kw) - for h in headers: - r.headers[h] = headers[h] - return r + if not top_level: + return value + else: + if isinstance(value, werkzeug.wrappers.response.Response): + return value # redirected + # Build response, adding collected http headers: + headers = [] + kw = {"response": value, "status": 200} + if g.zrequest: + headers = g.zrequest.RESPONSE.headers + if not headers: + # no customized header, speedup: + return value + if "content-type" in headers: + kw["mimetype"] = headers["content-type"] + r = flask.Response(**kw) + for h in headers: + r.headers[h] = headers[h] + return r - return scodoc7func_decorator - - return s7_decorator - - -# Le "context" de ScoDoc7 -class ScoDoc7Context(object): - """Context object for legacy Zope methods. - Mainly used to call published methods, as context.function(...) - """ - - def __init__(self, name=""): - self.name = name - # logging.getLogger(__name__).info("created %s" % self) - - def populate(self, globals_dict): - # logging.getLogger(__name__).info("populating context %s" % self) - for k in globals_dict: - if (not k.startswith("_")) and ( - isinstance(globals_dict[k], types.FunctionType) - ): - setattr(self, k, globals_dict[k].__get__(self)) - - def __repr__(self): - return "ScoDoc7Context('%s')" % self.name + return scodoc7func_decorator diff --git a/app/scodoc/debug.py b/app/scodoc/debug.py deleted file mode 100644 index 85f8a363..00000000 --- a/app/scodoc/debug.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- mode: python -*- -# -*- coding: utf-8 -*- - -"""Configuration pour debugguer en mode console - -Lancer ScoDoc ainsi: (comme root) - - /opt/scodoc/bin/zopectl debug - -Puis - -from debug import * -context = go(app) -# ou -context = go_dept(app, 'CJ') - -authuser = app.acl_users.getUserById('admin') -# ou app.ScoDoc.acl_users.getUserById('toto') pour un utilisateur scodoc -authuser = authuser.__of__(app.acl_users) - -Exemple: -sems = sco_formsemestre.do_formsemestre_list.formsemestre_list(context) -formsemestre_id = sems[0]['formsemestre_id'] - -# Affiche tous les semestres: -for sem in sems: - print sem['formsemestre_id'], sem['titre_num'] - -# Recupere la table de notes: -nt = sco_cache.NotesTableCache.get( formsemestre_id) - - -""" -from __future__ import print_function -import pdb # pylint: disable=unused-import -import pprint - -import app.scodoc.notesdb as ndb # pylint: disable=unused-import -from app.scodoc.notesdb import * # pylint: disable=wildcard-import,unused-wildcard-import -from app.scodoc.notes_log import log -import app.scodoc.sco_utils as scu -from app.scodoc.sco_utils import * # pylint: disable=wildcard-import, unused-wildcard-import - -from app.scodoc.gen_tables import GenTable -from app.scodoc import html_sco_header -from app.scodoc import sco_archives -from app.scodoc import sco_bulletins -from app.scodoc import sco_bulletins_xml -from app.scodoc import sco_cache -from app.scodoc import sco_codes_parcours -from app.scodoc import sco_compute_moy -from app.scodoc import sco_edit_matiere -from app.scodoc import sco_edit_module -from app.scodoc import sco_edit_ue -from app.scodoc import sco_excel -from app.scodoc import sco_formations -from app.scodoc import sco_formsemestre -from app.scodoc import sco_formsemestre_edit -from app.scodoc import sco_formsemestre_status -from app.scodoc import sco_formsemestre_validation -from app.scodoc import sco_groups -from app.scodoc import sco_moduleimpl -from app.scodoc import sco_news -from app.scodoc import sco_parcours_dut -from app.scodoc import sco_permissions -from app.scodoc import sco_preferences -from app.scodoc import sco_tag_module -from app.scodoc import sco_etud - -# Prend le premier departement comme context - - -def go(app, n=0, verbose=True): - context = app.ScoDoc.objectValues("Folder")[n].Scolarite - if verbose: - print("context in dept ", scu.get_dept_id()) - return context - - -def go_dept(app, dept, verbose=True): - objs = app.ScoDoc.objectValues("Folder") - for o in objs: - try: - context = o.Scolarite - except AttributeError: - # ignore other folders, like old "icons" - continue - if scu.get_dept_id() == dept: - if verbose: - print("context in dept ", scu.get_dept_id()) - return context - raise ValueError("dep %s not found" % dept) - - -class FakeUser(object): - def __init__(self, name): - self.name = name - - def __str__(self): - return self.name - - def has_permission(self, op, dept=None): - return True - - def has_role(self, role): - return True - - -class DummyResponse(object): - """Emulation vide de Reponse http Zope""" - - def __init__(self): - self.header = {} - self.redirected = "" - - def setHeader(self, name, value): - self.header[name] = value - - def redirect(self, url): - self.redirected = url - - -class DummyRequest(object): - """Emulation vide de Request Zope""" - - def __init__(self): - self.RESPONSE = DummyResponse() - self.AUTHENTICATED_USER = FakeUser("admin") - self.form = {} - self.URL = "http://scodoc/" - self.URL0 = self.URL - self.BASE0 = "localhost" - self.REMOTE_ADDR = "127.0.0.1" - self.HTTP_REFERER = "" - self.REQUEST_METHOD = "get" - self.QUERY_STRING = "" - - -REQUEST = DummyRequest() - -# handful shorcut -pp = pprint.pprint diff --git a/app/scodoc/html_sco_header.py b/app/scodoc/html_sco_header.py index 056b0f24..856c191e 100644 --- a/app/scodoc/html_sco_header.py +++ b/app/scodoc/html_sco_header.py @@ -157,8 +157,6 @@ def sco_header( "Main HTML page header for ScoDoc" from app.scodoc.sco_formsemestre_status import formsemestre_page_title - context = None # XXX TODO à enlever #context - # Get head message from http request: if not head_message: if request.method == "POST": @@ -308,7 +306,7 @@ def sco_header( H.append("""
""") # # Barre menu semestre: - H.append(formsemestre_page_title(context)) + H.append(formsemestre_page_title()) # Avertissement si mot de passe à changer if user_check: diff --git a/app/scodoc/notes_log.py b/app/scodoc/notes_log.py index ba52d494..67ae317c 100644 --- a/app/scodoc/notes_log.py +++ b/app/scodoc/notes_log.py @@ -64,7 +64,7 @@ log = _logguer() # Alarms by email: -def sendAlarm(context, subj, txt): +def sendAlarm(subj, txt): from . import sco_utils from . import sco_emails from . import sco_preferences @@ -77,7 +77,7 @@ def sendAlarm(context, subj, txt): msg.epilogue = "" txt = MIMEText(txt, "plain", sco_utils.SCO_ENCODING) msg.attach(txt) - sco_emails.sendEmail(context, msg) + sco_emails.sendEmail(msg) # Debug: log call stack diff --git a/app/scodoc/notes_table.py b/app/scodoc/notes_table.py index 9df33d69..99b4d778 100644 --- a/app/scodoc/notes_table.py +++ b/app/scodoc/notes_table.py @@ -102,7 +102,7 @@ def comp_ranks(T): return rangs -def get_sem_ues_modimpls(context, formsemestre_id, modimpls=None): +def get_sem_ues_modimpls(formsemestre_id, modimpls=None): """Get liste des UE du semestre (à partir des moduleimpls) (utilisé quand on ne peut pas construire nt et faire nt.get_ues()) """ @@ -122,7 +122,7 @@ def get_sem_ues_modimpls(context, formsemestre_id, modimpls=None): return ues, modimpls -def comp_etud_sum_coef_modules_ue(context, formsemestre_id, etudid, ue_id): +def comp_etud_sum_coef_modules_ue(formsemestre_id, etudid, ue_id): """Somme des coefficients des modules de l'UE dans lesquels cet étudiant est inscrit ou None s'il n'y a aucun module. @@ -171,13 +171,10 @@ class NotesTable(object): """ - def __init__( - self, context, formsemestre_id - ): # context is not used in ScoDoc8 ! XXX + def __init__(self, formsemestre_id): log("NotesTable( formsemestre_id=%s )" % formsemestre_id) if not formsemestre_id: raise ValueError("invalid formsemestre_id (%s)" % formsemestre_id) - self.context = context self.formsemestre_id = formsemestre_id cnx = ndb.GetDBConnexion() self.sem = sco_formsemestre.get_formsemestre(formsemestre_id) @@ -218,7 +215,7 @@ class NotesTable(object): valid_evals, mods_att, self.expr_diagnostics, - ) = sco_compute_moy.do_formsemestre_moyennes(context, self, formsemestre_id) + ) = sco_compute_moy.do_formsemestre_moyennes(self, formsemestre_id) self._mods_att = mods_att # liste des modules avec des notes en attente self._matmoys = {} # moyennes par matieres self._valid_evals = {} # { evaluation_id : eval } @@ -372,16 +369,14 @@ class NotesTable(object): def get_sexnom(self, etudid): "M. DUPONT" etud = self.identdict[etudid] - return ( - etud["civilite_str"] + " " + scu.strupper(etud["nom_usuel"] or etud["nom"]) - ) + return etud["civilite_str"] + " " + (etud["nom_usuel"] or etud["nom"]).upper() def get_nom_short(self, etudid): "formatte nom d'un etud (pour table recap)" etud = self.identdict[etudid] # Attention aux caracteres multibytes pour decouper les 2 premiers: return ( - scu.strupper(etud["nom_usuel"] or etud["nom"]) + (etud["nom_usuel"] or etud["nom"]).upper() + " " + etud["prenom"].capitalize()[:2] + "." @@ -681,7 +676,6 @@ class NotesTable(object): formula = sco_compute_moy.get_ue_expression(self.formsemestre_id, ue_id, cnx) if formula: moy = sco_compute_moy.compute_user_formula( - self.context, self.sem, etudid, moy, @@ -980,7 +974,7 @@ class NotesTable(object): # { groupe : { etudid : rang } } if not group_id in self.group_etuds: # lazy fill: list of etud in group_id - etuds = sco_groups.get_group_members(self.context, group_id) + etuds = sco_groups.get_group_members(group_id) self.group_etuds[group_id] = set([x["etudid"] for x in etuds]) # 1- build T restricted to group Tr = [] @@ -1056,7 +1050,7 @@ class NotesTable(object): "Warning: %s capitalized an UE %s which is not part of current sem %s" % (etudid, ue_id, self.formsemestre_id) ) - ue = sco_edit_ue.do_ue_list(self.context, args={"ue_id": ue_id})[0] + ue = sco_edit_ue.do_ue_list(args={"ue_id": ue_id})[0] self.uedict[ue_id] = ue # record this UE if ue_id not in self._uecoef: cl = formsemestre_uecoef_list( @@ -1146,9 +1140,7 @@ class NotesTable(object): self.ue_capitalisees = scu.DictDefault(defaultvalue=[]) cnx = None for etudid in self.get_etudids(): - capital = formsemestre_get_etud_capitalisation( - self.context, self.sem, etudid - ) + capital = formsemestre_get_etud_capitalisation(self.sem, etudid) for ue_cap in capital: # Si la moyenne d'UE n'avait pas été stockée (anciennes versions de ScoDoc) # il faut la calculer ici et l'enregistrer @@ -1194,7 +1186,7 @@ class NotesTable(object): cnx.commit() # log('comp_ue_capitalisees=\n%s' % pprint.pformat(self.ue_capitalisees) ) - # def comp_etud_sum_coef_modules_ue(self, etudid, ue_id): + # def comp_etud_sum_coef_modules_ue( etudid, ue_id): # """Somme des coefficients des modules de l'UE dans lesquels cet étudiant est inscrit # ou None s'il n'y a aucun module # """ @@ -1235,7 +1227,7 @@ class NotesTable(object): if ue_cap["formsemestre_id"]: # Somme des coefs dans l'UE du semestre d'origine (nouveau: 23/01/2016) coef = comp_etud_sum_coef_modules_ue( - self.context, ue_cap["formsemestre_id"], etudid, ue_cap["ue_id"] + ue_cap["formsemestre_id"], etudid, ue_cap["ue_id"] ) if coef != None: return coef @@ -1243,9 +1235,7 @@ class NotesTable(object): # Capitalisation UE externe: quel coef appliquer ? # Si l'étudiant est inscrit dans le semestre courant, # somme des coefs des modules de l'UE auxquels il est inscrit - c = comp_etud_sum_coef_modules_ue( - self.context, self.formsemestre_id, etudid, ue["ue_id"] - ) + c = comp_etud_sum_coef_modules_ue(self.formsemestre_id, etudid, ue["ue_id"]) if c is not None: # inscrit à au moins un module de cette UE return c # arfff: aucun moyen de déterminer le coefficient de façon sûre diff --git a/app/scodoc/pe_avislatex.py b/app/scodoc/pe_avislatex.py index 1e6d2f83..3259e20f 100644 --- a/app/scodoc/pe_avislatex.py +++ b/app/scodoc/pe_avislatex.py @@ -66,9 +66,7 @@ def get_code_latex_from_modele(fichier): # ---------------------------------------------------------------------------------------- -def get_code_latex_from_scodoc_preference( - context, formsemestre_id, champ="pe_avis_latex_tmpl" -): +def get_code_latex_from_scodoc_preference(formsemestre_id, champ="pe_avis_latex_tmpl"): """ Extrait le template (ou le tag d'annotation au regard du champ fourni) des préférences LaTeX et s'assure qu'il est renvoyé au format unicode @@ -221,7 +219,7 @@ def get_code_latex_avis_etudiant( # ---------------------------------------------------------------------------------------- -def get_annotation_PE(context, etudid, tag_annotation_pe): +def get_annotation_PE(etudid, tag_annotation_pe): """Renvoie l'annotation PE dans la liste de ces annotations ; Cette annotation est reconnue par la présence d'un tag **PE** (cf. .get_preferences -> pe_tag_annotation_avis_latex). @@ -387,7 +385,7 @@ def get_bilanParTag(donnees_etudiant, groupe="groupe"): # ---------------------------------------------------------------------------------------- def get_avis_poursuite_par_etudiant( - context, jury, etudid, template_latex, tag_annotation_pe, footer_latex, prefs + jury, etudid, template_latex, tag_annotation_pe, footer_latex, prefs ): """Renvoie un nom de fichier et le contenu de l'avis latex d'un étudiant dont l'etudid est fourni. result: [ chaine unicode, chaine unicode ] @@ -417,9 +415,7 @@ def get_avis_poursuite_par_etudiant( ) # les annnotations - annotationPE = get_annotation_PE( - context, etudid, tag_annotation_pe=tag_annotation_pe - ) + annotationPE = get_annotation_PE(etudid, tag_annotation_pe=tag_annotation_pe) if pe_tools.PE_DEBUG: pe_tools.pe_print(annotationPE, type(annotationPE)) @@ -456,7 +452,7 @@ def get_templates_from_distrib(template="avis"): # ---------------------------------------------------------------------------------------- -def table_syntheseAnnotationPE(context, syntheseJury, tag_annotation_pe): +def table_syntheseAnnotationPE(syntheseJury, tag_annotation_pe): """Génère un fichier excel synthétisant les annotations PE telles qu'inscrites dans les fiches de chaque étudiant""" sT = SeqGenTable() # le fichier excel à générer @@ -514,9 +510,7 @@ def table_syntheseAnnotationPE(context, syntheseJury, tag_annotation_pe): n += 1 # L'annotation PE - annotationPE = get_annotation_PE( - context, etudid, tag_annotation_pe=tag_annotation_pe - ) + annotationPE = get_annotation_PE(etudid, tag_annotation_pe=tag_annotation_pe) row["Annotation PE"] = annotationPE if annotationPE else "" rows.append(row) diff --git a/app/scodoc/pe_jurype.py b/app/scodoc/pe_jurype.py index 888924f0..5aee97f9 100644 --- a/app/scodoc/pe_jurype.py +++ b/app/scodoc/pe_jurype.py @@ -61,7 +61,7 @@ from app.scodoc import pe_semestretag from app.scodoc import pe_settag # ---------------------------------------------------------------------------------------- -def comp_nom_semestre_dans_parcours(context, sem): +def comp_nom_semestre_dans_parcours(sem): """Le nom a afficher pour titrer un semestre par exemple: "semestre 2 FI 2015" """ @@ -83,15 +83,12 @@ class JuryPE(object): base sur NotesTable Attributs : - diplome : l'annee d'obtention du diplome DUT et du jury de PE (generalement fevrier XXXX) - - context : le contexte Zope - juryEtudDict : dictionnaire récapitulant les étudiants participant au jury PE (données administratives + celles des semestres valides à prendre en compte permettant le calcul des moyennes ... {'etudid : { 'nom', 'prenom', 'civilite', 'diplome', '', }} Rq: il contient à la fois les étudiants qui vont être diplomés à la date prévue et ceux qui sont éliminés (abandon, redoublement, ...) pour affichage alternatif - - Note (EV:): les attributs sont des chaines encodées (utf8), comme dans ScoDoc (pas des unicodes) """ # Variables de classe décrivant les aggrégats, leur ordre d'apparition temporelle et @@ -148,19 +145,17 @@ class JuryPE(object): } # ------------------------------------------------------------------------------------------------------------------ - def __init__(self, context, semBase): + def __init__(self, semBase): """ Création d'une table PE sur la base d'un semestre selectionné. De ce semestre est déduit : 1. l'année d'obtention du DUT, 2. tous les étudiants susceptibles à ce stade (au regard de leur parcours) d'être diplomés. Args: - context: semBase: le dictionnaire sem donnant la base du jury meme_programme: si True, impose un même programme pour tous les étudiants participant au jury, si False, permet des programmes differents """ - self.context = context self.semTagDict = ( {} ) # Les semestres taggués à la base des calculs de moyenne par tag @@ -275,7 +270,7 @@ class JuryPE(object): """ # Les cosemestres donnant lieu à meme année de diplome coSems = get_cosemestres_diplomants( - self.context, semBase, avec_meme_formation=avec_meme_formation + semBase, avec_meme_formation=avec_meme_formation ) # calcul des coSemestres if pe_tools.PE_DEBUG: pe_tools.pe_print( @@ -323,9 +318,7 @@ class JuryPE(object): for sem in semsListe: # pour chacun des semestres de la liste # nt = self.get_notes_d_un_semestre( sem['formsemestre_id'] ) - nt = self.get_cache_notes_d_un_semestre( - self.context, sem["formsemestre_id"] - ) + nt = self.get_cache_notes_d_un_semestre(sem["formsemestre_id"]) # sco_cache.NotesTableCache.get( sem['formsemestre_id']) etudiantsDuSemestre = ( nt.get_etudids() @@ -377,7 +370,7 @@ class JuryPE(object): if etudid not in self.PARCOURSINFO_DICT: etud = self.get_cache_etudInfo_d_un_etudiant( - self.context, etudid + etudid ) # On charge les données de l'étudiant if pe_tools.PE_DEBUG and pe_tools.PE_DEBUG >= 2: pe_tools.pe_print(etud["nom"] + " " + etud["prenom"], end="") @@ -460,8 +453,8 @@ class JuryPE(object): from app.scodoc import sco_report reponse = False - etud = self.get_cache_etudInfo_d_un_etudiant(self.context, etudid) - (_, parcours) = sco_report.get_codeparcoursetud(self.context, etud) + etud = self.get_cache_etudInfo_d_un_etudiant(etudid) + (_, parcours) = sco_report.get_codeparcoursetud(etud) if ( len(set(sco_codes_parcours.CODES_SEM_REO.keys()) & set(parcours.values())) > 0 @@ -493,7 +486,7 @@ class JuryPE(object): lastdate = max(sesdates) # date de fin de l'inscription la plus récente # if PETable.AFFICHAGE_DEBUG_PE == True : pe_tools.pe_print(" derniere inscription = ", lastDateSem) - semestresDeScoDoc = sco_formsemestre.do_formsemestre_list(self.context) + semestresDeScoDoc = sco_formsemestre.do_formsemestre_list() semestresSuperieurs = [ sem for sem in semestresDeScoDoc if sem["semestre_id"] > sonDernierSidValide ] # Semestre de rang plus élevé que son dernier sem valide @@ -523,9 +516,9 @@ class JuryPE(object): """ from app.scodoc import sco_report - etud = self.get_cache_etudInfo_d_un_etudiant(self.context, etudid) + etud = self.get_cache_etudInfo_d_un_etudiant(etudid) (code, parcours) = sco_report.get_codeparcoursetud( - self.context, etud + etud ) # description = '1234:A', parcours = {1:ADM, 2:NAR, ...} sonDernierSemestreValide = max( [ @@ -554,9 +547,7 @@ class JuryPE(object): for (i, sem) in enumerate( sesSi ): # Parcours des éventuels semestres précédents - nt = self.get_cache_notes_d_un_semestre( - self.context, sem["formsemestre_id"] - ) + nt = self.get_cache_notes_d_un_semestre(sem["formsemestre_id"]) dec = nt.get_etud_decision_sem( etudid ) # quelle est la décision du jury ? @@ -597,11 +588,11 @@ class JuryPE(object): """ # Semestre taggué avec classement dans le groupe if fid not in self.semTagDict: - nt = self.get_cache_notes_d_un_semestre(self.context, fid) + nt = self.get_cache_notes_d_un_semestre(fid) # Création du semestres self.semTagDict[fid] = pe_semestretag.SemestreTag( - self.context, nt, nt.sem + nt, nt.sem ) # Création du pesemestre associé self.semTagDict[fid].comp_data_semtag() lesEtudids = self.semTagDict[fid].get_etudids() @@ -612,7 +603,7 @@ class JuryPE(object): etudid not in self.PARCOURSINFO_DICT ): # Si l'étudiant n'a pas été pris en compte dans le jury car déjà diplômé ou redoublant lesEtudidsManquants.append(etudid) - # self.get_cache_etudInfo_d_un_etudiant(self.context, etudid) + # self.get_cache_etudInfo_d_un_etudiant(etudid) self.add_etudiants( etudid ) # Ajoute les élements de parcours de l'étudiant @@ -879,7 +870,7 @@ class JuryPE(object): infos = [] for sem in sems: - nomsem = comp_nom_semestre_dans_parcours(self.context, sem) + nomsem = comp_nom_semestre_dans_parcours(sem) infos.append( { "nom_semestre_dans_parcours": nomsem, @@ -1117,7 +1108,7 @@ class JuryPE(object): # **************************************************************************************************************** # # ------------------------------------------------------------------------------------------------------------------ - def get_cache_etudInfo_d_un_etudiant(self, context, etudid): + def get_cache_etudInfo_d_un_etudiant(self, etudid): """Renvoie les informations sur le parcours d'un étudiant soit en les relisant depuis ETUDINFO_DICT si mémorisée soit en les chargeant et en les mémorisant """ @@ -1130,9 +1121,7 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_cache_notes_d_un_semestre( - self, context, formsemestre_id - ): # inutile en realité ! + def get_cache_notes_d_un_semestre(self, formsemestre_id): # inutile en realité ! """Charge la table des notes d'un formsemestre""" return sco_cache.NotesTableCache.get(formsemestre_id) @@ -1145,7 +1134,7 @@ class JuryPE(object): en fonction de ses infos d'etud (cf. sco_etud.get_etud_info( etudid=etudid, filled=True)[0]), les semestres étant triés par ordre décroissant. Si semestre_id == None renvoie tous les semestres""" - etud = self.get_cache_etudInfo_d_un_etudiant(self.context, etudid) + etud = self.get_cache_etudInfo_d_un_etudiant(etudid) if semestre_id == None: sesSems = [sem for sem in etud["sems"] if 1 <= sem["semestre_id"] <= 4] else: @@ -1230,7 +1219,7 @@ def get_annee_diplome_semestre(sem): # ---------------------------------------------------------------------------------- -def get_cosemestres_diplomants(context, semBase, avec_meme_formation=False): +def get_cosemestres_diplomants(semBase, avec_meme_formation=False): """Partant d'un semestre de Base = {'formsemestre_id': ..., 'semestre_id': ..., 'annee_debut': ...}, renvoie la liste de tous ses co-semestres (lui-meme inclus) Par co-semestre, s'entend les semestres : diff --git a/app/scodoc/pe_semestretag.py b/app/scodoc/pe_semestretag.py index 314f30a1..779efdf6 100644 --- a/app/scodoc/pe_semestretag.py +++ b/app/scodoc/pe_semestretag.py @@ -73,9 +73,7 @@ class SemestreTag(pe_tagtable.TableTag): # ----------------------------------------------------------------------------- # Fonctions d'initialisation # ----------------------------------------------------------------------------- - def __init__( - self, context, notetable, sem - ): # Initialisation sur la base d'une notetable + def __init__(self, notetable, sem): # Initialisation sur la base d'une notetable """Instantiation d'un objet SemestreTag à partir d'un tableau de note et des informations sur le semestre pour le dater """ @@ -95,7 +93,6 @@ class SemestreTag(pe_tagtable.TableTag): ) # Les attributs spécifiques - self.context = context self.nt = notetable # Les attributs hérités : la liste des étudiants @@ -293,7 +290,7 @@ class SemestreTag(pe_tagtable.TableTag): coeff / self.somme_coeffs if self.somme_coeffs != 0 else 0 ) # le coeff normalisé else: - semtag_prec = SemestreTag(self.context, nt_prec, nt_prec.sem) + semtag_prec = SemestreTag(nt_prec, nt_prec.sem) (note, coeff_norm) = semtag_prec.get_noteEtCoeff_modimpl( modprec_id, etudid, profondeur=profondeur - 1 ) # lecture de la note via le semtag associé au modimpl capitalisé diff --git a/app/scodoc/pe_tools.py b/app/scodoc/pe_tools.py index 278d8e2b..2dc94ea9 100644 --- a/app/scodoc/pe_tools.py +++ b/app/scodoc/pe_tools.py @@ -171,7 +171,7 @@ def add_local_file_to_zip(zipfile, ziproot, pathname, path_in_zip): zipfile.writestr(rooted_path_in_zip, data) -def add_pe_stuff_to_zip(context, zipfile, ziproot): +def add_pe_stuff_to_zip(zipfile, ziproot): """Add auxiliary files to (already opened) zip Put all local files found under config/doc_poursuites_etudes/local and config/doc_poursuites_etudes/distrib diff --git a/app/scodoc/pe_view.py b/app/scodoc/pe_view.py index 9411a0b6..373c36e3 100644 --- a/app/scodoc/pe_view.py +++ b/app/scodoc/pe_view.py @@ -46,7 +46,7 @@ from app.scodoc import pe_jurype from app.scodoc import pe_avislatex -def _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=None): +def _pe_view_sem_recap_form(formsemestre_id, REQUEST=None): H = [ html_sco_header.sco_header(page_title="Avis de poursuite d'études"), """

Génération des avis de poursuites d'études

@@ -75,7 +75,6 @@ def _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=None): def pe_view_sem_recap( - context, formsemestre_id, avis_tmpl_file=None, footer_tmpl_file=None, @@ -88,12 +87,12 @@ def pe_view_sem_recap( et debugger uniquement la partie avis latex """ if REQUEST and REQUEST.REQUEST_METHOD == "GET": - return _pe_view_sem_recap_form(context, formsemestre_id, REQUEST=REQUEST) + return _pe_view_sem_recap_form(formsemestre_id, REQUEST=REQUEST) prefs = sco_preferences.SemPreferences(formsemestre_id=formsemestre_id) semBase = sco_formsemestre.get_formsemestre(formsemestre_id) - jury = pe_jurype.JuryPE(context, semBase) + jury = pe_jurype.JuryPE(semBase) # Ajout avis LaTeX au même zip: etudids = list(jury.syntheseJury.keys()) @@ -108,7 +107,7 @@ def pe_view_sem_recap( else: # template indiqué dans préférences ScoDoc ? template_latex = pe_avislatex.get_code_latex_from_scodoc_preference( - context, formsemestre_id, champ="pe_avis_latex_tmpl" + formsemestre_id, champ="pe_avis_latex_tmpl" ) template_latex = template_latex.strip() @@ -124,7 +123,7 @@ def pe_view_sem_recap( footer_latex = footer_latex else: footer_latex = pe_avislatex.get_code_latex_from_scodoc_preference( - context, formsemestre_id, champ="pe_avis_latex_footer" + formsemestre_id, champ="pe_avis_latex_footer" ) footer_latex = footer_latex.strip() if not footer_latex: @@ -134,13 +133,11 @@ def pe_view_sem_recap( ) # fallback: footer vides tag_annotation_pe = pe_avislatex.get_code_latex_from_scodoc_preference( - context, formsemestre_id, champ="pe_tag_annotation_avis_latex" + formsemestre_id, champ="pe_tag_annotation_avis_latex" ) # Ajout des annotations PE dans un fichier excel - sT = pe_avislatex.table_syntheseAnnotationPE( - context, jury.syntheseJury, tag_annotation_pe - ) + sT = pe_avislatex.table_syntheseAnnotationPE(jury.syntheseJury, tag_annotation_pe) if sT: jury.add_file_to_zip( jury.NOM_EXPORT_ZIP + "_annotationsPE" + scu.XLSX_SUFFIX, sT.excel() @@ -149,7 +146,6 @@ def pe_view_sem_recap( latex_pages = {} # Dictionnaire de la forme nom_fichier => contenu_latex for etudid in etudids: [nom_fichier, contenu_latex] = pe_avislatex.get_avis_poursuite_par_etudiant( - context, jury, etudid, template_latex, @@ -171,7 +167,7 @@ def pe_view_sem_recap( jury.add_file_to_zip("avis/avis_poursuite.tex", doc_latex.encode(PE_LATEX_ENCODING)) # Ajoute image, LaTeX class file(s) and modeles - pe_tools.add_pe_stuff_to_zip(context, jury.zipfile, jury.NOM_EXPORT_ZIP) + pe_tools.add_pe_stuff_to_zip(jury.zipfile, jury.NOM_EXPORT_ZIP) data = jury.get_zipped_data() size = len(data) diff --git a/app/scodoc/sco_abs.py b/app/scodoc/sco_abs.py index 83c7ad46..84c94655 100644 --- a/app/scodoc/sco_abs.py +++ b/app/scodoc/sco_abs.py @@ -63,7 +63,7 @@ def _toboolean(x): return bool(x) -def is_work_saturday(context): +def is_work_saturday(): "Vrai si le samedi est travaillé" return int(sco_preferences.get_preference("work_saturday")) @@ -216,7 +216,7 @@ class ddmmyyyy(object): # d = ddmmyyyy( '21/12/99' ) -def DateRangeISO(context, date_beg, date_end, workable=1): +def DateRangeISO(date_beg, date_end, workable=1): """returns list of dates in [date_beg,date_end] workable = 1 => keeps only workable days""" if not date_beg: @@ -224,7 +224,7 @@ def DateRangeISO(context, date_beg, date_end, workable=1): if not date_end: date_end = date_beg r = [] - work_saturday = is_work_saturday(context) + work_saturday = is_work_saturday() cur = ddmmyyyy(date_beg, work_saturday=work_saturday) end = ddmmyyyy(date_end, work_saturday=work_saturday) while cur <= end: @@ -235,24 +235,23 @@ def DateRangeISO(context, date_beg, date_end, workable=1): return [x.ISO() for x in r] -def day_names(context): +def day_names(): """Returns week day names. If work_saturday property is set, include saturday """ - if is_work_saturday(context): + if is_work_saturday(): return ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"] else: return ["Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"] -def next_iso_day(context, date): +def next_iso_day(date): "return date after date" - d = ddmmyyyy(date, fmt="iso", work_saturday=is_work_saturday(context)) + d = ddmmyyyy(date, fmt="iso", work_saturday=is_work_saturday()) return d.next_day().ISO() def YearTable( - context, year, events=[], firstmonth=9, @@ -283,7 +282,7 @@ def YearTable( events, halfday, dayattributes, - is_work_saturday(context), + is_work_saturday(), pad_width=pad_width, ) ) @@ -624,7 +623,6 @@ AND B.ETUDID = %(etudid)s def add_absence( - context, etudid, jour, matin, @@ -653,10 +651,10 @@ def add_absence( ) cnx.commit() invalidate_abs_etud_date(etudid, jour) - sco_abs_notification.abs_notify(context, etudid, jour) + sco_abs_notification.abs_notify(etudid, jour) -def add_justif(context, etudid, jour, matin, REQUEST, description=None): +def add_justif(etudid, jour, matin, REQUEST, description=None): "Ajoute un justificatif dans la base" # unpublished if _isFarFutur(jour): @@ -678,7 +676,7 @@ def add_justif(context, etudid, jour, matin, REQUEST, description=None): invalidate_abs_etud_date(etudid, jour) -def _add_abslist(context, abslist, REQUEST, moduleimpl_id=None): +def _add_abslist(abslist, REQUEST, moduleimpl_id=None): for a in abslist: etudid, jour, ampm = a.split(":") if ampm == "am": @@ -689,10 +687,10 @@ def _add_abslist(context, abslist, REQUEST, moduleimpl_id=None): raise ValueError("invalid ampm !") # ajoute abs si pas deja absent if count_abs(etudid, jour, jour, matin, moduleimpl_id) == 0: - add_absence(context, etudid, jour, matin, 0, REQUEST, "", moduleimpl_id) + add_absence(etudid, jour, matin, 0, REQUEST, "", moduleimpl_id) -def annule_absence(context, etudid, jour, matin, moduleimpl_id=None): +def annule_absence(etudid, jour, matin, moduleimpl_id=None): """Annule une absence dans la base. N'efface pas l'éventuel justificatif. Args: etudid: @@ -721,7 +719,7 @@ def annule_absence(context, etudid, jour, matin, moduleimpl_id=None): invalidate_abs_etud_date(etudid, jour) -def annule_justif(context, etudid, jour, matin, REQUEST=None): +def annule_justif(etudid, jour, matin, REQUEST=None): "Annule un justificatif" # unpublished matin = _toboolean(matin) @@ -1087,7 +1085,7 @@ def invalidate_abs_etud_date(etudid, date): # was invalidateAbsEtudDate for sem in sems: # Inval cache bulletin et/ou note_table if sco_compute_moy.formsemestre_expressions_use_abscounts( - None, sem["formsemestre_id"] + sem["formsemestre_id"] ): # certaines formules utilisent les absences pdfonly = False diff --git a/app/scodoc/sco_abs_notification.py b/app/scodoc/sco_abs_notification.py index afe9e584..6f7c0dfc 100644 --- a/app/scodoc/sco_abs_notification.py +++ b/app/scodoc/sco_abs_notification.py @@ -50,7 +50,7 @@ from app.scodoc import sco_preferences from app.scodoc import sco_users -def abs_notify(context, etudid, date): +def abs_notify(etudid, date): """Check if notifications are requested and send them Considère le nombre d'absence dans le semestre courant (s'il n'y a pas de semestre courant, ne fait rien, @@ -58,15 +58,15 @@ def abs_notify(context, etudid, date): """ from app.scodoc import sco_abs - sem = retreive_current_formsemestre(context, etudid, date) + sem = retreive_current_formsemestre(etudid, date) if not sem: return # non inscrit a la date, pas de notification nbabs, nbabsjust = sco_abs.get_abs_count(etudid, sem) - do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust) + do_abs_notify(sem, etudid, date, nbabs, nbabsjust) -def do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust): +def do_abs_notify(sem, etudid, date, nbabs, nbabsjust): """Given new counts of absences, check if notifications are requested and send them.""" # prefs fallback to global pref if sem is None: if sem: @@ -76,9 +76,9 @@ def do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust): prefs = sco_preferences.SemPreferences(formsemestre_id=sem["formsemestre_id"]) destinations = abs_notify_get_destinations( - context, sem, prefs, etudid, date, nbabs, nbabsjust + sem, prefs, etudid, date, nbabs, nbabsjust ) - msg = abs_notification_message(context, sem, prefs, etudid, nbabs, nbabsjust) + msg = abs_notification_message(sem, prefs, etudid, nbabs, nbabsjust) if not msg: return # abort @@ -86,9 +86,7 @@ def do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust): abs_notify_max_freq = sco_preferences.get_preference("abs_notify_max_freq") destinations_filtered = [] for email_addr in destinations: - nbdays_since_last_notif = user_nbdays_since_last_notif( - context, email_addr, etudid - ) + nbdays_since_last_notif = user_nbdays_since_last_notif(email_addr, etudid) if (nbdays_since_last_notif is None) or ( nbdays_since_last_notif >= abs_notify_max_freq ): @@ -96,7 +94,6 @@ def do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust): if destinations_filtered: abs_notify_send( - context, destinations_filtered, etudid, msg, @@ -106,9 +103,7 @@ def do_abs_notify(context, sem, etudid, date, nbabs, nbabsjust): ) -def abs_notify_send( - context, destinations, etudid, msg, nbabs, nbabsjust, formsemestre_id -): +def abs_notify_send(destinations, etudid, msg, nbabs, nbabsjust, formsemestre_id): """Actually send the notification by email, and register it in database""" cnx = ndb.GetDBConnexion() log("abs_notify: sending notification to %s" % destinations) @@ -116,7 +111,7 @@ def abs_notify_send( for email in destinations: del msg["To"] msg["To"] = email - sco_emails.sendEmail(context, msg) + sco_emails.sendEmail(msg) ndb.SimpleQuery( """insert into absences_notifications (etudid, email, nbabs, nbabsjust, formsemestre_id) @@ -134,15 +129,13 @@ def abs_notify_send( ) -def abs_notify_get_destinations(context, sem, prefs, etudid, date, nbabs, nbabsjust): +def abs_notify_get_destinations(sem, prefs, etudid, date, nbabs, nbabsjust): """Returns set of destination emails to be notified""" formsemestre_id = sem["formsemestre_id"] destinations = [] # list of email address to notify - if abs_notify_is_above_threshold( - context, etudid, nbabs, nbabsjust, formsemestre_id - ): + if abs_notify_is_above_threshold(etudid, nbabs, nbabsjust, formsemestre_id): if sem and prefs["abs_notify_respsem"]: # notifie chaque responsable du semestre for responsable_id in sem["responsables"]: @@ -162,7 +155,7 @@ def abs_notify_get_destinations(context, sem, prefs, etudid, date, nbabs, nbabsj # à cette date # nb: on pourrait prevoir d'utiliser un autre format de message pour ce cas if sem and prefs["abs_notify_respeval"]: - mods = mod_with_evals_at_date(context, date, etudid) + mods = mod_with_evals_at_date(date, etudid) for mod in mods: u = sco_users.user_info(mod["responsable_id"]) if u["email"]: @@ -174,7 +167,7 @@ def abs_notify_get_destinations(context, sem, prefs, etudid, date, nbabs, nbabsj return destinations -def abs_notify_is_above_threshold(context, etudid, nbabs, nbabsjust, formsemestre_id): +def abs_notify_is_above_threshold(etudid, nbabs, nbabsjust, formsemestre_id): """True si il faut notifier les absences (indépendemment du destinataire) nbabs: nombre d'absence (de tous types, unité de compte = demi-journée) @@ -189,7 +182,7 @@ def abs_notify_is_above_threshold(context, etudid, nbabs, nbabsjust, formsemestr abs_notify_abs_increment = sco_preferences.get_preference( "abs_notify_abs_increment", formsemestre_id ) - nbabs_last_notified = etud_nbabs_last_notified(context, etudid, formsemestre_id) + nbabs_last_notified = etud_nbabs_last_notified(etudid, formsemestre_id) if nbabs_last_notified == 0: if nbabs > abs_notify_abs_threshold: @@ -202,7 +195,7 @@ def abs_notify_is_above_threshold(context, etudid, nbabs, nbabsjust, formsemestr return False -def etud_nbabs_last_notified(context, etudid, formsemestre_id=None): +def etud_nbabs_last_notified(etudid, formsemestre_id=None): """nbabs lors de la dernière notification envoyée pour cet étudiant dans ce semestre ou sans semestre (ce dernier cas est nécessaire pour la transition au nouveau code)""" cnx = ndb.GetDBConnexion() @@ -218,7 +211,7 @@ def etud_nbabs_last_notified(context, etudid, formsemestre_id=None): return 0 -def user_nbdays_since_last_notif(context, email_addr, etudid): +def user_nbdays_since_last_notif(email_addr, etudid): """nb days since last notification to this email, or None if no previous notification""" cnx = ndb.GetDBConnexion() cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) @@ -234,7 +227,7 @@ def user_nbdays_since_last_notif(context, email_addr, etudid): return None -def abs_notification_message(context, sem, prefs, etudid, nbabs, nbabsjust): +def abs_notification_message(sem, prefs, etudid, nbabs, nbabsjust): """Mime notification message based on template. returns None if sending should be canceled (emplty template). """ @@ -243,7 +236,7 @@ def abs_notification_message(context, sem, prefs, etudid, nbabs, nbabsjust): etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] # Variables accessibles dans les balises du template: %(nom_variable)s : - values = sco_bulletins.make_context_dict(context, sem, etud) + values = sco_bulletins.make_context_dict(sem, etud) values["nbabs"] = nbabs values["nbabsjust"] = nbabsjust @@ -270,7 +263,7 @@ def abs_notification_message(context, sem, prefs, etudid, nbabs, nbabsjust): return msg -def retreive_current_formsemestre(context, etudid, cur_date): +def retreive_current_formsemestre(etudid, cur_date): """Get formsemestre dans lequel etudid est (ou était) inscrit a la date indiquée date est une chaine au format ISO (yyyy-mm-dd) """ @@ -288,7 +281,7 @@ def retreive_current_formsemestre(context, etudid, cur_date): return sem -def mod_with_evals_at_date(context, date_abs, etudid): +def mod_with_evals_at_date(date_abs, etudid): """Liste des moduleimpls avec des evaluations à la date indiquée""" req = """SELECT m.id AS moduleimpl_id, m.* FROM notes_moduleimpl m, notes_evaluation e, notes_moduleimpl_inscription i diff --git a/app/scodoc/sco_abs_views.py b/app/scodoc/sco_abs_views.py index c9151e4d..59b59e35 100644 --- a/app/scodoc/sco_abs_views.py +++ b/app/scodoc/sco_abs_views.py @@ -51,7 +51,6 @@ from app.scodoc.sco_exceptions import ScoValueError def doSignaleAbsence( - context, datedebut, datefin, moduleimpl_id=None, @@ -77,13 +76,12 @@ def doSignaleAbsence( if not moduleimpl_id: moduleimpl_id = None description_abs = description - dates = sco_abs.DateRangeISO(context, datedebut, datefin) + dates = sco_abs.DateRangeISO(datedebut, datefin) nbadded = 0 demijournee = int(demijournee) for jour in dates: if demijournee == 2: sco_abs.add_absence( - context, etudid, jour, False, @@ -93,7 +91,6 @@ def doSignaleAbsence( moduleimpl_id, ) sco_abs.add_absence( - context, etudid, jour, True, @@ -105,7 +102,6 @@ def doSignaleAbsence( nbadded += 2 else: sco_abs.add_absence( - context, etudid, jour, demijournee, @@ -155,12 +151,12 @@ def doSignaleAbsence(
""" % etud ) - H.append(sco_find_etud.form_search_etud(context, REQUEST)) + H.append(sco_find_etud.form_search_etud(REQUEST)) H.append(html_sco_header.sco_footer()) return "\n".join(H) -def SignaleAbsenceEtud(context, REQUEST=None): # etudid implied +def SignaleAbsenceEtud(REQUEST=None): # etudid implied """Formulaire individuel simple de signalement d'une absence""" # brute-force portage from very old dtml code ... etud = sco_etud.get_etud_info(filled=1, REQUEST=REQUEST)[0] @@ -230,7 +226,6 @@ def SignaleAbsenceEtud(context, REQUEST=None): # etudid implied """""" % url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etud["etudid"]), sco_photos.etud_photo_html( - context, etudid=etudid, title="fiche de " + etud["nomprenom"], REQUEST=REQUEST, @@ -281,7 +276,6 @@ Raison: (optionnel) def doJustifAbsence( - context, datedebut, datefin, demijournee, @@ -302,13 +296,12 @@ def doJustifAbsence( etud = sco_etud.get_etud_info(filled=1, etudid=etudid, REQUEST=REQUEST)[0] etudid = etud["etudid"] description_abs = description - dates = sco_abs.DateRangeISO(context, datedebut, datefin) + dates = sco_abs.DateRangeISO(datedebut, datefin) nbadded = 0 demijournee = int(demijournee) for jour in dates: if demijournee == 2: sco_abs.add_justif( - context, etudid=etudid, jour=jour, matin=False, @@ -316,7 +309,6 @@ def doJustifAbsence( description=description_abs, ) sco_abs.add_justif( - context, etudid=etudid, jour=jour, matin=True, @@ -326,7 +318,6 @@ def doJustifAbsence( nbadded += 2 else: sco_abs.add_justif( - context, etudid=etudid, jour=jour, matin=demijournee, @@ -361,12 +352,12 @@ def doJustifAbsence(
""" % etud ) - H.append(sco_find_etud.form_search_etud(context, REQUEST)) + H.append(sco_find_etud.form_search_etud(REQUEST)) H.append(html_sco_header.sco_footer()) return "\n".join(H) -def JustifAbsenceEtud(context, REQUEST=None): # etudid implied +def JustifAbsenceEtud(REQUEST=None): # etudid implied """Formulaire individuel simple de justification d'une absence""" # brute-force portage from very old dtml code ... etud = sco_etud.get_etud_info(filled=1, REQUEST=REQUEST)[0] @@ -383,7 +374,6 @@ def JustifAbsenceEtud(context, REQUEST=None): # etudid implied """
""" % url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid), sco_photos.etud_photo_html( - context, etudid=etudid, title="fiche de " + etud["nomprenom"], REQUEST=REQUEST, @@ -423,22 +413,22 @@ Raison: (optionnel) def doAnnuleAbsence( - context, datedebut, datefin, demijournee, etudid=False, REQUEST=None + datedebut, datefin, demijournee, etudid=False, REQUEST=None ): # etudid implied """Annulation des absences pour une demi journée""" etud = sco_etud.get_etud_info(filled=1, etudid=etudid, REQUEST=REQUEST)[0] etudid = etud["etudid"] - dates = sco_abs.DateRangeISO(context, datedebut, datefin) + dates = sco_abs.DateRangeISO(datedebut, datefin) nbadded = 0 demijournee = int(demijournee) for jour in dates: if demijournee == 2: - sco_abs.annule_absence(context, etudid, jour, False) - sco_abs.annule_absence(context, etudid, jour, True) + sco_abs.annule_absence(etudid, jour, False) + sco_abs.annule_absence(etudid, jour, True) nbadded += 2 else: - sco_abs.annule_absence(context, etudid, jour, demijournee) + sco_abs.annule_absence(etudid, jour, demijournee) nbadded += 1 # H = [ @@ -467,12 +457,12 @@ autre absence pour %(nomprenom)s
""" % etud ) - H.append(sco_find_etud.form_search_etud(context, REQUEST)) + H.append(sco_find_etud.form_search_etud(REQUEST)) H.append(html_sco_header.sco_footer()) return "\n".join(H) -def AnnuleAbsenceEtud(context, REQUEST=None): # etudid implied +def AnnuleAbsenceEtud(REQUEST=None): # etudid implied """Formulaire individuel simple d'annulation d'une absence""" # brute-force portage from very old dtml code ... etud = sco_etud.get_etud_info(filled=1, REQUEST=REQUEST)[0] @@ -490,7 +480,6 @@ def AnnuleAbsenceEtud(context, REQUEST=None): # etudid implied """""" % url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid), sco_photos.etud_photo_html( - context, etudid=etudid, title="fiche de " + etud["nomprenom"], REQUEST=REQUEST, @@ -559,23 +548,21 @@ def AnnuleAbsenceEtud(context, REQUEST=None): # etudid implied return "\n".join(H) -def doAnnuleJustif( - context, datedebut0, datefin0, demijournee, REQUEST=None -): # etudid implied +def doAnnuleJustif(datedebut0, datefin0, demijournee, REQUEST=None): # etudid implied """Annulation d'une justification""" etud = sco_etud.get_etud_info(filled=1, REQUEST=REQUEST)[0] etudid = etud["etudid"] - dates = sco_abs.DateRangeISO(context, datedebut0, datefin0) + dates = sco_abs.DateRangeISO(datedebut0, datefin0) nbadded = 0 demijournee = int(demijournee) for jour in dates: # Attention: supprime matin et après-midi if demijournee == 2: - sco_abs.annule_justif(context, etudid, jour, False, REQUEST=REQUEST) - sco_abs.annule_justif(context, etudid, jour, True, REQUEST=REQUEST) + sco_abs.annule_justif(etudid, jour, False, REQUEST=REQUEST) + sco_abs.annule_justif(etudid, jour, True, REQUEST=REQUEST) nbadded += 2 else: - sco_abs.annule_justif(context, etudid, jour, demijournee, REQUEST=REQUEST) + sco_abs.annule_justif(etudid, jour, demijournee, REQUEST=REQUEST) nbadded += 1 # H = [ @@ -604,12 +591,12 @@ autre absence pour %(nomprenom)s
""" % etud ) - H.append(sco_find_etud.form_search_etud(context, REQUEST)) + H.append(sco_find_etud.form_search_etud(REQUEST)) H.append(html_sco_header.sco_footer()) return "\n".join(H) -def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None): +def AnnuleAbsencesDatesNoJust(etudid, dates, moduleimpl_id=None): """Supprime les absences non justifiées aux dates indiquées Ne supprime pas les justificatifs éventuels. Args: @@ -634,7 +621,7 @@ def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None): matin = 0 else: raise ValueError("invalid ampm !") - sco_abs.annule_absence(context, etudid, jour, matin, moduleimpl_id) + sco_abs.annule_absence(etudid, jour, matin, moduleimpl_id) return cnx = ndb.GetDBConnexion() cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) @@ -668,14 +655,14 @@ def AnnuleAbsencesDatesNoJust(context, etudid, dates, moduleimpl_id=None): cnx.commit() -def EtatAbsences(context, REQUEST=None): +def EtatAbsences(): """Etat des absences: choix du groupe""" # crude portage from 1999 DTML H = [ html_sco_header.sco_header(page_title="Etat des absences"), """

Etat des absences pour un groupe

""", - formChoixSemestreGroupe(context), + formChoixSemestreGroupe(), """
Date de début (j/m/a) : @@ -694,7 +681,7 @@ def EtatAbsences(context, REQUEST=None): return "\n".join(H) -def formChoixSemestreGroupe(context, all=False): +def formChoixSemestreGroupe(all=False): """partie de formulaire pour le choix d'un semestre et d'un groupe. Si all, donne tous les semestres (même ceux verrouillés). """ @@ -722,7 +709,7 @@ def formChoixSemestreGroupe(context, all=False): return "\n".join(H) -def CalAbs(context, etudid, sco_year=None): +def CalAbs(etudid, sco_year=None): """Calendrier des absences d'un etudiant""" # crude portage from 1999 DTML REQUEST = None # XXX @@ -749,7 +736,7 @@ def CalAbs(context, etudid, sco_year=None): events.append( (str(a["jour"]), "X", "#8EA2C6", "", a["matin"], a["description"]) ) - CalHTML = sco_abs.YearTable(context, anneescolaire, events=events, halfday=1) + CalHTML = sco_abs.YearTable(anneescolaire, events=events, halfday=1) # H = [ @@ -773,7 +760,6 @@ def CalAbs(context, etudid, sco_year=None): % ( url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid), sco_photos.etud_photo_html( - context, etudid=etudid, title="fiche de " + etud["nomprenom"], REQUEST=REQUEST, @@ -796,7 +782,6 @@ def CalAbs(context, etudid, sco_year=None): def ListeAbsEtud( - context, etudid, with_evals=True, format="html", @@ -822,7 +807,7 @@ def ListeAbsEtud( # Liste des absences et titres colonnes tables: titles, columns_ids, absnonjust, absjust = _TablesAbsEtud( - context, etudid, datedebut, with_evals=with_evals, format=format + etudid, datedebut, with_evals=with_evals, format=format ) if REQUEST: base_url_nj = "%s?etudid=%s&absjust_only=0" % (REQUEST.URL0, etudid) @@ -908,7 +893,6 @@ def ListeAbsEtud( def _TablesAbsEtud( - context, etudid, datedebut, with_evals=True, diff --git a/app/scodoc/sco_apogee_compare.py b/app/scodoc/sco_apogee_compare.py index 83219068..25858300 100644 --- a/app/scodoc/sco_apogee_compare.py +++ b/app/scodoc/sco_apogee_compare.py @@ -61,7 +61,7 @@ _help_txt = """ """ -def apo_compare_csv_form(context, REQUEST=None): +def apo_compare_csv_form(): """Form: submit 2 CSV files to compare them.""" H = [ html_sco_header.sco_header(page_title="Comparaison de fichiers Apogée"), @@ -88,7 +88,7 @@ def apo_compare_csv_form(context, REQUEST=None): return "\n".join(H) -def apo_compare_csv(context, A_file, B_file, autodetect=True, REQUEST=None): +def apo_compare_csv(A_file, B_file, autodetect=True): """Page comparing 2 Apogee CSV files""" A = _load_apo_data(A_file, autodetect=autodetect) B = _load_apo_data(B_file, autodetect=autodetect) @@ -98,7 +98,7 @@ def apo_compare_csv(context, A_file, B_file, autodetect=True, REQUEST=None): "

Comparaison de fichiers Apogée

", _help_txt, '
', - _apo_compare_csv(context, A, B, REQUEST=None), + _apo_compare_csv(A, B), "
", """

Autre comparaison

""", html_sco_header.sco_footer(), @@ -119,7 +119,7 @@ def _load_apo_data(csvfile, autodetect=True): return apo_data -def _apo_compare_csv(context, A, B, REQUEST=None): +def _apo_compare_csv(A, B): """Generate html report comparing A and B, two instances of ApoData representing Apogee CSV maquettes. """ @@ -230,7 +230,7 @@ def _apo_compare_csv(context, A, B, REQUEST=None):

""" ) - T = apo_table_compare_etud_results(context, A, B, REQUEST=REQUEST) + T = apo_table_compare_etud_results(A, B) if T.get_nb_rows() > 0: L.append(T.html()) else: @@ -245,7 +245,7 @@ def _apo_compare_csv(context, A, B, REQUEST=None): return "\n".join(L) -def apo_table_compare_etud_results(context, A, B, REQUEST=None): +def apo_table_compare_etud_results(A, B): """""" D = compare_etuds_res(A, B) T = GenTable( diff --git a/app/scodoc/sco_apogee_csv.py b/app/scodoc/sco_apogee_csv.py index fff735b1..deab4e15 100644 --- a/app/scodoc/sco_apogee_csv.py +++ b/app/scodoc/sco_apogee_csv.py @@ -296,7 +296,7 @@ class ApoEtud(dict): def __repr__(self): return "ApoEtud( nom='%s', nip='%s' )" % (self["nom"], self["nip"]) - def lookup_scodoc(self, context, etape_formsemestre_ids): + def lookup_scodoc(self, etape_formsemestre_ids): """Cherche l'étudiant ScoDoc associé à cet étudiant Apogée. S'il n'est pas trouvé (état "orphelin", dans Apo mais pas chez nous), met .etud à None. @@ -323,13 +323,13 @@ class ApoEtud(dict): else: self.etat = ETUD_OK - def associate_sco(self, context, apo_data): + def associate_sco(self, apo_data): """Recherche les valeurs des éléments Apogée pour cet étudiant Set .new_cols """ self.col_elts = {} # {'V1RT': {'R': 'ADM', 'J': '', 'B': 20, 'N': '12.14'}} if self.etat is None: - self.lookup_scodoc(context, apo_data.etape_formsemestre_ids) + self.lookup_scodoc(apo_data.etape_formsemestre_ids) if self.etat != ETUD_OK: self.new_cols = ( self.cols @@ -342,11 +342,9 @@ class ApoEtud(dict): code, None ) # {'R': ADM, 'J': '', 'B': 20, 'N': '12.14'} if el is None: # pas déjà trouvé - cur_sem, autre_sem = self.etud_semestres_de_etape(context, apo_data) + cur_sem, autre_sem = self.etud_semestres_de_etape(apo_data) for sem in apo_data.sems_etape: - el = self.search_elt_in_sem( - context, code, sem, cur_sem, autre_sem - ) + el = self.search_elt_in_sem(code, sem, cur_sem, autre_sem) if el != None: sco_elts[code] = el break @@ -376,7 +374,7 @@ class ApoEtud(dict): # codes = set([apo_data.cols[col_id].code for col_id in apo_data.col_ids]) # return codes - set(sco_elts) - def search_elt_in_sem(self, context, code, sem, cur_sem, autre_sem): + def search_elt_in_sem(self, code, sem, cur_sem, autre_sem): """ VET code jury etape ELP élément pédagogique: UE, module @@ -425,14 +423,14 @@ class ApoEtud(dict): export_res_etape = Se.all_other_validated() if export_res_etape: - return self.comp_elt_annuel(context, etudid, cur_sem, autre_sem) + return self.comp_elt_annuel(etudid, cur_sem, autre_sem) else: return VOID_APO_RES # Element semestre: if code in sem["elt_sem_apo"].split(","): if self.export_res_sem: - return self.comp_elt_semestre(context, nt, decision, etudid) + return self.comp_elt_semestre(nt, decision, etudid) else: return VOID_APO_RES @@ -471,7 +469,7 @@ class ApoEtud(dict): # return None # element Apogee non trouvé dans ce semestre - def comp_elt_semestre(self, context, nt, decision, etudid): + def comp_elt_semestre(self, nt, decision, etudid): """Calcul résultat apo semestre""" # resultat du semestre decision_apo = code_scodoc_to_apo(decision["code"]) @@ -486,7 +484,7 @@ class ApoEtud(dict): note_str = _apo_fmt_note(note) return dict(N=note_str, B=20, J="", R=decision_apo, M="") - def comp_elt_annuel(self, context, etudid, cur_sem, autre_sem): + def comp_elt_annuel(self, etudid, cur_sem, autre_sem): """Calcul resultat annuel (VET) à partir du semestre courant et de l'autre (le suivant ou le précédent complétant l'année scolaire) """ @@ -517,7 +515,7 @@ class ApoEtud(dict): if not autre_sem: # formations monosemestre, ou code VET semestriel, # ou jury intermediaire et etudiant non redoublant... - return self.comp_elt_semestre(context, cur_nt, cur_decision, etudid) + return self.comp_elt_semestre(cur_nt, cur_decision, etudid) decision_apo = code_scodoc_to_apo(cur_decision["code"]) @@ -554,7 +552,7 @@ class ApoEtud(dict): return dict(N=note_str, B=20, J="", R=decision_apo_annuelle, M="") - def etud_semestres_de_etape(self, context, apo_data): + def etud_semestres_de_etape(self, apo_data): """ Lorsqu'on a une formation semestrialisée mais avec un code étape annuel, il faut considérer les deux semestres ((S1,S2) ou (S3,S4)) pour calculer @@ -712,10 +710,9 @@ class ApoData(object): def set_periode(self, periode): # currently unused self.periode = periode - def setup(self, context): + def setup(self): """Recherche semestres ScoDoc concernés""" - self.context = context - self.sems_etape = comp_apo_sems(context, self.etape_apogee, self.annee_scolaire) + self.sems_etape = comp_apo_sems(self.etape_apogee, self.annee_scolaire) self.etape_formsemestre_ids = {s["formsemestre_id"] for s in self.sems_etape} if self.periode != None: self.sems_periode = [ @@ -1114,7 +1111,7 @@ def _apo_skip_section(f): # ------------------------------------- -def comp_apo_sems(context, etape_apogee, annee_scolaire): +def comp_apo_sems(etape_apogee, annee_scolaire): """ :param etape_apogee: etape (string or ApoEtapeVDI) :param annee_scolaire: annee (int) @@ -1125,7 +1122,7 @@ def comp_apo_sems(context, etape_apogee, annee_scolaire): ) -def nar_etuds_table(context, apo_data, NAR_Etuds): +def nar_etuds_table(apo_data, NAR_Etuds): """Liste les NAR -> excel table""" code_etape = apo_data.etape_apogee today = datetime.datetime.today().strftime("%d/%m/%y") @@ -1183,7 +1180,6 @@ def nar_etuds_table(context, apo_data, NAR_Etuds): def export_csv_to_apogee( - context, apo_csv_data, periode=None, dest_zip=None, @@ -1211,11 +1207,11 @@ def export_csv_to_apogee( export_res_sdj=export_res_sdj, export_res_rat=export_res_rat, ) - apo_data.setup(context) # -> .sems_etape + apo_data.setup() # -> .sems_etape for e in apo_data.etuds: - e.lookup_scodoc(context, apo_data.etape_formsemestre_ids) - e.associate_sco(context, apo_data) + e.lookup_scodoc(apo_data.etape_formsemestre_ids) + e.associate_sco(apo_data) # Ré-écrit le fichier Apogée f = io.StringIO() @@ -1225,7 +1221,7 @@ def export_csv_to_apogee( # Table des NAR: NAR_Etuds = [e for e in apo_data.etuds if e.is_NAR] if NAR_Etuds: - nar_xls = nar_etuds_table(context, apo_data, NAR_Etuds) + nar_xls = nar_etuds_table(apo_data, NAR_Etuds) else: nar_xls = None diff --git a/app/scodoc/sco_archives.py b/app/scodoc/sco_archives.py index 5aea4c6b..2dc2f65f 100644 --- a/app/scodoc/sco_archives.py +++ b/app/scodoc/sco_archives.py @@ -109,7 +109,7 @@ class BaseArchiver(object): scu.GSL.release() return obj_dir - def list_oids(self, context): + def list_oids(self): """ :return: list of archive oids """ @@ -228,7 +228,7 @@ class BaseArchiver(object): # XXX très incomplet: devrait inférer et assigner un type MIME archive_id = self.get_id_from_name(oid, archive_name) data = self.get(archive_id, filename) - ext = os.path.splitext(scu.strlower(filename))[1] + ext = os.path.splitext(filename.lower())[1] if ext == ".html" or ext == ".htm": return data elif ext == ".xml": @@ -262,7 +262,6 @@ PVArchive = SemsArchiver() def do_formsemestre_archive( - context, REQUEST, formsemestre_id, group_ids=[], # si indiqué, ne prend que ces groupes @@ -297,14 +296,12 @@ def do_formsemestre_archive( etudids = [m["etudid"] for m in groups_infos.members] # Tableau recap notes en XLS (pour tous les etudiants, n'utilise pas les groupes) - data, _, _ = make_formsemestre_recapcomplet( - context, REQUEST, formsemestre_id, format="xls" - ) + data, _, _ = make_formsemestre_recapcomplet(formsemestre_id, format="xls") if data: PVArchive.store(archive_id, "Tableau_moyennes" + scu.XLSX_SUFFIX, data) # Tableau recap notes en HTML (pour tous les etudiants, n'utilise pas les groupes) data, _, _ = make_formsemestre_recapcomplet( - context, REQUEST, formsemestre_id, format="html", disable_etudlink=True + formsemestre_id, format="html", disable_etudlink=True ) if data: data = "\n".join( @@ -324,25 +321,24 @@ def do_formsemestre_archive( # Bulletins en XML (pour tous les etudiants, n'utilise pas les groupes) data, _, _ = make_formsemestre_recapcomplet( - context, REQUEST, formsemestre_id, format="xml", xml_with_decisions=True + formsemestre_id, format="xml", xml_with_decisions=True ) if data: PVArchive.store(archive_id, "Bulletins.xml", data) # Decisions de jury, en XLS data = sco_pvjury.formsemestre_pvjury( - context, formsemestre_id, format="xls", REQUEST=REQUEST, publish=False + formsemestre_id, format="xls", REQUEST=REQUEST, publish=False ) if data: PVArchive.store(archive_id, "Decisions_Jury" + scu.XLSX_SUFFIX, data) # Classeur bulletins (PDF) data, _ = sco_bulletins_pdf.get_formsemestre_bulletins_pdf( - context, formsemestre_id, REQUEST, version=bulVersion + formsemestre_id, REQUEST, version=bulVersion ) if data: PVArchive.store(archive_id, "Bulletins.pdf", data) # Lettres individuelles (PDF): data = sco_pvpdf.pdf_lettres_individuelles( - context, formsemestre_id, etudids=etudids, date_jury=date_jury, @@ -352,13 +348,9 @@ def do_formsemestre_archive( if data: PVArchive.store(archive_id, "CourriersDecisions%s.pdf" % groups_filename, data) # PV de jury (PDF): - dpv = sco_pvjury.dict_pvjury( - context, formsemestre_id, etudids=etudids, with_prev=True - ) + dpv = sco_pvjury.dict_pvjury(formsemestre_id, etudids=etudids, with_prev=True) data = sco_pvpdf.pvjury_pdf( - context, dpv, - REQUEST, date_commission=date_commission, date_jury=date_jury, numeroArrete=numeroArrete, @@ -372,7 +364,7 @@ def do_formsemestre_archive( PVArchive.store(archive_id, "PV_Jury%s.pdf" % groups_filename, data) -def formsemestre_archive(context, REQUEST, formsemestre_id, group_ids=[]): +def formsemestre_archive(REQUEST, formsemestre_id, group_ids=[]): """Make and store new archive for this formsemestre. (all students or only selected groups) """ @@ -474,7 +466,6 @@ enregistrés et non modifiables, on peut les retrouver ultérieurement. else: tf[2]["anonymous"] = False do_formsemestre_archive( - context, REQUEST, formsemestre_id, group_ids=group_ids, diff --git a/app/scodoc/sco_archives_etud.py b/app/scodoc/sco_archives_etud.py index 231f3f80..d14ca48a 100644 --- a/app/scodoc/sco_archives_etud.py +++ b/app/scodoc/sco_archives_etud.py @@ -232,12 +232,11 @@ def etud_get_archived_file(REQUEST, etudid, archive_name, filename): # --- Upload d'un ensemble de fichiers (pour un groupe d'étudiants) -def etudarchive_generate_excel_sample(context, group_id=None, REQUEST=None): +def etudarchive_generate_excel_sample(group_id=None, REQUEST=None): """Feuille excel pour import fichiers etudiants (utilisé pour admissions)""" fmt = sco_import_etuds.sco_import_format() data = sco_import_etuds.sco_import_generate_excel_sample( fmt, - context=context, group_ids=[group_id], only_tables=["identite"], exclude_cols=[ @@ -248,14 +247,13 @@ def etudarchive_generate_excel_sample(context, group_id=None, REQUEST=None): "photo_filename", ], extra_cols=["fichier_a_charger"], - REQUEST=REQUEST, ) return sco_excel.send_excel_file( REQUEST, data, "ImportFichiersEtudiants" + scu.XLSX_SUFFIX ) -def etudarchive_import_files_form(context, group_id, REQUEST=None): +def etudarchive_import_files_form(group_id, REQUEST=None): """Formulaire pour importation fichiers d'un groupe""" H = [ html_sco_header.sco_header( @@ -316,25 +314,21 @@ def etudarchive_import_files_form(context, group_id, REQUEST=None): ) else: return etudarchive_import_files( - context, group_id=tf[2]["group_id"], xlsfile=tf[2]["xlsfile"], zipfile=tf[2]["zipfile"], - REQUEST=REQUEST, description=tf[2]["description"], ) -def etudarchive_import_files( - context, group_id=None, xlsfile=None, zipfile=None, REQUEST=None, description="" -): - def callback(context, etud, data, filename, REQUEST): +def etudarchive_import_files(group_id=None, xlsfile=None, zipfile=None, description=""): + def callback(etud, data, filename): _store_etud_file_to_new_archive(etud["etudid"], data, filename, description) filename_title = "fichier_a_charger" page_title = "Téléchargement de fichiers associés aux étudiants" # Utilise la fontion au depart developpee pour les photos r = sco_trombino.zip_excel_import_files( - context, xlsfile, zipfile, REQUEST, callback, filename_title, page_title + xlsfile, zipfile, callback, filename_title, page_title ) return r + html_sco_header.sco_footer() diff --git a/app/scodoc/sco_bulletins.py b/app/scodoc/sco_bulletins.py index 53e6286d..09b426f8 100644 --- a/app/scodoc/sco_bulletins.py +++ b/app/scodoc/sco_bulletins.py @@ -80,7 +80,7 @@ from app.scodoc import sco_bulletins_legacy from app.scodoc import sco_bulletins_ucac # format expérimental UCAC Cameroun -def make_context_dict(context, sem, etud): +def make_context_dict(sem, etud): """Construit dictionnaire avec valeurs pour substitution des textes (preferences bul_pdf_*) """ @@ -122,7 +122,7 @@ def make_context_dict(context, sem, etud): def formsemestre_bulletinetud_dict( - context, formsemestre_id, etudid, version="long", REQUEST=None + formsemestre_id, etudid, version="long", REQUEST=None ): """Collecte informations pour bulletin de notes Retourne un dictionnaire (avec valeur par défaut chaine vide). @@ -179,7 +179,6 @@ def formsemestre_bulletinetud_dict( # --- Decision Jury infos, dpv = etud_descr_situation_semestre( - context, etudid, formsemestre_id, format="html", @@ -257,7 +256,7 @@ def formsemestre_bulletinetud_dict( rang = "" rang_gr, ninscrits_gr, gr_name = get_etud_rangs_groups( - context, etudid, formsemestre_id, partitions, partitions_etud_groups, nt + etudid, formsemestre_id, partitions, partitions_etud_groups, nt ) if nt.get_moduleimpls_attente(): @@ -322,7 +321,7 @@ def formsemestre_bulletinetud_dict( else: u["ects"] = "-" modules, ue_attente = _ue_mod_bulletin( - context, etudid, formsemestre_id, ue["ue_id"], modimpls, nt, version + etudid, formsemestre_id, ue["ue_id"], modimpls, nt, version ) # u["modules"] = modules # detail des modules de l'UE (dans le semestre courant) @@ -353,7 +352,6 @@ def formsemestre_bulletinetud_dict( ) # > toutes notes u["modules_capitalized"], _ = _ue_mod_bulletin( - context, etudid, formsemestre_id, ue_status["capitalized_ue_id"], @@ -387,7 +385,7 @@ def formsemestre_bulletinetud_dict( I["matieres_modules"].update(_sort_mod_by_matiere(modules, nt, etudid)) # - C = make_context_dict(context, I["sem"], I["etud"]) + C = make_context_dict(I["sem"], I["etud"]) C.update(I) # # log( 'C = \n%s\n' % pprint.pformat(C) ) # tres pratique pour voir toutes les infos dispo @@ -409,7 +407,7 @@ def _sort_mod_by_matiere(modlist, nt, etudid): return matmod -def _ue_mod_bulletin(context, etudid, formsemestre_id, ue_id, modimpls, nt, version): +def _ue_mod_bulletin(etudid, formsemestre_id, ue_id, modimpls, nt, version): """Infos sur les modules (et évaluations) dans une UE (ajoute les informations aux modimpls) Result: liste de modules de l'UE avec les infos dans chacun (seulement ceux où l'étudiant est inscrit). @@ -600,7 +598,7 @@ def _ue_mod_bulletin(context, etudid, formsemestre_id, ue_id, modimpls, nt, vers def get_etud_rangs_groups( - context, etudid, formsemestre_id, partitions, partitions_etud_groups, nt + etudid, formsemestre_id, partitions, partitions_etud_groups, nt ): """Ramene rang et nb inscrits dans chaque partition""" rang_gr, ninscrits_gr, gr_name = {}, {}, {} @@ -624,7 +622,6 @@ def get_etud_rangs_groups( def etud_descr_situation_semestre( - context, etudid, formsemestre_id, ne="", @@ -722,7 +719,7 @@ def etud_descr_situation_semestre( infos["descr_decision_jury"] = "Défaillant%s" % ne infos["situation"] += " " + infos["descr_defaillance"] - dpv = sco_pvjury.dict_pvjury(context, formsemestre_id, etudids=[etudid]) + dpv = sco_pvjury.dict_pvjury(formsemestre_id, etudids=[etudid]) if not show_decisions: return infos, dpv @@ -764,7 +761,6 @@ def etud_descr_situation_semestre( # ------ Page bulletin def formsemestre_bulletinetud( - context, etudid=None, formsemestre_id=None, format="html", @@ -782,7 +778,6 @@ def formsemestre_bulletinetud( return scu.log_unknown_etud(REQUEST, format=format) bulletin = do_formsemestre_bulletinetud( - context, formsemestre_id, etudid, format=format, @@ -798,7 +793,7 @@ def formsemestre_bulletinetud( sem = sco_formsemestre.get_formsemestre(formsemestre_id) H = [ _formsemestre_bulletinetud_header_html( - context, etud, etudid, sem, formsemestre_id, format, version, REQUEST + etud, etudid, sem, formsemestre_id, format, version, REQUEST ), bulletin, ] @@ -852,7 +847,6 @@ def can_send_bulletin_by_mail(formsemestre_id): def do_formsemestre_bulletinetud( - context, formsemestre_id, etudid, version="long", # short, long, selectedevals @@ -870,7 +864,6 @@ def do_formsemestre_bulletinetud( """ if format == "xml": bul = sco_bulletins_xml.make_xml_formsemestre_bulletinetud( - context, formsemestre_id, etudid, REQUEST=REQUEST, @@ -883,7 +876,6 @@ def do_formsemestre_bulletinetud( elif format == "json": bul = sco_bulletins_json.make_json_formsemestre_bulletinetud( - context, formsemestre_id, etudid, REQUEST=REQUEST, @@ -893,20 +885,17 @@ def do_formsemestre_bulletinetud( ) return bul, "" - I = formsemestre_bulletinetud_dict( - context, formsemestre_id, etudid, REQUEST=REQUEST - ) + I = formsemestre_bulletinetud_dict(formsemestre_id, etudid, REQUEST=REQUEST) etud = I["etud"] if format == "html": htm, _ = sco_bulletins_generator.make_formsemestre_bulletinetud( - context, I, version=version, format="html", REQUEST=REQUEST + I, version=version, format="html", REQUEST=REQUEST ) return htm, I["filigranne"] elif format == "pdf" or format == "pdfpart": bul, filename = sco_bulletins_generator.make_formsemestre_bulletinetud( - context, I, version=version, format="pdf", @@ -931,11 +920,11 @@ def do_formsemestre_bulletinetud( htm = "" # speed up if html version not needed else: htm, _ = sco_bulletins_generator.make_formsemestre_bulletinetud( - context, I, version=version, format="html", REQUEST=REQUEST + I, version=version, format="html", REQUEST=REQUEST ) pdfdata, filename = sco_bulletins_generator.make_formsemestre_bulletinetud( - context, I, version=version, format="pdf", REQUEST=REQUEST + I, version=version, format="pdf", REQUEST=REQUEST ) if prefer_mail_perso: @@ -953,7 +942,7 @@ def do_formsemestre_bulletinetud( ) + htm return h, I["filigranne"] # - mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr) + mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr) emaillink = '%s' % ( recipient_addr, recipient_addr, @@ -968,7 +957,7 @@ def do_formsemestre_bulletinetud( raise ValueError("do_formsemestre_bulletinetud: invalid format (%s)" % format) -def mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr): +def mail_bulletin(formsemestre_id, I, pdfdata, filename, recipient_addr): """Send bulletin by email to etud If bul_mail_list_abs pref is true, put list of absences in mail body (text). """ @@ -991,7 +980,7 @@ def mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr if sco_preferences.get_preference("bul_mail_list_abs"): hea += "\n\n" + sco_abs_views.ListeAbsEtud( - context, etud["etudid"], with_evals=False, format="text" + etud["etudid"], with_evals=False, format="text" ) msg = MIMEMultipart() @@ -1015,11 +1004,10 @@ def mail_bulletin(context, formsemestre_id, I, pdfdata, filename, recipient_addr email.encoders.encode_base64(att) msg.attach(att) log("mail bulletin a %s" % msg["To"]) - sco_emails.sendEmail(context, msg) + sco_emails.sendEmail(msg) def _formsemestre_bulletinetud_header_html( - context, etud, etudid, sem, @@ -1095,7 +1083,7 @@ def _formsemestre_bulletinetud_header_html( { "title": 'Version papier (pdf, format "%s")' % sco_bulletins_generator.bulletin_get_class_name_displayed( - context, formsemestre_id + formsemestre_id ), "endpoint": endpoint, "args": { @@ -1220,7 +1208,7 @@ def _formsemestre_bulletinetud_header_html( % ( url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid), sco_photos.etud_photo_html( - context, etud, title="fiche de " + etud["nom"], REQUEST=REQUEST + etud, title="fiche de " + etud["nom"], REQUEST=REQUEST ), ) ) diff --git a/app/scodoc/sco_bulletins_generator.py b/app/scodoc/sco_bulletins_generator.py index fb8584bc..d2ecdddd 100644 --- a/app/scodoc/sco_bulletins_generator.py +++ b/app/scodoc/sco_bulletins_generator.py @@ -85,7 +85,7 @@ def bulletin_get_class(class_name): return BULLETIN_CLASSES[class_name] -def bulletin_get_class_name_displayed(context, formsemestre_id): +def bulletin_get_class_name_displayed(formsemestre_id): """Le nom du générateur utilisé, en clair""" from app.scodoc import sco_preferences @@ -106,7 +106,6 @@ class BulletinGenerator(object): def __init__( self, - context, infos, authuser=None, version="long", @@ -117,7 +116,6 @@ class BulletinGenerator(object): if not version in scu.BULLETINS_VERSIONS: raise ValueError("invalid version code !") - self.context = context self.infos = infos self.authuser = authuser # nécessaire pour version HTML qui contient liens dépendant de l'utilisateur self.version = version @@ -259,7 +257,6 @@ class BulletinGenerator(object): # --------------------------------------------------------------------------- def make_formsemestre_bulletinetud( - context, infos, version="long", # short, long, selectedevals format="pdf", # html, pdf @@ -289,7 +286,6 @@ def make_formsemestre_bulletinetud( try: PDFLOCK.acquire() bul_generator = gen_class( - context, infos, authuser=REQUEST.AUTHENTICATED_USER, version=version, @@ -305,7 +301,6 @@ def make_formsemestre_bulletinetud( bul_class_name = bulletin_default_class_name() gen_class = bulletin_get_class(bul_class_name) bul_generator = gen_class( - context, infos, authuser=REQUEST.AUTHENTICATED_USER, version=version, diff --git a/app/scodoc/sco_bulletins_json.py b/app/scodoc/sco_bulletins_json.py index cc6ef783..b209abd0 100644 --- a/app/scodoc/sco_bulletins_json.py +++ b/app/scodoc/sco_bulletins_json.py @@ -47,7 +47,6 @@ from app.scodoc import sco_etud def make_json_formsemestre_bulletinetud( - context, formsemestre_id, etudid, REQUEST=None, @@ -58,7 +57,6 @@ def make_json_formsemestre_bulletinetud( """Renvoie bulletin en chaine JSON""" d = formsemestre_bulletinetud_published_dict( - context, formsemestre_id, etudid, force_publishing=force_publishing, @@ -77,7 +75,6 @@ def make_json_formsemestre_bulletinetud( # pour simplifier le code, mais attention a la maintenance !) # def formsemestre_bulletinetud_published_dict( - context, formsemestre_id, etudid, force_publishing=False, @@ -129,9 +126,7 @@ def formsemestre_bulletinetud_published_dict( nom=scu.quote_xml_attr(etudinfo["nom"]), prenom=scu.quote_xml_attr(etudinfo["prenom"]), civilite=scu.quote_xml_attr(etudinfo["civilite_str"]), - photo_url=scu.quote_xml_attr( - sco_photos.etud_photo_url(context, etudinfo, fast=True) - ), + photo_url=scu.quote_xml_attr(sco_photos.etud_photo_url(etudinfo, fast=True)), email=scu.quote_xml_attr(etudinfo["email"]), emailperso=scu.quote_xml_attr(etudinfo["emailperso"]), ) @@ -164,7 +159,7 @@ def formsemestre_bulletinetud_published_dict( else: rang = str(nt.get_etud_rang(etudid)) rang_gr, ninscrits_gr, gr_name = sco_bulletins.get_etud_rangs_groups( - context, etudid, formsemestre_id, partitions, partitions_etud_groups, nt + etudid, formsemestre_id, partitions, partitions_etud_groups, nt ) d["note"] = dict( @@ -341,7 +336,6 @@ def formsemestre_bulletinetud_published_dict( or xml_with_decisions ): infos, dpv = sco_bulletins.etud_descr_situation_semestre( - context, etudid, formsemestre_id, format="xml", diff --git a/app/scodoc/sco_bulletins_legacy.py b/app/scodoc/sco_bulletins_legacy.py index 7a82034a..2efa86bf 100644 --- a/app/scodoc/sco_bulletins_legacy.py +++ b/app/scodoc/sco_bulletins_legacy.py @@ -56,7 +56,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): Renvoie une liste d'objets platypus """ objects = sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_title"], self.infos, self.FieldStyle + self.preferences["bul_pdf_title"], self.infos, self.FieldStyle ) objects.append( Spacer(1, 5 * mm) @@ -77,7 +77,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): Renvoie une liste d'objets PLATYPUS (eg instance de Table). """ P, pdfTableStyle, colWidths = _bulletin_pdf_table_legacy( - self.context, self.infos, version=self.version + self.infos, version=self.version ) return [self.buildTableObject(P, pdfTableStyle, colWidths)] @@ -85,7 +85,6 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): """Génère la table centrale du bulletin de notes: chaine HTML""" I = self.infos formsemestre_id = self.infos["formsemestre_id"] - context = self.context bul_show_abs_modules = sco_preferences.get_preference( "bul_show_abs_modules", formsemestre_id @@ -285,7 +284,6 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): # ----- DECISION JURY if self.preferences["bul_show_decision"]: objects += sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_caption"], self.infos, self.FieldStyle, @@ -354,7 +352,6 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): L = [ [ sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_sig_left"], self.infos, self.FieldStyle, @@ -366,7 +363,6 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator): if show_right: L[0].append( sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_sig_right"], self.infos, self.FieldStyle, @@ -435,7 +431,7 @@ class BulTableStyle(object): self.pdfTableStyle.append(("LINEABOVE", (0, i), (-1, i), 1, self.MODSEPCOLOR)) -def _bulletin_pdf_table_legacy(context, I, version="long"): +def _bulletin_pdf_table_legacy(I, version="long"): """Génère la table centrale du bulletin de notes Renvoie un triplet: - table (liste de listes de chaines de caracteres) diff --git a/app/scodoc/sco_bulletins_pdf.py b/app/scodoc/sco_bulletins_pdf.py index 1c28032b..9892850e 100644 --- a/app/scodoc/sco_bulletins_pdf.py +++ b/app/scodoc/sco_bulletins_pdf.py @@ -76,7 +76,6 @@ def pdfassemblebulletins( pagesbookmarks, filigranne=None, server_name="", - context=None, ): "generate PDF document from a list of PLATYPUS objects" if not objects: @@ -109,9 +108,7 @@ def pdfassemblebulletins( return data -def process_field( - context, field, cdict, style, suppress_empty_pars=False, format="pdf" -): +def process_field(field, cdict, style, suppress_empty_pars=False, format="pdf"): """Process a field given in preferences, returns - if format = 'pdf': a list of Platypus objects - if format = 'html' : a string @@ -165,9 +162,7 @@ def process_field( return sco_pdf.makeParas(text, style, suppress_empty=suppress_empty_pars) -def get_formsemestre_bulletins_pdf( - context, formsemestre_id, REQUEST, version="selectedevals" -): +def get_formsemestre_bulletins_pdf(formsemestre_id, REQUEST, version="selectedevals"): "document pdf et filename" from app.scodoc import sco_bulletins @@ -183,7 +178,6 @@ def get_formsemestre_bulletins_pdf( i = 1 for etudid in nt.get_etudids(): frag, filigranne = sco_bulletins.do_formsemestre_bulletinetud( - context, formsemestre_id, etudid, format="pdfpart", @@ -210,7 +204,6 @@ def get_formsemestre_bulletins_pdf( bookmarks, filigranne=filigrannes, server_name=server_name, - context=context, ) finally: sco_pdf.PDFLOCK.release() @@ -225,7 +218,7 @@ def get_formsemestre_bulletins_pdf( return pdfdoc, filename -def get_etud_bulletins_pdf(context, etudid, REQUEST, version="selectedevals"): +def get_etud_bulletins_pdf(etudid, REQUEST, version="selectedevals"): "Bulletins pdf de tous les semestres de l'étudiant, et filename" from app.scodoc import sco_bulletins @@ -236,7 +229,6 @@ def get_etud_bulletins_pdf(context, etudid, REQUEST, version="selectedevals"): i = 1 for sem in etud["sems"]: frag, filigranne = sco_bulletins.do_formsemestre_bulletinetud( - context, sem["formsemestre_id"], etudid, format="pdfpart", @@ -262,7 +254,6 @@ def get_etud_bulletins_pdf(context, etudid, REQUEST, version="selectedevals"): bookmarks, filigranne=filigrannes, server_name=server_name, - context=context, ) finally: sco_pdf.PDFLOCK.release() diff --git a/app/scodoc/sco_bulletins_signature.py b/app/scodoc/sco_bulletins_signature.py index 4e888a7b..120cbbf8 100644 --- a/app/scodoc/sco_bulletins_signature.py +++ b/app/scodoc/sco_bulletins_signature.py @@ -56,10 +56,10 @@ et sur page "réglages bulletin" (avec formsemestre_id) # import os -# def form_change_bul_sig(context, side, formsemestre_id=None, REQUEST=None): +# def form_change_bul_sig(side, formsemestre_id=None, REQUEST=None): # """Change pdf signature""" # filename = _get_sig_existing_filename( -# context, side, formsemestre_id=formsemestre_id +# side, formsemestre_id=formsemestre_id # ) # if side == "left": # sidetxt = "gauche" @@ -77,12 +77,12 @@ et sur page "réglages bulletin" (avec formsemestre_id) # "

Photo actuelle (%(signatureloc)s): " -# def get_bul_sig_img(context, side, formsemestre_id=None): +# def get_bul_sig_img(side, formsemestre_id=None): # "send back signature image data" # # slow, not cached, used for unfrequent access (do not bypass python) -# def _sig_filename(context, side, formsemestre_id=None): +# def _sig_filename(side, formsemestre_id=None): # if not side in ("left", "right"): # raise ValueError("side must be left or right") # dirs = [SCODOC_LOGOS_DIR, scu.get_dept_id()] @@ -92,13 +92,13 @@ et sur page "réglages bulletin" (avec formsemestre_id) # return os.path.join(*dirs) -# def _get_sig_existing_filename(context, side, formsemestre_id=None): +# def _get_sig_existing_filename(side, formsemestre_id=None): # "full path to signature to use, or None if no signature available" # if formsemestre_id: -# filename = _sig_filename(context, side, formsemestre_id=formsemestre_id) +# filename = _sig_filename(side, formsemestre_id=formsemestre_id) # if os.path.exists(filename): # return filename -# filename = _sig_filename(context, side) +# filename = _sig_filename(side) # if os.path.exists(filename): # return filename # else: diff --git a/app/scodoc/sco_bulletins_standard.py b/app/scodoc/sco_bulletins_standard.py index e1758446..3397139f 100644 --- a/app/scodoc/sco_bulletins_standard.py +++ b/app/scodoc/sco_bulletins_standard.py @@ -76,7 +76,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): Renvoie une liste d'objets platypus """ objects = sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_title"], self.infos, self.FieldStyle + self.preferences["bul_pdf_title"], self.infos, self.FieldStyle ) objects.append( Spacer(1, 5 * mm) @@ -179,14 +179,12 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): # ----- DECISION JURY if self.preferences["bul_show_decision"]: Op += sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_caption"], self.infos, self.FieldStyle, format="pdf", ) field = sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_caption"], self.infos, self.FieldStyle, @@ -211,7 +209,6 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): L = [ [ sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_sig_left"], self.infos, self.FieldStyle, @@ -223,7 +220,6 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): if show_right: L[0].append( sco_bulletins_pdf.process_field( - self.context, self.preferences["bul_pdf_sig_right"], self.infos, self.FieldStyle, @@ -275,7 +271,6 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator): - largeurs de colonnes pour PDF """ I = self.infos - context = self.context P = [] # elems pour générer table avec gen_table (liste de dicts) formsemestre_id = I["formsemestre_id"] prefs = sco_preferences.SemPreferences(formsemestre_id) diff --git a/app/scodoc/sco_bulletins_ucac.py b/app/scodoc/sco_bulletins_ucac.py index 17ccf269..088bc096 100644 --- a/app/scodoc/sco_bulletins_ucac.py +++ b/app/scodoc/sco_bulletins_ucac.py @@ -70,7 +70,6 @@ class BulletinGeneratorUCAC(sco_bulletins_standard.BulletinGeneratorStandard): - largeurs de colonnes pour PDF """ I = self.infos - context = self.context formsemestre_id = I["formsemestre_id"] prefs = sco_preferences.SemPreferences(formsemestre_id) @@ -304,5 +303,5 @@ class BulletinGeneratorUCAC(sco_bulletins_standard.BulletinGeneratorStandard): sco_bulletins_generator.register_bulletin_class(BulletinGeneratorUCAC) -def bulletin_table_ucac(context, I, version=None): +def bulletin_table_ucac(I, version=None): """""" diff --git a/app/scodoc/sco_bulletins_xml.py b/app/scodoc/sco_bulletins_xml.py index 62fe7898..49db5080 100644 --- a/app/scodoc/sco_bulletins_xml.py +++ b/app/scodoc/sco_bulletins_xml.py @@ -64,7 +64,6 @@ from app.scodoc import sco_xml # pour simplifier le code, mais attention a la maintenance !) # def make_xml_formsemestre_bulletinetud( - context, formsemestre_id, etudid, doc=None, # XML document @@ -123,7 +122,7 @@ def make_xml_formsemestre_bulletinetud( prenom=scu.quote_xml_attr(etudinfo["prenom"]), civilite=scu.quote_xml_attr(etudinfo["civilite_str"]), sexe=scu.quote_xml_attr(etudinfo["civilite_str"]), # compat - photo_url=scu.quote_xml_attr(sco_photos.etud_photo_url(context, etudinfo)), + photo_url=scu.quote_xml_attr(sco_photos.etud_photo_url(etudinfo)), email=scu.quote_xml_attr(etudinfo["email"]), emailperso=scu.quote_xml_attr(etudinfo["emailperso"]), ) @@ -157,7 +156,7 @@ def make_xml_formsemestre_bulletinetud( else: rang = str(nt.get_etud_rang(etudid)) rang_gr, ninscrits_gr, gr_name = sco_bulletins.get_etud_rangs_groups( - context, etudid, formsemestre_id, partitions, partitions_etud_groups, nt + etudid, formsemestre_id, partitions, partitions_etud_groups, nt ) doc.append( @@ -351,7 +350,6 @@ def make_xml_formsemestre_bulletinetud( or xml_with_decisions ): infos, dpv = sco_bulletins.etud_descr_situation_semestre( - context, etudid, formsemestre_id, format="xml", diff --git a/app/scodoc/sco_cache.py b/app/scodoc/sco_cache.py index 9d727c92..065f51a1 100644 --- a/app/scodoc/sco_cache.py +++ b/app/scodoc/sco_cache.py @@ -37,7 +37,7 @@ # sco_cache.NotesTableCache.get( formsemestre_id) # => sco_cache.NotesTableCache.get(formsemestre_id) # -# sco_core.inval_cache(context, formsemestre_id=None, pdfonly=False, formsemestre_id_list=None) +# sco_core.inval_cache(formsemestre_id=None, pdfonly=False, formsemestre_id_list=None) # => deprecated, NotesTableCache.invalidate_formsemestre(formsemestre_id=None, pdfonly=False) # # @@ -231,8 +231,7 @@ class NotesTableCache(ScoDocCache): from app.scodoc import notes_table t0 = time.time() - context = None # XXX TO REMOVE #context - nt = notes_table.NotesTable(context, formsemestre_id) + nt = notes_table.NotesTable(formsemestre_id) dt = time.time() - t0 log("caching formsemestre_id=%s (%gs)" % (formsemestre_id, dt)) _ = cls.set(formsemestre_id, nt) @@ -240,7 +239,7 @@ class NotesTableCache(ScoDocCache): return nt -def invalidate_formsemestre( # was inval_cache( context, formsemestre_id=None, pdfonly=False) +def invalidate_formsemestre( # was inval_cache(formsemestre_id=None, pdfonly=False) formsemestre_id=None, pdfonly=False ): """expire cache pour un semestre (ou tous si formsemestre_id non spécifié). diff --git a/app/scodoc/sco_compute_moy.py b/app/scodoc/sco_compute_moy.py index f4615301..4a7eda4e 100644 --- a/app/scodoc/sco_compute_moy.py +++ b/app/scodoc/sco_compute_moy.py @@ -52,7 +52,7 @@ from app.scodoc import sco_moduleimpl from app.scodoc import sco_etud -def moduleimpl_has_expression(context, mod): +def moduleimpl_has_expression(mod): "True if we should use a user-defined expression" expr = mod["computation_expr"] if not expr: @@ -63,7 +63,7 @@ def moduleimpl_has_expression(context, mod): return True -def formsemestre_expressions_use_abscounts(context, formsemestre_id): +def formsemestre_expressions_use_abscounts(formsemestre_id): """True si les notes de ce semestre dépendent des compteurs d'absences. Cela n'est normalement pas le cas, sauf si des formules utilisateur utilisent ces compteurs. """ @@ -80,7 +80,7 @@ def formsemestre_expressions_use_abscounts(context, formsemestre_id): return True # 2- moyennes de modules for mod in sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id): - if moduleimpl_has_expression(context, mod) and ab in mod["computation_expr"]: + if moduleimpl_has_expression(mod) and ab in mod["computation_expr"]: return True return False @@ -120,7 +120,6 @@ def get_ue_expression(formsemestre_id, ue_id, cnx, html_quote=False): def compute_user_formula( - context, sem, etudid, moy, @@ -184,7 +183,7 @@ def compute_user_formula( return user_moy -def do_moduleimpl_moyennes(context, nt, mod): +def do_moduleimpl_moyennes(nt, mod): """Retourne dict { etudid : note_moyenne } pour tous les etuds inscrits au moduleimpl mod, la liste des evaluations "valides" (toutes notes entrées ou en attente), et att (vrai s'il y a des notes en attente dans ce module). @@ -219,7 +218,7 @@ def do_moduleimpl_moyennes(context, nt, mod): key=lambda x: (x["numero"], x["jour"], x["heure_debut"]) ) # la plus ancienne en tête - user_expr = moduleimpl_has_expression(context, mod) + user_expr = moduleimpl_has_expression(mod) attente = False # recupere les notes de toutes les evaluations eval_rattr = None @@ -330,7 +329,6 @@ def do_moduleimpl_moyennes(context, nt, mod): coefs_mask.append(0) if nb_notes > 0 or formula_use_abs: user_moy = compute_user_formula( - context, sem, etudid, R[etudid], @@ -367,7 +365,7 @@ def do_moduleimpl_moyennes(context, nt, mod): return R, valid_evals, attente, diag_info -def do_formsemestre_moyennes(context, nt, formsemestre_id): +def do_formsemestre_moyennes(nt, formsemestre_id): """retourne dict { moduleimpl_id : { etudid, note_moyenne_dans_ce_module } }, la liste des moduleimpls, la liste des evaluations valides, liste des moduleimpls avec notes en attente. @@ -392,7 +390,7 @@ def do_formsemestre_moyennes(context, nt, formsemestre_id): moduleimpl_id = modimpl["moduleimpl_id"] assert moduleimpl_id not in D D[moduleimpl_id], valid_evals_mod, attente, expr_diag = do_moduleimpl_moyennes( - context, nt, modimpl + nt, modimpl ) valid_evals_per_mod[moduleimpl_id] = valid_evals_mod valid_evals += valid_evals_mod diff --git a/app/scodoc/sco_cost_formation.py b/app/scodoc/sco_cost_formation.py index 2b2dbc10..a2e532a2 100644 --- a/app/scodoc/sco_cost_formation.py +++ b/app/scodoc/sco_cost_formation.py @@ -40,7 +40,6 @@ from app.scodoc import sco_preferences def formsemestre_table_estim_cost( - context, formsemestre_id, n_group_td=1, n_group_tp=1, @@ -149,7 +148,6 @@ def formsemestre_table_estim_cost( def formsemestre_estim_cost( - context, formsemestre_id, n_group_td=1, n_group_tp=1, @@ -166,7 +164,6 @@ def formsemestre_estim_cost( coef_cours = float(coef_cours) tab = formsemestre_table_estim_cost( - context, formsemestre_id, n_group_td=n_group_td, n_group_tp=n_group_tp, diff --git a/app/scodoc/sco_debouche.py b/app/scodoc/sco_debouche.py index c7c835cc..274a8da9 100644 --- a/app/scodoc/sco_debouche.py +++ b/app/scodoc/sco_debouche.py @@ -47,17 +47,17 @@ from app.scodoc import sco_tag_module from app.scodoc import sco_etud -def report_debouche_date(context, start_year=None, format="html", REQUEST=None): +def report_debouche_date(start_year=None, format="html", REQUEST=None): """Rapport (table) pour les débouchés des étudiants sortis à partir de l'année indiquée.""" if not start_year: - return report_debouche_ask_date(context, REQUEST=REQUEST) + return report_debouche_ask_date(REQUEST=REQUEST) if format == "xls": keep_numeric = True # pas de conversion des notes en strings else: keep_numeric = False - etudids = get_etudids_with_debouche(context, start_year) - tab = table_debouche_etudids(context, etudids, keep_numeric=keep_numeric) + etudids = get_etudids_with_debouche(start_year) + tab = table_debouche_etudids(etudids, keep_numeric=keep_numeric) tab.filename = scu.make_filename("debouche_scodoc_%s" % start_year) tab.origin = "Généré par %s le " % VERSION.SCONAME + scu.timedate_human_repr() + "" @@ -73,7 +73,7 @@ def report_debouche_date(context, start_year=None, format="html", REQUEST=None): ) -def get_etudids_with_debouche(context, start_year): +def get_etudids_with_debouche(start_year): """Liste des etudids de tous les semestres terminant à partir du 1er janvier de start_year et ayant un 'debouche' renseigné. @@ -102,7 +102,7 @@ def get_etudids_with_debouche(context, start_year): return [x["etudid"] for x in r] -def table_debouche_etudids(context, etudids, keep_numeric=True): +def table_debouche_etudids(etudids, keep_numeric=True): """Rapport pour ces etudiants""" L = [] for etudid in etudids: @@ -139,7 +139,7 @@ def table_debouche_etudids(context, etudids, keep_numeric=True): } # recherche des débouchés - debouche = itemsuivi_list_etud(context, etudid) # liste de plusieurs items + debouche = itemsuivi_list_etud(etudid) # liste de plusieurs items if debouche: row["debouche"] = "
".join( [ @@ -192,7 +192,7 @@ def table_debouche_etudids(context, etudids, keep_numeric=True): return tab -def report_debouche_ask_date(context, REQUEST=None): +def report_debouche_ask_date(REQUEST=None): """Formulaire demande date départ""" return ( html_sco_header.sco_header() @@ -247,7 +247,7 @@ def itemsuivi_get(cnx, itemsuivi_id, ignore_errors=False): return None -def itemsuivi_suppress(context, itemsuivi_id, REQUEST=None): +def itemsuivi_suppress(itemsuivi_id, REQUEST=None): """Suppression d'un item""" if not sco_permissions_check.can_edit_suivi(): raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") @@ -259,9 +259,7 @@ def itemsuivi_suppress(context, itemsuivi_id, REQUEST=None): log("suppressed itemsuivi %s" % (itemsuivi_id,)) -def itemsuivi_create( - context, etudid, item_date=None, situation="", REQUEST=None, format=None -): +def itemsuivi_create(etudid, item_date=None, situation="", REQUEST=None, format=None): """Creation d'un item""" if not sco_permissions_check.can_edit_suivi(): raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") @@ -277,7 +275,7 @@ def itemsuivi_create( return item -def itemsuivi_set_date(context, itemsuivi_id, item_date, REQUEST=None): +def itemsuivi_set_date(itemsuivi_id, item_date, REQUEST=None): """set item date item_date is a string dd/mm/yyyy """ @@ -290,7 +288,7 @@ def itemsuivi_set_date(context, itemsuivi_id, item_date, REQUEST=None): _itemsuivi_edit(cnx, item) -def itemsuivi_set_situation(context, object, value, REQUEST=None): +def itemsuivi_set_situation(object, value, REQUEST=None): """set situation""" if not sco_permissions_check.can_edit_suivi(): raise AccessDenied("Vous n'avez pas le droit d'effectuer cette opération !") @@ -304,18 +302,18 @@ def itemsuivi_set_situation(context, object, value, REQUEST=None): return situation or scu.IT_SITUATION_MISSING_STR -def itemsuivi_list_etud(context, etudid, format=None, REQUEST=None): +def itemsuivi_list_etud(etudid, format=None, REQUEST=None): """Liste des items pour cet étudiant, avec tags""" cnx = ndb.GetDBConnexion() items = _itemsuivi_list(cnx, {"etudid": etudid}) for it in items: - it["tags"] = ", ".join(itemsuivi_tag_list(context, it["itemsuivi_id"])) + it["tags"] = ", ".join(itemsuivi_tag_list(it["itemsuivi_id"])) if format == "json": return scu.sendJSON(REQUEST, items) return items -def itemsuivi_tag_list(context, itemsuivi_id): +def itemsuivi_tag_list(itemsuivi_id): """les noms de tags associés à cet item""" r = ndb.SimpleDictFetch( """SELECT t.title @@ -328,7 +326,7 @@ def itemsuivi_tag_list(context, itemsuivi_id): return [x["title"] for x in r] -def itemsuivi_tag_search(context, term, REQUEST=None): +def itemsuivi_tag_search(term, REQUEST=None): """List all used tag names (for auto-completion)""" # restrict charset to avoid injections if not scu.ALPHANUM_EXP.match(term): @@ -343,7 +341,7 @@ def itemsuivi_tag_search(context, term, REQUEST=None): return scu.sendJSON(REQUEST, data) -def itemsuivi_tag_set(context, itemsuivi_id="", taglist=[], REQUEST=None): +def itemsuivi_tag_set(itemsuivi_id="", taglist=[], REQUEST=None): """taglist may either be: a string with tag names separated by commas ("un;deux") or a list of strings (["un", "deux"]) @@ -361,14 +359,14 @@ def itemsuivi_tag_set(context, itemsuivi_id="", taglist=[], REQUEST=None): _ = itemsuivi_get(cnx, itemsuivi_id) newtags = set(taglist) - oldtags = set(itemsuivi_tag_list(context, itemsuivi_id)) + oldtags = set(itemsuivi_tag_list(itemsuivi_id)) to_del = oldtags - newtags to_add = newtags - oldtags # should be atomic, but it's not. for tagname in to_add: - t = ItemSuiviTag(context, tagname, object_id=itemsuivi_id) + t = ItemSuiviTag(tagname, object_id=itemsuivi_id) for tagname in to_del: - t = ItemSuiviTag(context, tagname) + t = ItemSuiviTag(tagname) t.remove_tag_from_object(itemsuivi_id) return "", http.HTTPStatus.NO_CONTENT diff --git a/app/scodoc/sco_dept.py b/app/scodoc/sco_dept.py index bd02d509..1dbd9df0 100644 --- a/app/scodoc/sco_dept.py +++ b/app/scodoc/sco_dept.py @@ -45,16 +45,16 @@ from app.scodoc import sco_up_to_date from app.scodoc import sco_users -def index_html(context, REQUEST=None, showcodes=0, showsemtable=0): +def index_html(REQUEST=None, showcodes=0, showsemtable=0): "Page accueil département (liste des semestres)" showsemtable = int(showsemtable) H = [] # News: - H.append(sco_news.scolar_news_summary_html(context)) + H.append(sco_news.scolar_news_summary_html()) # Avertissement de mise à jour: - H.append(sco_up_to_date.html_up_to_date_box(context)) + H.append(sco_up_to_date.html_up_to_date_box()) # Liste de toutes les sessions: sems = sco_formsemestre.do_formsemestre_list() @@ -105,7 +105,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0): # Liste des formsemestres "courants" if cursems: H.append('

Sessions en cours

') - H.append(_sem_table(context, cursems)) + H.append(_sem_table(cursems)) else: # aucun semestre courant: affiche aide H.append( @@ -125,7 +125,7 @@ def index_html(context, REQUEST=None, showcodes=0, showsemtable=0): """ % sco_preferences.get_preference("DeptName") ) - H.append(_sem_table_gt(context, sems).html()) + H.append(_sem_table_gt(sems).html()) H.append("
") if not showsemtable: H.append( @@ -178,7 +178,7 @@ Chercher étape courante: %(tmpcode)s %(lockimg)s %(groupicon)s @@ -190,7 +190,7 @@ def _sem_table(context, sems): """ # Liste des semestres, groupés par modalités - sems_by_mod, modalites = sco_modalites.group_sems_by_modalite(context, sems) + sems_by_mod, modalites = sco_modalites.group_sems_by_modalite(sems) H = [''] for modalite in modalites: @@ -211,9 +211,9 @@ def _sem_table(context, sems): return "\n".join(H) -def _sem_table_gt(context, sems, showcodes=False): +def _sem_table_gt(sems, showcodes=False): """Nouvelle version de la table des semestres""" - _style_sems(context, sems) + _style_sems(sems) columns_ids = ( "lockimg", "semestre_id_n", @@ -249,7 +249,7 @@ def _sem_table_gt(context, sems, showcodes=False): return tab -def _style_sems(context, sems): +def _style_sems(sems): """ajoute quelques attributs de présentation pour la table""" for sem in sems: sem["notes_url"] = scu.NotesURL() diff --git a/app/scodoc/sco_dump_db.py b/app/scodoc/sco_dump_db.py index 4f793d5f..e9231f46 100644 --- a/app/scodoc/sco_dump_db.py +++ b/app/scodoc/sco_dump_db.py @@ -64,7 +64,7 @@ from app.scodoc.sco_exceptions import ScoValueError SCO_DUMP_LOCK = "/tmp/scodump.lock" -def sco_dump_and_send_db(context, REQUEST=None): +def sco_dump_and_send_db(REQUEST=None): """Dump base de données et l'envoie anonymisée pour debug""" H = [html_sco_header.sco_header(page_title="Assistance technique")] # get currect (dept) DB name: @@ -93,7 +93,7 @@ def sco_dump_and_send_db(context, REQUEST=None): _anonymize_db(ano_db_name) # Send - r = _send_db(context, REQUEST, ano_db_name) + r = _send_db(REQUEST, ano_db_name) if ( r.status_code == requests.codes.INSUFFICIENT_STORAGE # pylint: disable=no-member @@ -164,14 +164,14 @@ def _anonymize_db(ano_db_name): ) -def _get_scodoc_serial(context): +def _get_scodoc_serial(): try: return int(open(os.path.join(scu.SCODOC_VERSION_DIR, "scodoc.sn")).read()) except: return 0 -def _send_db(context, REQUEST, ano_db_name): +def _send_db(REQUEST, ano_db_name): """Dump this (anonymized) database and send it to tech support""" log("dumping anonymized database {}".format(ano_db_name)) try: @@ -189,7 +189,7 @@ def _send_db(context, REQUEST, ano_db_name): files=files, data={ "dept_name": sco_preferences.get_preference("DeptName"), - "serial": _get_scodoc_serial(context), + "serial": _get_scodoc_serial(), "sco_user": str(REQUEST.AUTHENTICATED_USER), "sent_by": sco_users.user_info(str(REQUEST.AUTHENTICATED_USER))[ "nomcomplet" diff --git a/app/scodoc/sco_edit_module.py b/app/scodoc/sco_edit_module.py index f6fa00f8..e04d358f 100644 --- a/app/scodoc/sco_edit_module.py +++ b/app/scodoc/sco_edit_module.py @@ -207,7 +207,7 @@ def module_create(matiere_id=None, REQUEST=None): { "input_type": "menu", "type": "int", - "title": scu.strcapitalize(parcours.SESSION_NAME), + "title": parcours.SESSION_NAME.capitalize(), "explanation": "%s de début du module dans la formation standard" % parcours.SESSION_NAME, "labels": [str(x) for x in semestres_indices], diff --git a/app/scodoc/sco_edit_ue.py b/app/scodoc/sco_edit_ue.py index 9d82919a..7e8f01ae 100644 --- a/app/scodoc/sco_edit_ue.py +++ b/app/scodoc/sco_edit_ue.py @@ -305,7 +305,7 @@ def ue_edit(ue_id=None, create=False, formation_id=None, REQUEST=None): { "input_type": "menu", "type": "int", - "title": scu.strcapitalize(parcours.SESSION_NAME), + "title": parcours.SESSION_NAME.capitalize(), "explanation": "%s de début du module dans la formation" % parcours.SESSION_NAME, "labels": [str(x) for x in semestres_indices], diff --git a/app/scodoc/sco_edt_cal.py b/app/scodoc/sco_edt_cal.py index 93634f59..3f28bec7 100644 --- a/app/scodoc/sco_edt_cal.py +++ b/app/scodoc/sco_edt_cal.py @@ -47,7 +47,7 @@ from app.scodoc import sco_groups_view from app.scodoc import sco_preferences -def formsemestre_get_ics_url(context, sem): +def formsemestre_get_ics_url(sem): """ edt_sem_ics_url est un template utilisé avec .format(sem=sem) @@ -72,10 +72,10 @@ def formsemestre_get_ics_url(context, sem): return ics_url -def formsemestre_load_ics(context, sem): +def formsemestre_load_ics(sem): """Load ics data, from our cache or, when necessary, from external provider""" # TODO: cacher le résultat - ics_url = formsemestre_get_ics_url(context, sem) + ics_url = formsemestre_get_ics_url(sem) if not ics_url: ics_data = "" else: @@ -90,13 +90,13 @@ def formsemestre_load_ics(context, sem): return cal -# def formsemestre_edt_groups_used(context, sem): +# def formsemestre_edt_groups_used(sem): # """L'ensemble des groupes EDT utilisés dans l'emploi du temps publié""" -# cal = formsemestre_load_ics(context, sem) +# cal = formsemestre_load_ics(sem) # return {e["X-GROUP-ID"].decode("utf8") for e in events} -def get_edt_transcodage_groups(context, formsemestre_id): +def get_edt_transcodage_groups(formsemestre_id): """-> { nom_groupe_edt : nom_groupe_scodoc }""" # TODO: valider ces données au moment où on enregistre les préférences edt2sco = {} @@ -123,7 +123,7 @@ def get_edt_transcodage_groups(context, formsemestre_id): return edt2sco, sco2edt, msg -def group_edt_json(context, group_id, start="", end="", REQUEST=None): +def group_edt_json(group_id, start="", end="", REQUEST=None): # actuellement inutilisé """EDT complet du semestre, au format JSON TODO: indiquer un groupe TODO: utiliser start et end (2 dates au format ISO YYYY-MM-DD) @@ -131,14 +131,12 @@ def group_edt_json(context, group_id, start="", end="", REQUEST=None): """ group = sco_groups.get_group(group_id) sem = sco_formsemestre.get_formsemestre(group["formsemestre_id"]) - edt2sco, sco2edt, msg = get_edt_transcodage_groups( - context, group["formsemestre_id"] - ) + edt2sco, sco2edt, msg = get_edt_transcodage_groups(group["formsemestre_id"]) edt_group_name = sco2edt.get(group["group_name"], group["group_name"]) log("group scodoc=%s : edt=%s" % (group["group_name"], edt_group_name)) - cal = formsemestre_load_ics(context, sem) + cal = formsemestre_load_ics(sem) events = [e for e in cal.walk() if e.name == "VEVENT"] J = [] for e in events: @@ -161,7 +159,9 @@ for e in events: """ -def experimental_calendar(context, group_id=None, formsemestre_id=None, REQUEST=None): +def experimental_calendar( + group_id=None, formsemestre_id=None, REQUEST=None +): # inutilisé """experimental page""" return "\n".join( [ @@ -191,7 +191,7 @@ def experimental_calendar(context, group_id=None, formsemestre_id=None, REQUEST= """Emplois du temps du groupe""", sco_groups_view.menu_group_choice( - context, group_id=group_id, formsemestre_id=formsemestre_id + group_id=group_id, formsemestre_id=formsemestre_id ), """
loading...
diff --git a/app/scodoc/sco_emails.py b/app/scodoc/sco_emails.py index 9ebdf597..017ffffd 100644 --- a/app/scodoc/sco_emails.py +++ b/app/scodoc/sco_emails.py @@ -48,11 +48,11 @@ from app.scodoc.notes_log import log from app.scodoc import VERSION -def sendEmail(context, msg): # TODO A REECRIRE ScoDoc8 +def sendEmail(msg): # TODO A REECRIRE ScoDoc8 """Send an email to the address using the mailhost, if there is one.""" raise NotImplementedError() try: - mail_host = context.MailHost + mail_host = xxx.MailHost except: log("warning: sendEmail: no MailHost found !") return @@ -66,7 +66,7 @@ def sendEmail(context, msg): # TODO A REECRIRE ScoDoc8 pass -def sendEmailFromException(context, msg): +def sendEmailFromException(msg): # Send email by hand, as it seems to be not possible to use Zope Mail Host # from an exception handler (see https://bugs.launchpad.net/zope2/+bug/246748) log("sendEmailFromException") @@ -80,13 +80,13 @@ def sendEmailFromException(context, msg): log("an exception occurred sending mail") -def send_debug_alert(context, txt, REQUEST=None): +def send_debug_alert(txt, REQUEST=None): """Send an alert email (bug report) to ScoDoc developpers""" if not scu.SCO_EXC_MAIL: log("send_debug_alert: email disabled") return if REQUEST: - txt = _report_request(context, REQUEST) + txt + txt = _report_request(REQUEST) + txt URL = REQUEST.URL else: URL = "send_debug_alert" @@ -98,11 +98,11 @@ def send_debug_alert(context, txt, REQUEST=None): msg["From"] = "scodoc-alert" msg.epilogue = "" msg.attach(MIMEText(txt, "plain", scu.SCO_ENCODING)) - sendEmailFromException(context, msg) + sendEmailFromException(msg) log("Sent mail alert:\n" + txt) -def _report_request(context, REQUEST, fmt="txt"): +def _report_request(REQUEST, fmt="txt"): """string describing current request for bug reports""" QUERY_STRING = REQUEST.QUERY_STRING if QUERY_STRING: diff --git a/app/scodoc/sco_entreprises.py b/app/scodoc/sco_entreprises.py index a7d4ffdf..7a7762f2 100644 --- a/app/scodoc/sco_entreprises.py +++ b/app/scodoc/sco_entreprises.py @@ -67,7 +67,6 @@ class EntreprisesEditor(EditableTable): test="=", sortkey=None, sort_on_contact=False, - context=None, limit="", offset="", ): @@ -85,7 +84,6 @@ class EntreprisesEditor(EditableTable): if sort_on_contact: for r in R: c = do_entreprise_contact_list( - context, args={"entreprise_id": r["entreprise_id"]}, disable_formatting=True, ) @@ -199,95 +197,94 @@ _entreprise_contactEditor = EditableTable( ) -def do_entreprise_create(context, args): +def do_entreprise_create(args): "entreprise_create" cnx = ndb.GetDBConnexion() r = _entreprisesEditor.create(cnx, args) return r -def do_entreprise_delete(context, oid): +def do_entreprise_delete(oid): "entreprise_delete" cnx = ndb.GetDBConnexion() _entreprisesEditor.delete(cnx, oid) -def do_entreprise_list(context, **kw): +def do_entreprise_list(**kw): "entreprise_list" cnx = ndb.GetDBConnexion() - kw["context"] = context return _entreprisesEditor.list(cnx, **kw) -def do_entreprise_list_by_etud(context, **kw): +def do_entreprise_list_by_etud(**kw): "entreprise_list_by_etud" cnx = ndb.GetDBConnexion() return _entreprisesEditor.list_by_etud(cnx, **kw) -def do_entreprise_edit(context, *args, **kw): +def do_entreprise_edit(*args, **kw): "entreprise_edit" cnx = ndb.GetDBConnexion() _entreprisesEditor.edit(cnx, *args, **kw) -def do_entreprise_correspondant_create(context, args): +def do_entreprise_correspondant_create(args): "entreprise_correspondant_create" cnx = ndb.GetDBConnexion() r = _entreprise_correspEditor.create(cnx, args) return r -def do_entreprise_correspondant_delete(context, oid): +def do_entreprise_correspondant_delete(oid): "entreprise_correspondant_delete" cnx = ndb.GetDBConnexion() _entreprise_correspEditor.delete(cnx, oid) -def do_entreprise_correspondant_list(context, **kw): +def do_entreprise_correspondant_list(**kw): "entreprise_correspondant_list" cnx = ndb.GetDBConnexion() return _entreprise_correspEditor.list(cnx, **kw) -def do_entreprise_correspondant_edit(context, *args, **kw): +def do_entreprise_correspondant_edit(*args, **kw): "entreprise_correspondant_edit" cnx = ndb.GetDBConnexion() _entreprise_correspEditor.edit(cnx, *args, **kw) -def do_entreprise_correspondant_listnames(context, args={}): +def do_entreprise_correspondant_listnames(args={}): "-> liste des noms des correspondants (pour affichage menu)" - C = do_entreprise_correspondant_list(context, args=args) + C = do_entreprise_correspondant_list(args=args) return [(x["prenom"] + " " + x["nom"], str(x["entreprise_corresp_id"])) for x in C] -def do_entreprise_contact_delete(context, oid): +def do_entreprise_contact_delete(oid): "entreprise_contact_delete" cnx = ndb.GetDBConnexion() _entreprise_contactEditor.delete(cnx, oid) -def do_entreprise_contact_list(context, **kw): +def do_entreprise_contact_list(**kw): "entreprise_contact_list" cnx = ndb.GetDBConnexion() return _entreprise_contactEditor.list(cnx, **kw) -def do_entreprise_contact_edit(context, *args, **kw): +def do_entreprise_contact_edit(*args, **kw): "entreprise_contact_edit" cnx = ndb.GetDBConnexion() _entreprise_contactEditor.edit(cnx, *args, **kw) -def do_entreprise_contact_create(context, args): +def do_entreprise_contact_create(args): "entreprise_contact_create" cnx = ndb.GetDBConnexion() r = _entreprise_contactEditor.create(cnx, args) return r -def do_entreprise_check_etudiant(context, etudiant): +def do_entreprise_check_etudiant(etudiant): """Si etudiant est vide, ou un ETUDID valide, ou un nom unique, retourne (1, ETUDID). Sinon, retourne (0, 'message explicatif') @@ -315,8 +312,7 @@ def do_entreprise_check_etudiant(context, etudiant): e = ['
    '] for x in r: e.append( - "
  • %s %s (code %s)
  • " - % (scu.strupper(x[1]), x[2] or "", x[0].strip()) + "
  • %s %s (code %s)
  • " % ((x[1]).upper(), x[2] or "", x[0].strip()) ) e.append("
") return ( diff --git a/app/scodoc/sco_etape_apogee.py b/app/scodoc/sco_etape_apogee.py index 4959d21f..1e7a4cdd 100644 --- a/app/scodoc/sco_etape_apogee.py +++ b/app/scodoc/sco_etape_apogee.py @@ -43,19 +43,19 @@ apo_csv_get() API: - apo_csv_store(context, csv, annee_scolaire, sem_id) + apo_csv_store( annee_scolaire, sem_id) store maq file (archive) - apo_csv_get(context, etape_apo, annee_scolaire, sem_id, vdi_apo=None) + apo_csv_get(etape_apo, annee_scolaire, sem_id, vdi_apo=None) get maq data (read stored file and returns string) if vdi_apo, get maq for this etape/vdi, else returns the first matching etape. - apo_csv_delete(context, etape_apo, annee_scolaire, sem_id) + apo_csv_delete(etape_apo, annee_scolaire, sem_id) - apo_csv_list_stored_etapes(context, annee_scolaire=None, sem_id=None, etapes=None) + apo_csv_list_stored_etapes(annee_scolaire=None, sem_id=None, etapes=None) returns: liste des codes etapes et version vdi stockés (pour l'annee_scolaire et le sem_id indiqués) - apo_csv_semset_check(context, semset) + apo_csv_semset_check(semset) check students in stored maqs vs students in sem Cas à détecter: - etudiants ScoDoc sans code NIP @@ -70,7 +70,7 @@ dups_apo : liste de { 'NIP', 'nom', 'prenom', 'etapes_apo' } etapes_missing_csv : liste des étapes du semestre sans maquette CSV - apo_csv_check_etape(context, semset, set_nips, etape_apo) + apo_csv_check_etape(semset, set_nips, etape_apo) check une etape """ @@ -91,7 +91,7 @@ class ApoCSVArchiver(sco_archives.BaseArchiver): ApoCSVArchive = ApoCSVArchiver() -# def get_sem_apo_archive(context, formsemestre_id): +# def get_sem_apo_archive(formsemestre_id): # """Get, or create if necessary, the archive for apo CSV files""" # archive_id @@ -99,7 +99,7 @@ ApoCSVArchive = ApoCSVArchiver() # return archive_id -def apo_csv_store(context, csv_data, annee_scolaire, sem_id): +def apo_csv_store(csv_data, annee_scolaire, sem_id): """ csv_data: maquette content, as a string, encoding given by APO_INPUT_ENCODING (latin-1, not utf8) annee_scolaire: int (2016) @@ -120,9 +120,7 @@ def apo_csv_store(context, csv_data, annee_scolaire, sem_id): filename = str(apo_data.etape) + ".csv" # will concatenate VDI to etape - if str(apo_data.etape) in apo_csv_list_stored_etapes( - context, annee_scolaire, sem_id=sem_id - ): + if str(apo_data.etape) in apo_csv_list_stored_etapes(annee_scolaire, sem_id=sem_id): raise ScoValueError( "Etape %s déjà stockée pour cette année scolaire !" % apo_data.etape ) @@ -135,14 +133,12 @@ def apo_csv_store(context, csv_data, annee_scolaire, sem_id): return apo_data.etape -def apo_csv_list_stored_archives( - context, annee_scolaire=None, sem_id=None, etapes=None -): +def apo_csv_list_stored_archives(annee_scolaire=None, sem_id=None, etapes=None): """ :return: list of informations about stored CSV [ { } ] """ - oids = ApoCSVArchive.list_oids(context) # [ '2016-1', ... ] + oids = ApoCSVArchive.list_oids() # [ '2016-1', ... ] # filter if annee_scolaire: e = re.compile(str(annee_scolaire) + "-.+") @@ -177,25 +173,25 @@ def apo_csv_list_stored_archives( return infos -def apo_csv_list_stored_etapes(context, annee_scolaire, sem_id=None, etapes=None): +def apo_csv_list_stored_etapes(annee_scolaire, sem_id=None, etapes=None): """ :return: list of stored etapes [ ApoEtapeVDI, ... ] """ infos = apo_csv_list_stored_archives( - context, annee_scolaire=annee_scolaire, sem_id=sem_id, etapes=etapes + annee_scolaire=annee_scolaire, sem_id=sem_id, etapes=etapes ) return [info["etape_apo"] for info in infos] -def apo_csv_delete(context, archive_id): +def apo_csv_delete(archive_id): """Delete archived CSV""" ApoCSVArchive.delete_archive(archive_id) -def apo_csv_get_archive(context, etape_apo, annee_scolaire="", sem_id=""): +def apo_csv_get_archive(etape_apo, annee_scolaire="", sem_id=""): """Get archive""" stored_archives = apo_csv_list_stored_archives( - context, annee_scolaire=annee_scolaire, sem_id=sem_id + annee_scolaire=annee_scolaire, sem_id=sem_id ) for info in stored_archives: if info["etape_apo"] == etape_apo: @@ -203,11 +199,11 @@ def apo_csv_get_archive(context, etape_apo, annee_scolaire="", sem_id=""): return None -def apo_csv_get(context, etape_apo="", annee_scolaire="", sem_id=""): +def apo_csv_get(etape_apo="", annee_scolaire="", sem_id=""): """Get CSV data for given etape_apo :return: CSV, as a data string """ - info = apo_csv_get_archive(context, etape_apo, annee_scolaire, sem_id) + info = apo_csv_get_archive(etape_apo, annee_scolaire, sem_id) if not info: raise ScoValueError( "Etape %s non enregistree (%s, %s)" % (etape_apo, annee_scolaire, sem_id) @@ -220,7 +216,7 @@ def apo_csv_get(context, etape_apo="", annee_scolaire="", sem_id=""): # ------------------------------------------------------------------------ -def apo_get_sem_etapes(context, sem): +def apo_get_sem_etapes(sem): """Etapes de ce semestre: pour l'instant, celles déclarées Dans une future version, on pourrait aussi utiliser les étapes d'inscription des étudiants, recupérées via le portail, @@ -231,12 +227,10 @@ def apo_get_sem_etapes(context, sem): return sem["etapes"] -def apo_csv_check_etape(context, semset, set_nips, etape_apo): +def apo_csv_check_etape(semset, set_nips, etape_apo): """Check etape vs set of sems""" # Etudiants dans la maquette CSV: - csv_data = apo_csv_get( - context, etape_apo, semset["annee_scolaire"], semset["sem_id"] - ) + csv_data = apo_csv_get(etape_apo, semset["annee_scolaire"], semset["sem_id"]) apo_data = sco_apogee_csv.ApoData(csv_data, periode=semset["sem_id"]) apo_nips = {e["nip"] for e in apo_data.etuds} # @@ -245,14 +239,14 @@ def apo_csv_check_etape(context, semset, set_nips, etape_apo): nips_no_sco = apo_nips - set_nips # dans Apogée mais pas dans ScoDoc # Elements Apogee vs ScoDoc - apo_data.setup(context) + apo_data.setup() maq_elems, sem_elems = apo_data.list_elements() return nips_ok, apo_nips, nips_no_apo, nips_no_sco, maq_elems, sem_elems def apo_csv_semset_check( - context, semset, allow_missing_apo=False, allow_missing_csv=False + semset, allow_missing_apo=False, allow_missing_csv=False ): # was apo_csv_check """ check students in stored maqs vs students in semset @@ -266,7 +260,7 @@ def apo_csv_semset_check( """ # Etapes du semestre sans maquette CSV: etapes_apo = apo_csv_list_stored_etapes( - context, semset["annee_scolaire"], semset["sem_id"], etapes=semset.list_etapes() + semset["annee_scolaire"], semset["sem_id"], etapes=semset.list_etapes() ) etapes_missing_csv = [] for e in semset.list_etapes(): @@ -292,7 +286,7 @@ def apo_csv_semset_check( et_nips_no_sco, et_maq_elems, et_sem_elems, - ) = apo_csv_check_etape(context, semset, set_nips, etape_apo) + ) = apo_csv_check_etape(semset, set_nips, etape_apo) nips_ok |= et_nips_ok nips_no_apo -= et_apo_nips nips_no_sco |= et_nips_no_sco @@ -330,19 +324,15 @@ def apo_csv_semset_check( ) -def apo_csv_retreive_etuds_by_nip(context, semset, nips): +def apo_csv_retreive_etuds_by_nip(semset, nips): """ Search info about listed nips in stored CSV :return: list [ { 'etape_apo', 'nip', 'nom', 'prenom' } ] """ apo_etuds_by_nips = {} - etapes_apo = apo_csv_list_stored_etapes( - context, semset["annee_scolaire"], semset["sem_id"] - ) + etapes_apo = apo_csv_list_stored_etapes(semset["annee_scolaire"], semset["sem_id"]) for etape_apo in etapes_apo: - csv_data = apo_csv_get( - context, etape_apo, semset["annee_scolaire"], semset["sem_id"] - ) + csv_data = apo_csv_get(etape_apo, semset["annee_scolaire"], semset["sem_id"]) apo_data = sco_apogee_csv.ApoData(csv_data, periode=semset["sem_id"]) etape_apo = apo_data.etape_apogee for e in apo_data.etuds: @@ -367,7 +357,7 @@ from app.scodoc.sco_etape_apogee import * from app.scodoc.sco_apogee_csv import * from app.scodoc.sco_semset import * -context = go_dept(app, 'RT').Notes +app.set_sco_dept('RT') csv_data = open('/opt/misc/VDTRT_V1RT.TXT').read() annee_scolaire=2015 sem_id=1 @@ -375,15 +365,15 @@ sem_id=1 apo_data = sco_apogee_csv.ApoData(csv_data, periode=sem_id) print apo_data.etape_apogee -apo_data.setup(context) +apo_data.setup() e = apo_data.etuds[0] -e.lookup_scodoc(context, apo_data.etape_formsemestre_ids) -e.associate_sco(context, apo_data) +e.lookup_scodoc( apo_data.etape_formsemestre_ids) +e.associate_sco( apo_data) -print apo_csv_list_stored_archives(context) +print apo_csv_list_stored_archives() -apo_csv_store(context, csv_data, annee_scolaire, sem_id) +apo_csv_store(csv_data, annee_scolaire, sem_id) @@ -392,24 +382,24 @@ groups_infos = sco_groups_view.DisplayedGroupsInfos( [sco_groups.get_default_gro nt = sco_cache.NotesTableCache.get( formsemestre_id) # -s = SemSet(context, 'NSS29902') +s = SemSet('NSS29902') apo_data = sco_apogee_csv.ApoData(open('/opt/scodoc/var/scodoc/archives/apo_csv/RT/2015-2/2016-07-10-11-26-15/V1RT.csv').read(), periode=1) # cas Tiziri K. (inscrite en S1, démission en fin de S1, pas inscrite en S2) # => pas de décision, ce qui est voulu (?) # -apo_data.setup(context) +apo_data.setup() e = [ e for e in apo_data.etuds if e['nom'] == 'XYZ' ][0] -e.lookup_scodoc(context, apo_data.etape_formsemestre_ids) -e.associate_sco(context, apo_data) +e.lookup_scodoc( apo_data.etape_formsemestre_ids) +e.associate_sco(apo_data) self=e col_id='apoL_c0129' # -- from app.scodoc import sco_portal_apogee -context = go_dept(app, 'GEA').Notes +_ = go_dept(app, 'GEA').Notes #csv_data = sco_portal_apogee.get_maquette_apogee(etape='V1GE', annee_scolaire=2015) csv_data = open('/tmp/V1GE.txt').read() apo_data = sco_apogee_csv.ApoData(csv_data, periode=1) @@ -426,7 +416,7 @@ from app.scodoc.sco_etape_apogee import * from app.scodoc.sco_apogee_csv import * from app.scodoc.sco_semset import * -context = go_dept(app, 'RT').Notes +_ = go_dept(app, 'RT').Notes csv_data = open('/opt/misc/V2RT.csv').read() annee_scolaire=2015 sem_id=1 @@ -434,10 +424,10 @@ sem_id=1 apo_data = sco_apogee_csv.ApoData(csv_data, periode=1) print apo_data.etape_apogee -apo_data.setup(context) +apo_data.setup() for e in apo_data.etuds: - e.lookup_scodoc(context, apo_data.etape_formsemestre_ids) - e.associate_sco(context, apo_data) + e.lookup_scodoc( apo_data.etape_formsemestre_ids) + e.associate_sco(apo_data) # ------ # test export jury intermediaire @@ -449,7 +439,7 @@ from app.scodoc.sco_etape_apogee import * from app.scodoc.sco_apogee_csv import * from app.scodoc.sco_semset import * -context = go_dept(app, 'CJ').Notes +_ = go_dept(app, 'CJ').Notes csv_data = open('/opt/scodoc/var/scodoc/archives/apo_csv/CJ/2016-1/2017-03-06-21-46-32/V1CJ.csv').read() annee_scolaire=2016 sem_id=1 @@ -457,10 +447,10 @@ sem_id=1 apo_data = sco_apogee_csv.ApoData(csv_data, periode=1) print apo_data.etape_apogee -apo_data.setup(context) +apo_data.setup() e = [ e for e in apo_data.etuds if e['nom'] == 'XYZ' ][0] # -e.lookup_scodoc(context, apo_data.etape_formsemestre_ids) -e.associate_sco(context, apo_data) +e.lookup_scodoc( apo_data.etape_formsemestre_ids) +e.associate_sco(apo_data) self=e diff --git a/app/scodoc/sco_etape_apogee_view.py b/app/scodoc/sco_etape_apogee_view.py index 52c46aa3..514d262a 100644 --- a/app/scodoc/sco_etape_apogee_view.py +++ b/app/scodoc/sco_etape_apogee_view.py @@ -54,7 +54,6 @@ from app.scodoc.sco_exceptions import ScoValueError def apo_semset_maq_status( - context, semset_id="", allow_missing_apo=False, allow_missing_decisions=False, @@ -69,7 +68,7 @@ def apo_semset_maq_status( """Page statut / tableau de bord""" if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) semset.fill_formsemestres() # autorise export meme si etudiants Apo manquants: allow_missing_apo = int(allow_missing_apo) @@ -85,7 +84,7 @@ def apo_semset_maq_status( prefs = sco_preferences.SemPreferences() - tab_archives = table_apo_csv_list(context, semset, REQUEST=REQUEST) + tab_archives = table_apo_csv_list(semset, REQUEST=REQUEST) ( ok_for_export, @@ -98,7 +97,7 @@ def apo_semset_maq_status( maq_elems, sem_elems, ) = sco_etape_apogee.apo_csv_semset_check( - context, semset, allow_missing_apo, allow_missing_csv + semset, allow_missing_apo, allow_missing_csv ) if not allow_missing_decisions: @@ -432,20 +431,18 @@ def apo_semset_maq_status( return "\n".join(H) -def table_apo_csv_list(context, semset, REQUEST=None): +def table_apo_csv_list(semset, REQUEST=None): """Table des archives (triée par date d'archivage)""" annee_scolaire = semset["annee_scolaire"] sem_id = semset["sem_id"] T = sco_etape_apogee.apo_csv_list_stored_archives( - context, annee_scolaire, sem_id, etapes=semset.list_etapes() + annee_scolaire, sem_id, etapes=semset.list_etapes() ) for t in T: # Ajoute qq infos pour affichage: - csv_data = sco_etape_apogee.apo_csv_get( - context, t["etape_apo"], annee_scolaire, sem_id - ) + csv_data = sco_etape_apogee.apo_csv_get(t["etape_apo"], annee_scolaire, sem_id) apo_data = sco_apogee_csv.ApoData(csv_data, periode=semset["sem_id"]) t["filename"] = apo_data.titles["apoC_Fichier_Exp"] t["nb_etuds"] = len(apo_data.etuds) @@ -488,17 +485,17 @@ def table_apo_csv_list(context, semset, REQUEST=None): return tab -def view_apo_etuds(context, semset_id, title="", nips=[], format="html", REQUEST=None): +def view_apo_etuds(semset_id, title="", nips=[], format="html", REQUEST=None): """Table des étudiants Apogée par nips""" if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) # annee_scolaire = semset["annee_scolaire"] # sem_id = semset["sem_id"] if nips and type(nips) != type([]): nips = [nips] - etuds = sco_etape_apogee.apo_csv_retreive_etuds_by_nip(context, semset, nips) + etuds = sco_etape_apogee.apo_csv_retreive_etuds_by_nip(semset, nips) # Ils sont parfois dans ScoDoc même si pas dans le semestre: essaie de les retrouver for etud in etuds.values(): etud_sco = sco_etud.get_etud_info(code_nip=etud["nip"], filled=True) @@ -514,7 +511,6 @@ def view_apo_etuds(context, semset_id, title="", nips=[], format="html", REQUEST ) return _view_etuds_page( - context, semset_id, title=title, etuds=list(etuds.values()), @@ -525,7 +521,7 @@ def view_apo_etuds(context, semset_id, title="", nips=[], format="html", REQUEST def view_scodoc_etuds( - context, semset_id, title="", etudids=None, nips=None, format="html", REQUEST=None + semset_id, title="", etudids=None, nips=None, format="html", REQUEST=None ): """Table des étudiants ScoDoc par nips ou etudids""" if etudids is not None: @@ -549,7 +545,6 @@ def view_scodoc_etuds( e["_prenom_td_attrs"] = 'id="pre-%s" class="etudinfo"' % (e["etudid"],) return _view_etuds_page( - context, semset_id, title=title, etuds=etuds, @@ -560,7 +555,7 @@ def view_scodoc_etuds( def _view_etuds_page( - context, semset_id, title="", etuds=[], keys=(), format="html", REQUEST=None + semset_id, title="", etuds=[], keys=(), format="html", REQUEST=None ): # Tri les étudiants par nom: if etuds: @@ -605,7 +600,7 @@ def _view_etuds_page( def view_apo_csv_store( - context, semset_id="", csvfile=None, data="", autodetect=False, REQUEST=None + semset_id="", csvfile=None, data="", autodetect=False, REQUEST=None ): """Store CSV data Le semset identifie l'annee scolaire et le semestre @@ -613,7 +608,7 @@ def view_apo_csv_store( """ if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) if csvfile: data = csvfile.read() @@ -636,18 +631,16 @@ def view_apo_csv_store( "Le code étape de ce fichier ne correspond pas à ceux de cet ensemble" ) - sco_etape_apogee.apo_csv_store( - context, data, semset["annee_scolaire"], semset["sem_id"] - ) + sco_etape_apogee.apo_csv_store(data, semset["annee_scolaire"], semset["sem_id"]) return flask.redirect("apo_semset_maq_status?semset_id=" + semset_id) -def view_apo_csv_download_and_store(context, etape_apo="", semset_id="", REQUEST=None): +def view_apo_csv_download_and_store(etape_apo="", semset_id="", REQUEST=None): """Download maquette and store it""" if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) data = sco_portal_apogee.get_maquette_apogee( etape=etape_apo, annee_scolaire=semset["annee_scolaire"] @@ -655,18 +648,16 @@ def view_apo_csv_download_and_store(context, etape_apo="", semset_id="", REQUEST # here, data is utf8 # but we store and generate latin1 files, to ease further import in Apogée data = data.decode(APO_PORTAL_ENCODING).encode(APO_INPUT_ENCODING) # XXX #py3 - return view_apo_csv_store( - context, semset_id, data=data, autodetect=False, REQUEST=REQUEST - ) + return view_apo_csv_store(semset_id, data=data, autodetect=False, REQUEST=REQUEST) def view_apo_csv_delete( - context, etape_apo="", semset_id="", dialog_confirmed=False, REQUEST=None + etape_apo="", semset_id="", dialog_confirmed=False, REQUEST=None ): """Delete CSV file""" if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) dest_url = "apo_semset_maq_status?semset_id=" + semset_id if not dialog_confirmed: return scu.confirm_dialog( @@ -679,22 +670,22 @@ def view_apo_csv_delete( ) info = sco_etape_apogee.apo_csv_get_archive( - context, etape_apo, semset["annee_scolaire"], semset["sem_id"] + etape_apo, semset["annee_scolaire"], semset["sem_id"] ) - sco_etape_apogee.apo_csv_delete(context, info["archive_id"]) + sco_etape_apogee.apo_csv_delete(info["archive_id"]) return flask.redirect(dest_url + "&head_message=Archive%20supprimée") -def view_apo_csv(context, etape_apo="", semset_id="", format="html", REQUEST=None): +def view_apo_csv(etape_apo="", semset_id="", format="html", REQUEST=None): """Visualise une maquette stockée Si format="raw", renvoie le fichier maquette tel quel """ if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) annee_scolaire = semset["annee_scolaire"] sem_id = semset["sem_id"] - csv_data = sco_etape_apogee.apo_csv_get(context, etape_apo, annee_scolaire, sem_id) + csv_data = sco_etape_apogee.apo_csv_get(etape_apo, annee_scolaire, sem_id) if format == "raw": return scu.sendCSVFile(REQUEST, csv_data, etape_apo + ".txt") apo_data = sco_apogee_csv.ApoData(csv_data, periode=semset["sem_id"]) @@ -709,7 +700,7 @@ def view_apo_csv(context, etape_apo="", semset_id="", format="html", REQUEST=Non apo_dups, maq_elems, sem_elems, - ) = sco_etape_apogee.apo_csv_semset_check(context, semset) + ) = sco_etape_apogee.apo_csv_semset_check(semset) H = [ html_sco_header.sco_header( @@ -788,7 +779,6 @@ def view_apo_csv(context, etape_apo="", semset_id="", format="html", REQUEST=Non # called from Web def apo_csv_export_results( - context, semset_id, block_export_res_etape=False, block_export_res_sem=False, @@ -815,7 +805,7 @@ def apo_csv_export_results( if not semset_id: raise ValueError("invalid null semset_id") - semset = sco_semset.SemSet(context, semset_id=semset_id) + semset = sco_semset.SemSet(semset_id=semset_id) annee_scolaire = semset["annee_scolaire"] periode = semset["sem_id"] @@ -823,14 +813,11 @@ def apo_csv_export_results( dest_zip = ZipFile(data, "w") etapes_apo = sco_etape_apogee.apo_csv_list_stored_etapes( - context, annee_scolaire, periode, etapes=semset.list_etapes() + annee_scolaire, periode, etapes=semset.list_etapes() ) for etape_apo in etapes_apo: - apo_csv = sco_etape_apogee.apo_csv_get( - context, etape_apo, annee_scolaire, periode - ) + apo_csv = sco_etape_apogee.apo_csv_get(etape_apo, annee_scolaire, periode) sco_apogee_csv.export_csv_to_apogee( - context, apo_csv, periode=periode, export_res_etape=export_res_etape, diff --git a/app/scodoc/sco_etape_bilan.py b/app/scodoc/sco_etape_bilan.py index 4231acdd..6d1bb22a 100644 --- a/app/scodoc/sco_etape_bilan.py +++ b/app/scodoc/sco_etape_bilan.py @@ -237,8 +237,7 @@ class EtapeBilan(object): Structure de donnée représentation l'état global de la comparaison ScoDoc/Apogée """ - def __init__(self, context): - self.context = context + def __init__(self): self.semestres = ( {} ) # Dictionnaire des formsemestres du semset (formsemestre_id -> semestre) @@ -405,7 +404,7 @@ class EtapeBilan(object): for key_etape in self.etapes: anneeapogee, etapestr = key_to_values(key_etape) self.etu_etapes[key_etape] = set() - for etud in get_inscrits_etape(self.context, etapestr, anneeapogee): + for etud in get_inscrits_etape(etapestr, anneeapogee): key_etu = self.register_etud_apogee(etud, key_etape) self.etu_etapes[key_etape].add(key_etu) diff --git a/app/scodoc/sco_etud.py b/app/scodoc/sco_etud.py index 562db338..d8e5a74f 100644 --- a/app/scodoc/sco_etud.py +++ b/app/scodoc/sco_etud.py @@ -116,9 +116,7 @@ def format_etud_ident(etud): def force_uppercase(s): - if s: - s = scu.strupper(s) - return s + return s.upper() if s else s def format_nomprenom(etud, reverse=False): @@ -151,7 +149,7 @@ def format_nom(s, uppercase=True): if not s: return "" if uppercase: - return scu.strupper(s) + return s.upper() else: return format_prenom(s) @@ -161,7 +159,7 @@ def input_civilite(s): 'M', 'F', or 'X' (and nothing else). Raises valueError if conversion fails. """ - s = scu.strupper(s).strip() + s = s.upper().strip() if s in ("M", "M.", "MR", "H"): return "M" elif s in ("F", "MLLE", "MLLE.", "MELLE", "MME"): @@ -187,7 +185,7 @@ def format_civilite(civilite): def format_lycee(nomlycee): nomlycee = nomlycee.strip() - s = scu.strlower(nomlycee) + s = nomlycee.lower() if s[:5] == "lycee" or s[:5] == "lycée": return nomlycee[5:] else: @@ -217,7 +215,7 @@ def format_telephone(n): def format_pays(s): "laisse le pays seulement si != FRANCE" - if scu.strupper(s) != "FRANCE": + if s.upper() != "FRANCE": return s else: return "" @@ -321,7 +319,9 @@ def check_nom_prenom(cnx, nom="", prenom="", etudid=None): return True, len(res) -def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None): +def _check_duplicate_code( + cnx, args, code_name, disable_notify=False, edit=True, REQUEST=None +): etudid = args.get("etudid", None) if args.get(code_name, None): etuds = identite_list(cnx, {code_name: str(args[code_name])}) @@ -355,7 +355,7 @@ def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None OK = "Annuler" dest_url = "" parameters = {} - if context: + if not disable_notify: err_page = scu.confirm_dialog( message="""

Code étudiant (%s) dupliqué !

""" % code_name, helpmsg="""Le %s %s est déjà utilisé: un seul étudiant peut avoir ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.

  • """ @@ -377,14 +377,18 @@ def _check_civilite(args): args["civilite"] = input_civilite(civilite) # TODO: A faire valider -def identite_edit(cnx, args, context=None, REQUEST=None): +def identite_edit(cnx, args, disable_notify=False, REQUEST=None): """Modifie l'identite d'un étudiant. - Si context et notification et difference, envoie message notification. + Si pref notification et difference, envoie message notification, sauf si disable_notify """ - _check_duplicate_code(cnx, args, "code_nip", context, edit=True, REQUEST=REQUEST) - _check_duplicate_code(cnx, args, "code_ine", context, edit=True, REQUEST=REQUEST) + _check_duplicate_code( + cnx, args, "code_nip", disable_notify=disable_notify, edit=True, REQUEST=REQUEST + ) + _check_duplicate_code( + cnx, args, "code_ine", disable_notify=disable_notify, edit=True, REQUEST=REQUEST + ) notify_to = None - if context: + if not disable_notify: try: notify_to = sco_preferences.get_preference("notify_etud_changes_to") except: @@ -401,7 +405,6 @@ def identite_edit(cnx, args, context=None, REQUEST=None): etud = get_etud_info(etudid=args["etudid"], filled=True)[0] after = identite_list(cnx, {"etudid": args["etudid"]})[0] notify_etud_change( - context, notify_to, etud, before, @@ -410,10 +413,10 @@ def identite_edit(cnx, args, context=None, REQUEST=None): ) -def identite_create(cnx, args, context=None, REQUEST=None): +def identite_create(cnx, args, REQUEST=None): "check unique etudid, then create" - _check_duplicate_code(cnx, args, "code_nip", context, edit=False, REQUEST=REQUEST) - _check_duplicate_code(cnx, args, "code_ine", context, edit=False, REQUEST=REQUEST) + _check_duplicate_code(cnx, args, "code_nip", edit=False, REQUEST=REQUEST) + _check_duplicate_code(cnx, args, "code_ine", edit=False, REQUEST=REQUEST) _check_civilite(args) if "etudid" in args: @@ -426,7 +429,7 @@ def identite_create(cnx, args, context=None, REQUEST=None): return _identiteEditor.create(cnx, args) -def notify_etud_change(context, email_addr, etud, before, after, subject): +def notify_etud_change(email_addr, etud, before, after, subject): """Send email notifying changes to etud before and after are two dicts, with values before and after the change. """ @@ -458,7 +461,7 @@ def notify_etud_change(context, email_addr, etud, before, after, subject): msg["To"] = email_addr mime_txt = MIMEText(txt, "plain", SCO_ENCODING) msg.attach(mime_txt) - sco_emails.sendEmail(context, msg) + sco_emails.sendEmail(msg) return txt @@ -493,12 +496,12 @@ adresse_delete = _adresseEditor.delete adresse_list = _adresseEditor.list -def adresse_edit(cnx, args, context=None): +def adresse_edit(cnx, args, disable_notify=False): """Modifie l'adresse d'un étudiant. - Si context et notification et difference, envoie message notification. + Si pref notification et difference, envoie message notification, sauf si disable_notify """ notify_to = None - if context: + if not disable_notify: try: notify_to = sco_preferences.get_preference("notify_etud_changes_to") except: @@ -514,7 +517,6 @@ def adresse_edit(cnx, args, context=None): etud = get_etud_info(etudid=args["etudid"], filled=True)[0] after = adresse_list(cnx, {"etudid": args["etudid"]})[0] notify_etud_change( - context, notify_to, etud, before, @@ -584,8 +586,8 @@ admission_edit = _admissionEditor.edit # Edition simultanee de identite et admission class EtudIdentEditor(object): - def create(self, cnx, args, context=None, REQUEST=None): - etudid = identite_create(cnx, args, context, REQUEST) + def create(self, cnx, args, REQUEST=None): + etudid = identite_create(cnx, args, REQUEST) args["etudid"] = etudid admission_create(cnx, args) return etudid @@ -616,8 +618,8 @@ class EtudIdentEditor(object): res.sort(key=itemgetter("nom", "prenom")) return res - def edit(self, cnx, args, context=None, REQUEST=None): - identite_edit(cnx, args, context, REQUEST) + def edit(self, cnx, args, disable_notify=False, REQUEST=None): + identite_edit(cnx, args, disable_notify=disable_notify, REQUEST=REQUEST) if "adm_id" in args: # safety net admission_edit(cnx, args) @@ -668,7 +670,7 @@ def get_etud_info(etudid=False, code_nip=False, filled=False, REQUEST=None): return etud -def create_etud(context, cnx, args={}, REQUEST=None): +def create_etud(cnx, args={}, REQUEST=None): """Creation d'un étudiant. génère aussi évenement et "news". Args: @@ -680,7 +682,7 @@ def create_etud(context, cnx, args={}, REQUEST=None): from app.scodoc import sco_news # creation d'un etudiant - etudid = etudident_create(cnx, args, context=context, REQUEST=REQUEST) + etudid = etudident_create(cnx, args, REQUEST=REQUEST) # crée une adresse vide (chaque etudiant doit etre dans la table "adresse" !) _ = adresse_create( cnx, @@ -773,7 +775,7 @@ etud_annotations_list = _etud_annotationsEditor.list etud_annotations_edit = _etud_annotationsEditor.edit -def add_annotations_to_etud_list(context, etuds): +def add_annotations_to_etud_list(etuds): """Add key 'annotations' describing annotations of etuds (used to list all annotations of a group) """ @@ -877,16 +879,16 @@ o = open('etablissements2.csv', 'w') o.write( f.readline() ) for l in f: fs = l.split(';') - nom = ' '.join( [ strcapitalize(x) for x in fs[1].split() ] ) - adr = ' '.join( [ strcapitalize(x) for x in fs[2].split() ] ) - ville=' '.join( [ strcapitalize(x) for x in fs[4].split() ] ) + nom = ' '.join( [ x.capitalize() for x in fs[1].split() ] ) + adr = ' '.join( [ x.capitalize() for x in fs[2].split() ] ) + ville=' '.join( [ x.capitalize() for x in fs[4].split() ] ) o.write( '%s;%s;%s;%s;%s\n' % (fs[0], nom, adr, fs[3], ville)) o.close() """ -def list_scolog(context, etudid): +def list_scolog(etudid): "liste des operations effectuees sur cet etudiant" cnx = ndb.GetDBConnexion() cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor) @@ -905,7 +907,6 @@ def fill_etuds_info(etuds): from app.scodoc import sco_formsemestre from app.scodoc import sco_formsemestre_inscriptions - context = None # XXX en attendant la suppression du context ScoDoc7 cnx = ndb.GetDBConnexion() # open('/tmp/t','w').write( str(etuds) ) for etud in etuds: @@ -932,7 +933,7 @@ def fill_etuds_info(etuds): cursem = None # semestre "courant" ou il est inscrit for i in ins: sem = sco_formsemestre.get_formsemestre(i["formsemestre_id"]) - if sco_formsemestre.sem_est_courant(context, sem): + if sco_formsemestre.sem_est_courant(sem): cursem = sem curi = i sem["ins"] = i @@ -947,7 +948,7 @@ def fill_etuds_info(etuds): etud["inscriptionstr"] = "Inscrit en " + cursem["titremois"] etud["inscription_formsemestre_id"] = cursem["formsemestre_id"] etud["etatincursem"] = curi["etat"] - etud["situation"] = descr_situation_etud(context, etudid, etud["ne"]) + etud["situation"] = descr_situation_etud(etudid, etud["ne"]) # XXX est-ce utile ? sco_groups.etud_add_group_infos( etud, cursem) else: if etud["sems"]: @@ -1003,7 +1004,7 @@ def fill_etuds_info(etuds): etud["telephonemobilestr"] = "" -def descr_situation_etud(context, etudid, ne=""): +def descr_situation_etud(etudid, ne=""): """chaine decrivant la situation actuelle de l'etudiant""" from app.scodoc import sco_formsemestre diff --git a/app/scodoc/sco_evaluations.py b/app/scodoc/sco_evaluations.py index c132e35d..caacf79f 100644 --- a/app/scodoc/sco_evaluations.py +++ b/app/scodoc/sco_evaluations.py @@ -178,7 +178,6 @@ def do_evaluation_list(args, sortkey=None): def do_evaluation_list_in_formsemestre(formsemestre_id): "list evaluations in this formsemestre" - context = None # #context mods = sco_moduleimpl.do_moduleimpl_list(formsemestre_id=formsemestre_id) evals = [] for mod in mods: @@ -188,7 +187,6 @@ def do_evaluation_list_in_formsemestre(formsemestre_id): def _check_evaluation_args(args): "Check coefficient, dates and duration, raises exception if invalid" - context = None # #context moduleimpl_id = args["moduleimpl_id"] # check bareme note_max = args.get("note_max", None) @@ -255,7 +253,6 @@ def do_evaluation_create( **kw, # ceci pour absorber les arguments excedentaires de tf #sco8 ): """Create an evaluation""" - context = None # #context if not sco_permissions_check.can_edit_evaluation(moduleimpl_id=moduleimpl_id): raise AccessDenied( "Modification évaluation impossible pour %s" % current_user.get_nomplogin() @@ -320,7 +317,6 @@ def do_evaluation_create( def do_evaluation_edit(args): "edit an evaluation" - context = None # #context evaluation_id = args["evaluation_id"] the_evals = do_evaluation_list({"evaluation_id": evaluation_id}) if not the_evals: @@ -342,7 +338,6 @@ def do_evaluation_edit(args): def do_evaluation_delete(evaluation_id): "delete evaluation" - context = None # #context the_evals = do_evaluation_list({"evaluation_id": evaluation_id}) if not the_evals: raise ValueError("evaluation inexistante !") @@ -390,7 +385,6 @@ def do_evaluation_etat(evaluation_id, partition_id=None, select_first_partition= à ce module ont des notes) evalattente est vrai s'il ne manque que des notes en attente """ - context = None # #context nb_inscrits = len( sco_groups.do_evaluation_listeetuds_groups(evaluation_id, getallstudents=True) ) @@ -720,7 +714,6 @@ def do_evaluation_etat_in_mod(nt, moduleimpl_id): def formsemestre_evaluations_cal(formsemestre_id, REQUEST=None): """Page avec calendrier de toutes les evaluations de ce semestre""" - context = None # #context sem = sco_formsemestre.get_formsemestre(formsemestre_id) nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations @@ -781,7 +774,7 @@ def formsemestre_evaluations_cal(formsemestre_id, REQUEST=None): e[2] = color_futur CalHTML = sco_abs.YearTable( - context, year, events=list(events.values()), halfday=False, pad_width=None + year, events=list(events.values()), halfday=False, pad_width=None ) H = [ @@ -858,7 +851,6 @@ def formsemestre_evaluations_delai_correction( N'indique pas les évaluations de ratrapage ni celles des modules de bonus/malus. """ - context = None # #context sem = sco_formsemestre.get_formsemestre(formsemestre_id) nt = sco_cache.NotesTableCache.get(formsemestre_id) # > liste evaluations @@ -1040,7 +1032,6 @@ def evaluation_describe(evaluation_id="", edit_in_place=True, REQUEST=None): """HTML description of evaluation, for page headers edit_in_place: allow in-place editing when permitted (not implemented) """ - context = None # #context from app.scodoc import sco_saisie_notes E = do_evaluation_list({"evaluation_id": evaluation_id})[0] @@ -1122,7 +1113,6 @@ def evaluation_create_form( page_title="Evaluation", ): "formulaire creation/edition des evaluations (pas des notes)" - context = None # #context if evaluation_id != None: the_eval = do_evaluation_list({"evaluation_id": evaluation_id})[0] moduleimpl_id = the_eval["moduleimpl_id"] diff --git a/app/scodoc/sco_excel.py b/app/scodoc/sco_excel.py index 4d895744..d547bd53 100644 --- a/app/scodoc/sco_excel.py +++ b/app/scodoc/sco_excel.py @@ -733,11 +733,7 @@ def excel_feuille_listeappel( for t in lines: n += 1 nomprenom = ( - t["civilite_str"] - + " " - + t["nom"] - + " " - + scu.strcapitalize(scu.strlower(t["prenom"])) + t["civilite_str"] + " " + t["nom"] + " " + t["prenom"].lower().capitalize() ) style_nom = style2t3 if with_paiement: diff --git a/app/scodoc/sco_export_results.py b/app/scodoc/sco_export_results.py index c342773d..168abc63 100644 --- a/app/scodoc/sco_export_results.py +++ b/app/scodoc/sco_export_results.py @@ -45,18 +45,18 @@ from app.scodoc.gen_tables import GenTable from app.scodoc.sco_codes_parcours import NO_SEMESTRE_ID -def _build_results_table(context, start_date=None, end_date=None, types_parcours=[]): +def _build_results_table(start_date=None, end_date=None, types_parcours=[]): """Construit une table avec les résultats de jury de TOUS les étudiants de TOUS les semestres ScoDoc de ce département entre les dates indiquées (c'est à dire commençant APRES ou à start_date et terminant avant ou à end_date) Les dates sont des chaines iso. """ - formsemestre_ids = get_set_formsemestre_id_dates(context, start_date, end_date) + formsemestre_ids = get_set_formsemestre_id_dates(start_date, end_date) # Décisions de jury de tous les semestres: dpv_by_sem = {} for formsemestre_id in formsemestre_ids: dpv_by_sem[formsemestre_id] = sco_pvjury.dict_pvjury( - context, formsemestre_id, with_parcours_decisions=True + formsemestre_id, with_parcours_decisions=True ) semlist = [dpv["formsemestre"] for dpv in dpv_by_sem.values() if dpv] @@ -92,7 +92,7 @@ def _build_results_table(context, start_date=None, end_date=None, types_parcours # sanity check assert etudid in etuds_infos # Construit la table (semblable à pvjury_table) - rows, titles, columns_ids = _build_results_list(context, dpv_by_sem, etuds_infos) + rows, titles, columns_ids = _build_results_list(dpv_by_sem, etuds_infos) tab = GenTable( rows=rows, titles=titles, @@ -107,7 +107,7 @@ def _build_results_table(context, start_date=None, end_date=None, types_parcours return tab, semlist -def _build_results_list(context, dpv_by_sem, etuds_infos): +def _build_results_list(dpv_by_sem, etuds_infos): """Construit la table (semblable à pvjury_table) Returns: rows, titles, columns_ids @@ -202,7 +202,7 @@ def _build_results_list(context, dpv_by_sem, etuds_infos): return rows, titles, columns_ids -def get_set_formsemestre_id_dates(context, start_date, end_date): +def get_set_formsemestre_id_dates(start_date, end_date): """Ensemble des formsemestre_id entre ces dates""" s = ndb.SimpleDictFetch( """SELECT id @@ -215,7 +215,7 @@ def get_set_formsemestre_id_dates(context, start_date, end_date): def scodoc_table_results( - context, start_date="", end_date="", types_parcours=[], format="html", REQUEST=None + start_date="", end_date="", types_parcours=[], format="html", REQUEST=None ): """Page affichant la table des résultats Les dates sont en dd/mm/yyyy (datepicker javascript) @@ -235,7 +235,7 @@ def scodoc_table_results( if start_date and end_date: tab, semlist = _build_results_table( - context, start_date_iso, end_date_iso, types_parcours + start_date_iso, end_date_iso, types_parcours ) tab.base_url = "%s?start_date=%s&end_date=%s&types_parcours=%s" % ( REQUEST.URL0, @@ -335,17 +335,17 @@ _DATE_FORM = """ # /opt/scodoc/bin/zopectl debug from debug import * from app.scodoc.sco_export_results import * -context = go_dept(app, 'RT').Notes +_ = go_dept(app, 'RT').Notes etudid = 'EID27764' etud = sco_etud.get_etud_info( etudid=etudid, filled=True)[0] start_date='2015-08-15' end_date='2017-08-31' -formsemestre_ids = get_set_formsemestre_id_dates(context, start_date, end_date) +formsemestre_ids = get_set_formsemestre_id_dates( start_date, end_date) dpv_by_sem = {} for formsemestre_id in formsemestre_ids: - dpv_by_sem[formsemestre_id] = sco_pvjury.dict_pvjury(context, formsemestre_id, with_parcours_decisions=True) + dpv_by_sem[formsemestre_id] = sco_pvjury.dict_pvjury( formsemestre_id, with_parcours_decisions=True) semlist = [ dpv['formsemestre'] for dpv in dpv_by_sem.values() ] diff --git a/app/scodoc/sco_find_etud.py b/app/scodoc/sco_find_etud.py index 6992645c..efdf818c 100644 --- a/app/scodoc/sco_find_etud.py +++ b/app/scodoc/sco_find_etud.py @@ -44,7 +44,6 @@ from app.scodoc import sco_preferences def form_search_etud( - context, REQUEST=None, dest_url=None, parameters=None, @@ -96,7 +95,7 @@ def form_search_etud( return "\n".join(H) -def search_etud_in_dept(context, expnom="", REQUEST=None): +def search_etud_in_dept(expnom="", REQUEST=None): """Page recherche d'un etudiant. Affiche la fiche de l'étudiant, ou, si la recherche donne plusieurs résultats, @@ -139,7 +138,6 @@ def search_etud_in_dept(context, expnom="", REQUEST=None): """

    %d résultats pour "%s": choisissez un étudiant:

    """ % (len(etuds), expnom), form_search_etud( - context, dest_url=url_for( "scolar.ficheEtud", scodoc_dept=g.scodoc_dept ), # sans l'etudid, post du form @@ -175,7 +173,6 @@ def search_etud_in_dept(context, expnom="", REQUEST=None): if len(etuds) > 20: # si la page est grande H.append( form_search_etud( - context, dest_url=url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept), REQUEST=REQUEST, title="Autre recherche", @@ -197,7 +194,7 @@ def search_etuds_infos(expnom=None, code_nip=None): may_be_nip = scu.is_valid_code_nip(expnom) cnx = ndb.GetDBConnexion() if expnom and not may_be_nip: - expnom = scu.strupper(expnom) # les noms dans la BD sont en uppercase + expnom = expnom.upper() # les noms dans la BD sont en uppercase etuds = sco_etud.etudident_list(cnx, args={"nom": expnom}, test="~") else: code_nip = code_nip or expnom @@ -209,13 +206,13 @@ def search_etuds_infos(expnom=None, code_nip=None): return etuds -def search_etud_by_name(context, term, REQUEST=None): +def search_etud_by_name(term, REQUEST=None): """Recherche noms étudiants par début du nom, pour autocomplete Accepte aussi un début de code NIP (au moins 6 caractères) Renvoie une liste de nom en JSON """ may_be_nip = scu.is_valid_code_nip(term) - # term = scu.strupper(term) # conserve les accents + # term = term.upper() # conserve les accents term = term.upper() if ( not scu.ALPHANUM_EXP.match(term) # n'autorise pas les caractères spéciaux @@ -335,7 +332,7 @@ def table_etud_in_accessible_depts(expnom=None): ) -def search_inscr_etud_by_nip(context, code_nip, REQUEST=None, format="json"): +def search_inscr_etud_by_nip(code_nip, REQUEST=None, format="json"): """Recherche multi-departement d'un étudiant par son code NIP Seuls les départements accessibles par l'utilisateur sont cherchés. diff --git a/app/scodoc/sco_formsemestre.py b/app/scodoc/sco_formsemestre.py index 1196fa71..4a36553b 100644 --- a/app/scodoc/sco_formsemestre.py +++ b/app/scodoc/sco_formsemestre.py @@ -218,7 +218,6 @@ def etapes_apo_str(etapes): def do_formsemestre_create(args, silent=False): "create a formsemestre" - context = None # XXX #context from app.scodoc import sco_groups from app.scodoc import sco_news @@ -440,7 +439,7 @@ def sem_in_annee_scolaire(sem, year=False): ) -def sem_une_annee(context, sem): +def sem_une_annee(sem): """Test si sem est entièrement sur la même année scolaire. (ce n'est pas obligatoire mais si ce n'est pas le cas les exports Apogée ne vont pas fonctionner) pivot au 1er août. @@ -460,7 +459,7 @@ def sem_une_annee(context, sem): return debut == fin -def sem_est_courant(context, sem): +def sem_est_courant(sem): """Vrai si la date actuelle (now) est dans le semestre (les dates de début et fin sont incluses)""" now = time.strftime("%Y-%m-%d") debut = ndb.DateDMYtoISO(sem["date_debut"]) diff --git a/app/scodoc/sco_formsemestre_custommenu.py b/app/scodoc/sco_formsemestre_custommenu.py index 66968688..7600420b 100644 --- a/app/scodoc/sco_formsemestre_custommenu.py +++ b/app/scodoc/sco_formsemestre_custommenu.py @@ -51,22 +51,22 @@ notes_formsemestre_custommenu_list = _custommenuEditor.list notes_formsemestre_custommenu_edit = _custommenuEditor.edit -def formsemestre_custommenu_get(context, formsemestre_id): +def formsemestre_custommenu_get(formsemestre_id): "returns dict [ { 'title' : xxx, 'url' : xxx } ]" cnx = ndb.GetDBConnexion() vals = notes_formsemestre_custommenu_list(cnx, {"formsemestre_id": formsemestre_id}) return vals -def formsemestre_custommenu_html(context, formsemestre_id): +def formsemestre_custommenu_html(formsemestre_id): "HTML code for custom menu" menu = [] # Calendrier électronique ? sem = sco_formsemestre.get_formsemestre(formsemestre_id) - ics_url = sco_edt_cal.formsemestre_get_ics_url(context, sem) + ics_url = sco_edt_cal.formsemestre_get_ics_url(sem) if ics_url: menu.append({"title": "Emploi du temps (ics)", "url": ics_url}) - menu += formsemestre_custommenu_get(context, formsemestre_id) + menu += formsemestre_custommenu_get(formsemestre_id) menu.append( { "title": "Modifier ce menu...", @@ -77,7 +77,7 @@ def formsemestre_custommenu_html(context, formsemestre_id): return htmlutils.make_menu("Liens", menu) -def formsemestre_custommenu_edit(context, formsemestre_id, REQUEST=None): +def formsemestre_custommenu_edit(formsemestre_id, REQUEST=None): """Dialog to edit the custom menu""" sem = sco_formsemestre.get_formsemestre(formsemestre_id) dest_url = ( @@ -100,7 +100,7 @@ def formsemestre_custommenu_edit(context, formsemestre_id, REQUEST=None): }, ), ] - menu = formsemestre_custommenu_get(context, formsemestre_id) + menu = formsemestre_custommenu_get(formsemestre_id) menu.append({"custommenu_id": "new", "url": "", "title": ""}) initvalues = {} for item in menu: diff --git a/app/scodoc/sco_formsemestre_edit.py b/app/scodoc/sco_formsemestre_edit.py index ab2d03e7..b165f6f9 100644 --- a/app/scodoc/sco_formsemestre_edit.py +++ b/app/scodoc/sco_formsemestre_edit.py @@ -66,7 +66,7 @@ def _default_sem_title(F): return F["titre"] -def formsemestre_createwithmodules(context, REQUEST=None): +def formsemestre_createwithmodules(REQUEST=None): """Page création d'un semestre""" H = [ html_sco_header.sco_header( @@ -77,7 +77,7 @@ def formsemestre_createwithmodules(context, REQUEST=None): ), """

    Mise en place d'un semestre de formation

    """, ] - r = do_formsemestre_createwithmodules(context, REQUEST=REQUEST) + r = do_formsemestre_createwithmodules(REQUEST=REQUEST) if isinstance(r, six.string_types): H.append(r) else: @@ -85,7 +85,7 @@ def formsemestre_createwithmodules(context, REQUEST=None): return "\n".join(H) + html_sco_header.sco_footer() -def formsemestre_editwithmodules(context, REQUEST, formsemestre_id): +def formsemestre_editwithmodules(REQUEST, formsemestre_id): """Page modification semestre""" # portage from dtml sem = sco_formsemestre.get_formsemestre(formsemestre_id) @@ -105,7 +105,7 @@ def formsemestre_editwithmodules(context, REQUEST, formsemestre_id): % scu.icontag("lock_img", border="0", title="Semestre verrouillé") ) else: - r = do_formsemestre_createwithmodules(context, REQUEST=REQUEST, edit=1) + r = do_formsemestre_createwithmodules(REQUEST=REQUEST, edit=1) if isinstance(r, six.string_types): H.append(r) else: @@ -130,7 +130,7 @@ def can_edit_sem(REQUEST, formsemestre_id="", sem=None): return sem -def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False): +def do_formsemestre_createwithmodules(REQUEST=None, edit=False): "Form choix modules / responsables et creation formsemestre" # Fonction accessible à tous, controle acces à la main: if edit: @@ -231,7 +231,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False): semestre_ids = list(semestre_ids.keys()) semestre_ids.sort() - modalites = sco_modalites.do_modalite_list(context) + modalites = sco_modalites.do_modalite_list() modalites_abbrv = [m["modalite"] for m in modalites] modalites_titles = [m["titre"] for m in modalites] # @@ -863,7 +863,7 @@ def formsemestre_delete_moduleimpls(formsemestre_id, module_ids_to_del): return ok, msg -def formsemestre_clone(context, formsemestre_id, REQUEST=None): +def formsemestre_clone(formsemestre_id, REQUEST=None): """ Formulaire clonage d'un semestre """ @@ -1107,7 +1107,6 @@ def do_formsemestre_clone( def formsemestre_associate_new_version( - context, formsemestre_id, other_formsemestre_ids=[], REQUEST=None, @@ -1158,7 +1157,7 @@ def formsemestre_associate_new_version( ) else: do_formsemestres_associate_new_version( - context, [formsemestre_id] + other_formsemestre_ids, REQUEST=REQUEST + [formsemestre_id] + other_formsemestre_ids, REQUEST=REQUEST ) return flask.redirect( "formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée" @@ -1166,7 +1165,7 @@ def formsemestre_associate_new_version( ) -def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=None): +def do_formsemestres_associate_new_version(formsemestre_ids, REQUEST=None): """Cree une nouvelle version de la formation du semestre, et y rattache les semestres. Tous les moduleimpl sont ré-associés à la nouvelle formation, ainsi que les decisions de jury si elles existent (codes d'UE validées). @@ -1197,16 +1196,12 @@ def do_formsemestres_associate_new_version(context, formsemestre_ids, REQUEST=No sem = sco_formsemestre.get_formsemestre(formsemestre_id) sem["formation_id"] = formation_id sco_formsemestre.do_formsemestre_edit(sem, cnx=cnx, html_quote=False) - _reassociate_moduleimpls( - context, cnx, formsemestre_id, ues_old2new, modules_old2new - ) + _reassociate_moduleimpls(cnx, formsemestre_id, ues_old2new, modules_old2new) cnx.commit() -def _reassociate_moduleimpls( - context, cnx, formsemestre_id, ues_old2new, modules_old2new -): +def _reassociate_moduleimpls(cnx, formsemestre_id, ues_old2new, modules_old2new): """Associe les moduleimpls d'un semestre existant à un autre programme et met à jour les décisions de jury (validations d'UE). """ @@ -1231,7 +1226,7 @@ def _reassociate_moduleimpls( sco_parcours_dut.scolar_formsemestre_validation_edit(cnx, e) -def formsemestre_delete(context, formsemestre_id, REQUEST=None): +def formsemestre_delete(formsemestre_id, REQUEST=None): """Delete a formsemestre (affiche avertissements)""" sem = sco_formsemestre.get_formsemestre(formsemestre_id) F = sco_formations.formation_list(args={"formation_id": sem["formation_id"]})[0] @@ -1270,7 +1265,7 @@ def formsemestre_delete(context, formsemestre_id, REQUEST=None): cancelbutton="Annuler", ) if tf[0] == 0: - if formsemestre_has_decisions_or_compensations(context, formsemestre_id): + if formsemestre_has_decisions_or_compensations(formsemestre_id): H.append( """

    Ce semestre ne peut pas être supprimé ! (il y a des décisions de jury ou des compensations par d'autres semestres)

    """ ) @@ -1289,9 +1284,7 @@ def formsemestre_delete(context, formsemestre_id, REQUEST=None): ) -def formsemestre_delete2( - context, formsemestre_id, dialog_confirmed=False, REQUEST=None -): +def formsemestre_delete2(formsemestre_id, dialog_confirmed=False): """Delete a formsemestre (confirmation)""" # Confirmation dialog if not dialog_confirmed: @@ -1302,11 +1295,11 @@ def formsemestre_delete2( parameters={"formsemestre_id": formsemestre_id}, ) # Bon, s'il le faut... - do_formsemestre_delete(context, formsemestre_id) + do_formsemestre_delete(formsemestre_id) return flask.redirect(scu.ScoURL() + "?head_message=Semestre%20supprimé") -def formsemestre_has_decisions_or_compensations(context, formsemestre_id): +def formsemestre_has_decisions_or_compensations(formsemestre_id): """True if decision de jury dans ce semestre ou bien compensation de ce semestre par d'autre ssemestres. """ @@ -1320,7 +1313,7 @@ def formsemestre_has_decisions_or_compensations(context, formsemestre_id): return r -def do_formsemestre_delete(context, formsemestre_id): +def do_formsemestre_delete(formsemestre_id): """delete formsemestre, and all its moduleimpls. No checks, no warnings: erase all ! """ @@ -1424,7 +1417,7 @@ def do_formsemestre_delete(context, formsemestre_id): # --------------------------------------------------------------------------------------- -def formsemestre_edit_options(context, formsemestre_id, target_url=None, REQUEST=None): +def formsemestre_edit_options(formsemestre_id, target_url=None, REQUEST=None): """dialog to change formsemestre options (accessible par ScoImplement ou dir. etudes) """ @@ -1437,9 +1430,7 @@ def formsemestre_edit_options(context, formsemestre_id, target_url=None, REQUEST ) -def formsemestre_change_lock( - context, formsemestre_id, REQUEST=None, dialog_confirmed=False -): +def formsemestre_change_lock(formsemestre_id, REQUEST=None, dialog_confirmed=False): """Change etat (verrouille si ouvert, déverrouille si fermé) nota: etat (1 ouvert, 0 fermé) """ @@ -1476,7 +1467,7 @@ def formsemestre_change_lock( def formsemestre_change_publication_bul( - context, formsemestre_id, REQUEST=None, dialog_confirmed=False + formsemestre_id, REQUEST=None, dialog_confirmed=False ): """Change etat publication bulletins sur portail""" ok, err = sco_permissions_check.check_access_diretud(formsemestre_id) @@ -1511,7 +1502,7 @@ def formsemestre_change_publication_bul( return None -def formsemestre_edit_uecoefs(context, formsemestre_id, err_ue_id=None, REQUEST=None): +def formsemestre_edit_uecoefs(formsemestre_id, err_ue_id=None, REQUEST=None): """Changement manuel des coefficients des UE capitalisées.""" from app.scodoc import notes_table @@ -1549,7 +1540,7 @@ def formsemestre_edit_uecoefs(context, formsemestre_id, err_ue_id=None, REQUEST= help, ] # - ues, modimpls = notes_table.get_sem_ues_modimpls(context, formsemestre_id) + ues, modimpls = notes_table.get_sem_ues_modimpls(formsemestre_id) for ue in ues: ue["sum_coefs"] = sum( [ diff --git a/app/scodoc/sco_formsemestre_exterieurs.py b/app/scodoc/sco_formsemestre_exterieurs.py index 48d4ad11..29d16db0 100644 --- a/app/scodoc/sco_formsemestre_exterieurs.py +++ b/app/scodoc/sco_formsemestre_exterieurs.py @@ -51,7 +51,7 @@ from app.scodoc import sco_parcours_dut from app.scodoc import sco_etud -def formsemestre_ext_create(context, etudid, sem_params, REQUEST=None): +def formsemestre_ext_create(etudid, sem_params, REQUEST=None): """Crée un formsemestre exterieur et y inscrit l'étudiant. sem_params: dict nécessaire à la création du formsemestre """ @@ -71,7 +71,6 @@ def formsemestre_ext_create(context, etudid, sem_params, REQUEST=None): # Inscription au semestre sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules( - context, formsemestre_id, etudid, REQUEST=REQUEST, @@ -80,7 +79,7 @@ def formsemestre_ext_create(context, etudid, sem_params, REQUEST=None): return formsemestre_id -def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None): +def formsemestre_ext_create_form(etudid, formsemestre_id, REQUEST=None): """Formulaire creation/inscription à un semestre extérieur""" etud = sco_etud.get_etud_info(etudid=etudid, filled=1)[0] H = [ @@ -204,15 +203,13 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None) ) else: tf[2]["formation_id"] = orig_sem["formation_id"] - formsemestre_ext_create(context, etudid, tf[2], REQUEST=REQUEST) + formsemestre_ext_create(etudid, tf[2], REQUEST=REQUEST) return flask.redirect( url_for("scolar.ficheEtud", scodoc_dept=g.scodoc_dept, etudid=etudid) ) -def formsemestre_ext_edit_ue_validations( - context, formsemestre_id, etudid, REQUEST=None -): +def formsemestre_ext_edit_ue_validations(formsemestre_id, etudid, REQUEST=None): """Edition des validations d'UE et de semestre (jury) pour un semestre extérieur. On peut saisir pour chaque UE du programme de formation @@ -223,8 +220,8 @@ def formsemestre_ext_edit_ue_validations( """ sem = sco_formsemestre.get_formsemestre(formsemestre_id) etud = sco_etud.get_etud_info(etudid=etudid, filled=True)[0] - ue_list = _list_ue_with_coef_and_validations(context, sem, etudid) - descr = _ue_form_description(context, ue_list, REQUEST.form) + ue_list = _list_ue_with_coef_and_validations(sem, etudid) + descr = _ue_form_description(ue_list, REQUEST.form) if REQUEST and REQUEST.method == "GET": initvalues = { "note_" + str(ue["ue_id"]): ue["validation"].get("moy_ue", "") @@ -244,19 +241,19 @@ def formsemestre_ext_edit_ue_validations( if tf[0] == -1: return "

    annulation

    " else: - H = _make_page(context, etud, sem, tf, REQUEST=REQUEST) + H = _make_page(etud, sem, tf, REQUEST=REQUEST) if tf[0] == 0: # premier affichage return "\n".join(H) else: # soumission # simule erreur - ok, message = _check_values(context, ue_list, tf[2]) + ok, message = _check_values(ue_list, tf[2]) if not ok: - H = _make_page(context, etud, sem, tf, message=message, REQUEST=REQUEST) + H = _make_page(etud, sem, tf, message=message, REQUEST=REQUEST) return "\n".join(H) else: # Submit _record_ue_validations_and_coefs( - context, formsemestre_id, etudid, ue_list, tf[2], REQUEST=REQUEST + formsemestre_id, etudid, ue_list, tf[2], REQUEST=REQUEST ) return flask.redirect( "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" @@ -264,7 +261,7 @@ def formsemestre_ext_edit_ue_validations( ) -def _make_page(context, etud, sem, tf, message="", REQUEST=None): +def _make_page(etud, sem, tf, message="", REQUEST=None): nt = sco_cache.NotesTableCache.get(sem["formsemestre_id"]) moy_gen = nt.get_etud_moy_gen(etud["etudid"]) H = [ @@ -305,7 +302,7 @@ _UE_VALID_CODES = { } -def _ue_form_description(context, ue_list, values): +def _ue_form_description(ue_list, values): """Description du formulaire de saisie des UE / validations Pour chaque UE, on peut saisir: son code jury, sa note, son coefficient. """ @@ -377,7 +374,7 @@ def _ue_form_description(context, ue_list, values): return descr -def _check_values(context, ue_list, values): +def _check_values(ue_list, values): """Check that form values are ok for each UE: code != None => note and coef @@ -434,7 +431,7 @@ def _convert_field_to_float(val): return val -def _list_ue_with_coef_and_validations(context, sem, etudid): +def _list_ue_with_coef_and_validations(sem, etudid): """Liste des UE de la même formation que sem, avec leurs coefs d'UE capitalisée (si déjà saisi) et leur validation pour cet étudiant. @@ -468,7 +465,7 @@ def _list_ue_with_coef_and_validations(context, sem, etudid): def _record_ue_validations_and_coefs( - context, formsemestre_id, etudid, ue_list, values, REQUEST=None + formsemestre_id, etudid, ue_list, values, REQUEST=None ): for ue in ue_list: code = values.get("valid_" + str(ue["ue_id"]), False) @@ -487,7 +484,6 @@ def _record_ue_validations_and_coefs( ) assert code == None or (note) # si code validant, il faut une note sco_formsemestre_validation.do_formsemestre_validate_previous_ue( - context, formsemestre_id, etudid, ue["ue_id"], diff --git a/app/scodoc/sco_formsemestre_inscriptions.py b/app/scodoc/sco_formsemestre_inscriptions.py index 62dcfd47..199a0bd7 100644 --- a/app/scodoc/sco_formsemestre_inscriptions.py +++ b/app/scodoc/sco_formsemestre_inscriptions.py @@ -76,7 +76,7 @@ def do_formsemestre_inscription_listinscrits(formsemestre_id): return r -def do_formsemestre_inscription_create(context, args, REQUEST, method=None): +def do_formsemestre_inscription_create(args, method=None): "create a formsemestre_inscription (and sco event)" cnx = ndb.GetDBConnexion() log("do_formsemestre_inscription_create: args=%s" % str(args)) @@ -116,7 +116,7 @@ def do_formsemestre_inscription_create(context, args, REQUEST, method=None): return r -def do_formsemestre_inscription_delete(context, oid, formsemestre_id=None): +def do_formsemestre_inscription_delete(oid, formsemestre_id=None): "delete formsemestre_inscription" cnx = ndb.GetDBConnexion() _formsemestre_inscriptionEditor.delete(cnx, oid) @@ -126,7 +126,7 @@ def do_formsemestre_inscription_delete(context, oid, formsemestre_id=None): ) # > desinscription du semestre -def do_formsemestre_inscription_edit(context, args=None, formsemestre_id=None): +def do_formsemestre_inscription_edit(args=None, formsemestre_id=None): "edit a formsemestre_inscription" cnx = ndb.GetDBConnexion() _formsemestre_inscriptionEditor.edit(cnx, args) @@ -135,7 +135,7 @@ def do_formsemestre_inscription_edit(context, args=None, formsemestre_id=None): ) # > modif inscription semestre (demission ?) -def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=None): +def do_formsemestre_desinscription(etudid, formsemestre_id, REQUEST=None): """Désinscription d'un étudiant. Si semestre extérieur et dernier inscrit, suppression de ce semestre. """ @@ -174,7 +174,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non ) # -- desincription du semestre do_formsemestre_inscription_delete( - context, insem["formsemestre_inscription_id"], formsemestre_id=formsemestre_id + insem["formsemestre_inscription_id"], formsemestre_id=formsemestre_id ) # --- Semestre extérieur if sem["modalite"] == "EXT": @@ -187,7 +187,7 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non "do_formsemestre_desinscription: suppression du semestre extérieur %s" % formsemestre_id ) - sco_formsemestre_edit.do_formsemestre_delete(context, formsemestre_id) + sco_formsemestre_edit.do_formsemestre_delete(formsemestre_id) if REQUEST: logdb( @@ -200,7 +200,6 @@ def do_formsemestre_desinscription(context, etudid, formsemestre_id, REQUEST=Non def do_formsemestre_inscription_with_modules( - context, formsemestre_id, etudid, group_ids=[], @@ -216,7 +215,7 @@ def do_formsemestre_inscription_with_modules( args = {"formsemestre_id": formsemestre_id, "etudid": etudid} if etat is not None: args["etat"] = etat - do_formsemestre_inscription_create(context, args, REQUEST, method=method) + do_formsemestre_inscription_create(args, method=method) log( "do_formsemestre_inscription_with_modules: etudid=%s formsemestre_id=%s" % (etudid, formsemestre_id) @@ -247,14 +246,13 @@ def do_formsemestre_inscription_with_modules( def formsemestre_inscription_with_modules_etud( - context, formsemestre_id, etudid=None, group_ids=None, REQUEST=None + formsemestre_id, etudid=None, group_ids=None, REQUEST=None ): """Form. inscription d'un étudiant au semestre. Si etudid n'est pas specifié, form. choix etudiant. """ if not etudid: return sco_find_etud.form_search_etud( - context, title="Choix de l'étudiant à inscrire dans ce semestre", add_headers=True, dest_url="formsemestre_inscription_with_modules_etud", @@ -263,13 +261,11 @@ def formsemestre_inscription_with_modules_etud( ) return formsemestre_inscription_with_modules( - context, etudid, formsemestre_id, REQUEST=REQUEST, group_ids=group_ids + etudid, formsemestre_id, REQUEST=REQUEST, group_ids=group_ids ) -def formsemestre_inscription_with_modules_form( - context, etudid, REQUEST, only_ext=False -): +def formsemestre_inscription_with_modules_form(etudid, only_ext=False): """Formulaire inscription de l'etud dans l'un des semestres existants. Si only_ext, ne montre que les semestre extérieurs. """ @@ -320,7 +316,7 @@ def formsemestre_inscription_with_modules_form( def formsemestre_inscription_with_modules( - context, etudid, formsemestre_id, group_ids=None, multiple_ok=False, REQUEST=None + etudid, formsemestre_id, group_ids=None, multiple_ok=False, REQUEST=None ): """ Inscription de l'etud dans ce semestre. @@ -372,7 +368,7 @@ def formsemestre_inscription_with_modules( return "\n".join(H) + F # Check 2: déjà inscrit dans un semestre recouvrant les même dates ? # Informe et propose dé-inscriptions - others = est_inscrit_ailleurs(context, etudid, formsemestre_id) + others = est_inscrit_ailleurs(etudid, formsemestre_id) if others and not multiple_ok: l = [] for s in others: @@ -401,7 +397,6 @@ def formsemestre_inscription_with_modules( if group_ids is not None: # OK, inscription do_formsemestre_inscription_with_modules( - context, formsemestre_id, etudid, group_ids=group_ids, @@ -435,7 +430,7 @@ def formsemestre_inscription_with_modules( return "\n".join(H) + F -def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=None): +def formsemestre_inscription_option(etudid, formsemestre_id, REQUEST=None): """Dialogue pour (dés)inscription à des modules optionnels.""" sem = sco_formsemestre.get_formsemestre(formsemestre_id) if not sem["etat"]: @@ -660,7 +655,7 @@ function chkbx_select(field_id, state) { def do_moduleimpl_incription_options( - context, etudid, modulesimpls_ainscrire, modulesimpls_adesinscrire, REQUEST=None + etudid, modulesimpls_ainscrire, modulesimpls_adesinscrire, REQUEST=None ): """ Effectue l'inscription et la description aux modules optionnels @@ -722,7 +717,7 @@ def do_moduleimpl_incription_options( return "\n".join(H) -def est_inscrit_ailleurs(context, etudid, formsemestre_id): +def est_inscrit_ailleurs(etudid, formsemestre_id): """Vrai si l'étudiant est inscrit dans un semestre en même temps que celui indiqué (par formsemestre_id). Retourne la liste des semestres concernés (ou liste vide). @@ -741,7 +736,7 @@ def est_inscrit_ailleurs(context, etudid, formsemestre_id): return r -def list_inscrits_ailleurs(context, formsemestre_id): +def list_inscrits_ailleurs(formsemestre_id): """Liste des etudiants inscrits ailleurs en même temps que formsemestre_id. Pour chacun, donne la liste des semestres. { etudid : [ liste de sems ] } @@ -750,11 +745,11 @@ def list_inscrits_ailleurs(context, formsemestre_id): etudids = nt.get_etudids() d = {} for etudid in etudids: - d[etudid] = est_inscrit_ailleurs(context, etudid, formsemestre_id) + d[etudid] = est_inscrit_ailleurs(etudid, formsemestre_id) return d -def formsemestre_inscrits_ailleurs(context, formsemestre_id, REQUEST=None): +def formsemestre_inscrits_ailleurs(formsemestre_id, REQUEST=None): """Page listant les étudiants inscrits dans un autre semestre dont les dates recouvrent le semestre indiqué. """ @@ -766,7 +761,7 @@ def formsemestre_inscrits_ailleurs(context, formsemestre_id, REQUEST=None): sem, ) ] - insd = list_inscrits_ailleurs(context, formsemestre_id) + insd = list_inscrits_ailleurs(formsemestre_id) # liste ordonnée par nom etudlist = [ sco_etud.get_etud_info(etudid=etudid, filled=1)[0] diff --git a/app/scodoc/sco_formsemestre_status.py b/app/scodoc/sco_formsemestre_status.py index 69453246..837cc807 100644 --- a/app/scodoc/sco_formsemestre_status.py +++ b/app/scodoc/sco_formsemestre_status.py @@ -63,7 +63,7 @@ from app.scodoc.gen_tables import GenTable from app.scodoc.sco_formsemestre_custommenu import formsemestre_custommenu_html -def defMenuStats(context, formsemestre_id): +def _build_menu_stats(formsemestre_id): "Définition du menu 'Statistiques' " return [ { @@ -121,7 +121,7 @@ def defMenuStats(context, formsemestre_id): ] -def formsemestre_status_menubar(context, sem): +def formsemestre_status_menubar(sem): """HTML to render menubar""" uid = current_user.user_name formsemestre_id = sem["formsemestre_id"] @@ -426,7 +426,7 @@ def formsemestre_status_menubar(context, sem): }, ] - menuStats = defMenuStats(context, formsemestre_id) + menuStats = _build_menu_stats(formsemestre_id) H = [ #
', '
    ', @@ -436,7 +436,7 @@ def formsemestre_status_menubar(context, sem): htmlutils.make_menu("Notes", menuNotes), htmlutils.make_menu("Jury", menuJury), htmlutils.make_menu("Statistiques", menuStats), - formsemestre_custommenu_html(context, formsemestre_id), + formsemestre_custommenu_html(formsemestre_id), "
", #'
' ] @@ -448,7 +448,6 @@ def retreive_formsemestre_from_request(): arguments de la requête: formsemestre_id ou moduleimpl ou evaluation ou group_id ou partition_id """ - context = None # XXX #context if request.method == "GET": args = request.args elif request.method == "POST": @@ -494,7 +493,7 @@ def retreive_formsemestre_from_request(): # Element HTML decrivant un semestre (barre de menu et infos) -def formsemestre_page_title(context): +def formsemestre_page_title(): """Element HTML decrivant un semestre (barre de menu et infos) Cherche dans REQUEST si un semestre est défini (formsemestre_id ou moduleimpl ou evaluation ou group) """ @@ -515,7 +514,7 @@ def formsemestre_page_title(context): """""" % sem, - formsemestre_status_menubar(context, sem), + formsemestre_status_menubar(sem), """
""", ] return "\n".join(H) @@ -523,7 +522,6 @@ def formsemestre_page_title(context): def fill_formsemestre(sem): """Add some useful fields to help display formsemestres""" - context = None # XXX #context notes_url = scu.NotesURL() sem["notes_url"] = notes_url formsemestre_id = sem["formsemestre_id"] @@ -576,9 +574,7 @@ def fill_formsemestre(sem): # Description du semestre sous forme de table exportable -def formsemestre_description_table( - context, formsemestre_id, REQUEST=None, with_evals=False -): +def formsemestre_description_table(formsemestre_id, REQUEST=None, with_evals=False): """Description du semestre sous forme de table exportable Liste des modules et de leurs coefficients """ @@ -695,7 +691,7 @@ def formsemestre_description_table( titles["coefficient"] = "Coef. éval." titles["evalcomplete_str"] = "Complète" titles["publish_incomplete_str"] = "Toujours Utilisée" - title = "%s %s" % (scu.strcapitalize(parcours.SESSION_NAME), sem["titremois"]) + title = "%s %s" % (parcours.SESSION_NAME.capitalize(), sem["titremois"]) return GenTable( columns_ids=columns_ids, @@ -717,14 +713,14 @@ def formsemestre_description_table( def formsemestre_description( - context, formsemestre_id, format="html", with_evals=False, REQUEST=None + formsemestre_id, format="html", with_evals=False, REQUEST=None ): """Description du semestre sous forme de table exportable Liste des modules et de leurs coefficients """ with_evals = int(with_evals) tab = formsemestre_description_table( - context, formsemestre_id, REQUEST, with_evals=with_evals + formsemestre_id, REQUEST, with_evals=with_evals ) tab.html_before_table = """
@@ -740,8 +736,7 @@ def formsemestre_description( # genere liste html pour accès aux groupes de ce semestre -def _make_listes_sem(context, sem, REQUEST=None, with_absences=True): - context = context +def _make_listes_sem(sem, REQUEST=None, with_absences=True): # construit l'URL "destination" # (a laquelle on revient apres saisie absences) destination = url_for( @@ -778,7 +773,7 @@ def _make_listes_sem(context, sem, REQUEST=None, with_absences=True): """) date = first_monday i = 0 - for jour in sco_abs.day_names(context): + for jour in sco_abs.day_names(): if i == today_idx: sel = "selected" else: @@ -916,7 +906,7 @@ def form_choix_jour_saisie_hebdo( # Ajout Le Havre # Formulaire saisie absences semaine -def form_choix_saisie_semaine(context, groups_infos, REQUEST=None): +def form_choix_saisie_semaine(groups_infos, REQUEST=None): authuser = REQUEST.AUTHENTICATED_USER if not authuser.has_permission(Permission.ScoAbsChange): return "" @@ -947,7 +937,7 @@ def form_choix_saisie_semaine(context, groups_infos, REQUEST=None): return "\n".join(FA) -def export_groups_as_moodle_csv(context, formsemestre_id=None, REQUEST=None): +def export_groups_as_moodle_csv(formsemestre_id=None, REQUEST=None): """Export all students/groups, in a CSV format suitable for Moodle Each (student,group) will be listed on a separate line jo@univ.fr,S3-A diff --git a/app/scodoc/sco_import_etuds.py b/app/scodoc/sco_import_etuds.py index a6923176..f9b688b4 100644 --- a/app/scodoc/sco_import_etuds.py +++ b/app/scodoc/sco_import_etuds.py @@ -157,7 +157,6 @@ def sco_import_generate_excel_sample( exclude_cols=[], extra_cols=[], group_ids=[], - context=None, REQUEST=None, ): """Generates an excel document based on format fmt @@ -171,10 +170,10 @@ def sco_import_generate_excel_sample( titles = [] titlesStyles = [] for l in fmt: - name = scu.strlower(l[0]) + name = l[0].lower() if (not with_codesemestre) and name == "codesemestre": continue # pas de colonne codesemestre - if only_tables is not None and scu.strlower(l[2]) not in only_tables: + if only_tables is not None and l[2].lower() not in only_tables: continue # table non demandée if name in exclude_cols: continue # colonne exclue @@ -188,7 +187,7 @@ def sco_import_generate_excel_sample( titlesStyles.append(style) titles += extra_cols titlesStyles += [style] * len(extra_cols) - if group_ids and context: + if group_ids: groups_infos = sco_groups_view.DisplayedGroupsInfos(group_ids, REQUEST=REQUEST) members = groups_infos.members log( @@ -209,7 +208,7 @@ def sco_import_generate_excel_sample( ) l.append(etud["partitionsgroupes"]) else: - key = scu.strlower(field).split()[0] + key = field.lower().split()[0] l.append(etud.get(key, "")) lines.append(l) else: @@ -220,7 +219,6 @@ def sco_import_generate_excel_sample( def students_import_excel( - context, csvfile, REQUEST=None, formsemestre_id=None, @@ -230,7 +228,6 @@ def students_import_excel( "import students from Excel file" diag = scolars_import_excel_file( csvfile, - context, REQUEST, formsemestre_id=formsemestre_id, check_homonyms=check_homonyms, @@ -258,7 +255,6 @@ def students_import_excel( def scolars_import_excel_file( datafile, - context, REQUEST, formsemestre_id=None, check_homonyms=True, @@ -285,7 +281,7 @@ def scolars_import_excel_file( titles = {} fmt = sco_import_format() for l in fmt: - tit = scu.strlower(l[0]).split()[0] # titles in lowercase, and take 1st word + tit = l[0].lower().split()[0] # titles in lowercase, and take 1st word if ( (not formsemestre_id) or (tit != "codesemestre") ) and tit not in exclude_cols: @@ -294,7 +290,7 @@ def scolars_import_excel_file( # log("titles=%s" % titles) # remove quotes, downcase and keep only 1st word try: - fs = [scu.strlower(scu.stripquotes(s)).split()[0] for s in data[0]] + fs = [scu.stripquotes(s).lower().split()[0] for s in data[0]] except: raise ScoValueError("Titres de colonnes invalides (ou vides ?)") # log("excel: fs='%s'\ndata=%s" % (str(fs), str(data))) @@ -371,7 +367,7 @@ def scolars_import_excel_file( % (val, linenum, titleslist[i]) ) # xxx Ad-hoc checks (should be in format description) - if scu.strlower(titleslist[i]) == "sexe": + if titleslist[i].lower() == "sexe": try: val = sco_etud.input_civilite(val) except: @@ -380,13 +376,13 @@ def scolars_import_excel_file( % (val, linenum, titleslist[i]) ) # Excel date conversion: - if scu.strlower(titleslist[i]) == "date_naissance": + if titleslist[i].lower() == "date_naissance": if val: # if re.match(r"^[0-9]*\.?[0-9]*$", str(val)): val = sco_excel.xldate_as_datetime(val) # INE if ( - scu.strlower(titleslist[i]) == "code_ine" + titleslist[i].lower() == "code_ine" and always_require_ine and not val ): @@ -419,7 +415,6 @@ def scolars_import_excel_file( # Insert in DB tables formsemestre_to_invalidate.add( _import_one_student( - context, cnx, REQUEST, formsemestre_id, @@ -494,12 +489,11 @@ def scolars_import_excel_file( def students_import_admission( - context, csvfile, type_admission="", REQUEST=None, formsemestre_id=None + csvfile, type_admission="", REQUEST=None, formsemestre_id=None ): "import donnees admission from Excel file (v2016)" diag = scolars_import_admission( csvfile, - context, REQUEST, formsemestre_id=formsemestre_id, type_admission=type_admission, @@ -522,7 +516,6 @@ def students_import_admission( def _import_one_student( - context, cnx, REQUEST, formsemestre_id, @@ -542,7 +535,7 @@ def _import_one_student( ) # Identite args = values.copy() - etudid = sco_etud.identite_create(cnx, args, context=context, REQUEST=REQUEST) + etudid = sco_etud.identite_create(cnx, args, REQUEST=REQUEST) created_etudids.append(etudid) # Admissions args["etudid"] = etudid @@ -575,7 +568,6 @@ def _import_one_student( ) do_formsemestre_inscription_with_modules( - context, args["formsemestre_id"], etudid, group_ids, @@ -594,7 +586,7 @@ def _is_new_ine(cnx, code_ine): # ------ Fonction ré-écrite en nov 2016 pour lire des fichiers sans etudid (fichiers APB) def scolars_import_admission( - datafile, context, REQUEST, formsemestre_id=None, type_admission=None + datafile, REQUEST, formsemestre_id=None, type_admission=None ): """Importe données admission depuis un fichier Excel quelconque par exemple ceux utilisés avec APB @@ -698,13 +690,13 @@ def scolars_import_admission( # Type admission: traitement particulier if not cur_adm["type_admission"] and not args.get("type_admission"): args["type_admission"] = type_admission - sco_etud.etudident_edit(cnx, args) + sco_etud.etudident_edit(cnx, args, disable_notify=True) adr = sco_etud.adresse_list(cnx, args={"etudid": etud["etudid"]}) if adr: args["adresse_id"] = adr[0]["adresse_id"] sco_etud.adresse_edit( - cnx, args - ) # ne passe pas le contexte: pas de notification ici + cnx, args, disable_notify=True + ) # pas de notification ici else: args["typeadresse"] = "domicile" args["description"] = "(infos admission)" @@ -800,7 +792,7 @@ def adm_convert_real(v): return float(v) -def adm_table_description_format(context): +def adm_table_description_format(): """Table HTML (ou autre format) decrivant les donnees d'admissions importables""" Fmt = sco_import_format_dict(with_codesemestre=False) for k in Fmt: diff --git a/app/scodoc/sco_import_users.py b/app/scodoc/sco_import_users.py index 1080799e..5280559e 100644 --- a/app/scodoc/sco_import_users.py +++ b/app/scodoc/sco_import_users.py @@ -76,7 +76,7 @@ def import_excel_file(datafile, REQUEST=None, context=None): if not data: # probably a bug raise ScoException("import_excel_file: empty file !") # 1- --- check title line - fs = [scu.strlower(scu.stripquotes(s)) for s in data[0]] + fs = [scu.stripquotes(s).lower() for s in data[0]] log("excel: fs='%s'\ndata=%s" % (str(fs), str(data))) # check cols cols = {}.fromkeys(TITLES) @@ -230,4 +230,4 @@ Pour plus d'informations sur ce logiciel, voir %s msg.epilogue = "" txt = MIMEText(txt, "plain", scu.SCO_ENCODING) msg.attach(txt) - sco_emails.sendEmail(context, msg) + sco_emails.sendEmail(msg) diff --git a/app/scodoc/sco_inscr_passage.py b/app/scodoc/sco_inscr_passage.py index fd8ad364..de567014 100644 --- a/app/scodoc/sco_inscr_passage.py +++ b/app/scodoc/sco_inscr_passage.py @@ -49,17 +49,17 @@ from app.scodoc import sco_etud from app.scodoc.sco_exceptions import ScoValueError -def list_authorized_etuds_by_sem(context, sem, delai=274): +def list_authorized_etuds_by_sem(sem, delai=274): """Liste des etudiants autorisés à s'inscrire dans sem. delai = nb de jours max entre la date de l'autorisation et celle de debut du semestre cible. """ - src_sems = list_source_sems(context, sem, delai=delai) - inscrits = list_inscrits(context, sem["formsemestre_id"]) + src_sems = list_source_sems(sem, delai=delai) + inscrits = list_inscrits(sem["formsemestre_id"]) r = {} candidats = {} # etudid : etud (tous les etudiants candidats) nb = 0 # debug for src in src_sems: - liste = list_etuds_from_sem(context, src, sem) + liste = list_etuds_from_sem(src, sem) liste_filtree = [] for e in liste: # Filtre ceux qui se sont déjà inscrit dans un semestre APRES le semestre src @@ -105,7 +105,7 @@ def list_authorized_etuds_by_sem(context, sem, delai=274): return r, inscrits, candidats -def list_inscrits(context, formsemestre_id, with_dems=False): +def list_inscrits(formsemestre_id, with_dems=False): """Etudiants déjà inscrits à ce semestre { etudid : etud } """ @@ -123,10 +123,10 @@ def list_inscrits(context, formsemestre_id, with_dems=False): return inscr -def list_etuds_from_sem(context, src, dst): +def list_etuds_from_sem(src, dst): """Liste des etudiants du semestre src qui sont autorisés à passer dans le semestre dst.""" target = dst["semestre_id"] - dpv = sco_pvjury.dict_pvjury(context, src["formsemestre_id"]) + dpv = sco_pvjury.dict_pvjury(src["formsemestre_id"]) if not dpv: return [] etuds = [ @@ -137,7 +137,7 @@ def list_etuds_from_sem(context, src, dst): return etuds -def list_inscrits_date(context, sem): +def list_inscrits_date(sem): """Liste les etudiants inscrits dans n'importe quel semestre SAUF sem à la date de début de sem. """ @@ -156,7 +156,7 @@ def list_inscrits_date(context, sem): return [x[0] for x in cursor.fetchall()] -def do_inscrit(context, sem, etudids, REQUEST=None, inscrit_groupes=False): +def do_inscrit(sem, etudids, REQUEST=None, inscrit_groupes=False): """Inscrit ces etudiants dans ce semestre (la liste doit avoir été vérifiée au préalable) En option: inscrit aux mêmes groupes que dans le semestre origine @@ -164,7 +164,6 @@ def do_inscrit(context, sem, etudids, REQUEST=None, inscrit_groupes=False): log("do_inscrit (inscrit_groupes=%s): %s" % (inscrit_groupes, etudids)) for etudid in etudids: sco_formsemestre_inscriptions.do_formsemestre_inscription_with_modules( - context, sem["formsemestre_id"], etudid, etat="I", @@ -212,15 +211,15 @@ def do_inscrit(context, sem, etudids, REQUEST=None, inscrit_groupes=False): ) -def do_desinscrit(context, sem, etudids, REQUEST): +def do_desinscrit(sem, etudids, REQUEST): log("do_desinscrit: %s" % etudids) for etudid in etudids: sco_formsemestre_inscriptions.do_formsemestre_desinscription( - context, etudid, sem["formsemestre_id"], REQUEST=REQUEST + etudid, sem["formsemestre_id"], REQUEST=REQUEST ) -def list_source_sems(context, sem, delai=None): +def list_source_sems(sem, delai=None): """Liste des semestres sources sem est le semestre destination """ @@ -256,7 +255,6 @@ def list_source_sems(context, sem, delai=None): def formsemestre_inscr_passage( - context, formsemestre_id, etuds=[], inscrit_groupes=False, @@ -288,12 +286,12 @@ def formsemestre_inscr_passage( if type(etuds) == type(""): etuds = etuds.split(",") # vient du form de confirmation - auth_etuds_by_sem, inscrits, candidats = list_authorized_etuds_by_sem(context, sem) + auth_etuds_by_sem, inscrits, candidats = list_authorized_etuds_by_sem(sem) etuds_set = set(etuds) candidats_set = set(candidats) inscrits_set = set(inscrits) candidats_non_inscrits = candidats_set - inscrits_set - inscrits_ailleurs = set(list_inscrits_date(context, sem)) + inscrits_ailleurs = set(list_inscrits_date(sem)) def set_to_sorted_etud_list(etudset): etuds = [candidats[etudid] for etudid in etudset] @@ -310,7 +308,6 @@ def formsemestre_inscr_passage( if not submitted: H += build_page( - context, REQUEST, sem, auth_etuds_by_sem, @@ -361,7 +358,6 @@ def formsemestre_inscr_passage( else: # Inscription des étudiants au nouveau semestre: do_inscrit( - context, sem, a_inscrire, REQUEST=REQUEST, @@ -369,7 +365,7 @@ def formsemestre_inscr_passage( ) # Desincriptions: - do_desinscrit(context, sem, a_desinscrire, REQUEST) + do_desinscrit(sem, a_desinscrire, REQUEST) H.append( """

Opération effectuée

@@ -398,7 +394,6 @@ def formsemestre_inscr_passage( def build_page( - context, REQUEST, sem, auth_etuds_by_sem, @@ -429,7 +424,7 @@ def build_page( et %d candidats supplémentaires """ % (len(inscrits), len(candidats_non_inscrits)), - etuds_select_boxes(context, auth_etuds_by_sem, inscrits_ailleurs), + etuds_select_boxes(auth_etuds_by_sem, inscrits_ailleurs), """

""", formsemestre_inscr_passage_help(sem), """

""", @@ -473,7 +468,6 @@ def formsemestre_inscr_passage_help(sem): def etuds_select_boxes( - context, auth_etuds_by_cat, inscrits_ailleurs={}, sel_inscrits=True, @@ -489,7 +483,7 @@ def etuds_select_boxes( export_cat_xls = """ if export_cat_xls: - return etuds_select_box_xls(context, auth_etuds_by_cat[export_cat_xls]) + return etuds_select_box_xls(auth_etuds_by_cat[export_cat_xls]) H = [ """