diff --git a/TrivialFormulator.py b/TrivialFormulator.py
index 788d95da1c..5cadf92905 100644
--- a/TrivialFormulator.py
+++ b/TrivialFormulator.py
@@ -9,7 +9,7 @@
v 1.2
"""
-from types import *
+from types import BooleanType, StringType
def TrivialFormulator(
@@ -44,7 +44,7 @@ def TrivialFormulator(
-1 cancel (if cancelbutton specified)
HTML form: html string (form to insert in your web page)
values: None or, when the form is submitted and correctly filled,
- a dictionnary with the requeted values.
+ a dictionnary with the requeted values.
formdescription: sequence [ (field, description), ... ]
where description is a dict with following (optional) keys:
default : default value for this field ('')
@@ -63,7 +63,7 @@ def TrivialFormulator(
withcheckbox: if true, place a checkbox at the left of the input
elem. Checked items will be returned in 'tf-checked'
attributes: a liste of strings to put in the HTML form element
- template: HTML template for element
+ template: HTML template for element
HTML elements:
input_type : 'text', 'textarea', 'password',
'radio', 'menu', 'checkbox',
@@ -368,9 +368,6 @@ class TF:
idx = 0
for idx in range(len(self.formdescription)):
(field, descr) = self.formdescription[idx]
- nextitemname = None
- if idx < len(self.formdescription) - 2:
- nextitemname = self.formdescription[idx + 1][0]
if descr.get("readonly", False):
R.append(self._ReadOnlyElement(field, descr))
continue
@@ -682,7 +679,6 @@ class TF:
"Generate HTML for an element, read-only"
R = []
title = descr.get("title", field.capitalize())
- withcheckbox = descr.get("withcheckbox", False)
input_type = descr.get("input_type", "text")
klass = descr.get("cssclass", "")
klass = " " + klass
diff --git a/VERSION.py b/VERSION.py
index 68853baada..8e8a40a40d 100644
--- a/VERSION.py
+++ b/VERSION.py
@@ -1,11 +1,15 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
-SCOVERSION = "7.21"
+SCOVERSION = "7.22"
SCONAME = "ScoDoc"
SCONEWS = """
+
Année 2021
+
+- Modernisation du code Python.
+
Année 2020
- Corrections d'erreurs, améliorations saise absences< et affichage bulletins
diff --git a/notesdb.py b/notesdb.py
index fb073abf33..5911978c02 100644
--- a/notesdb.py
+++ b/notesdb.py
@@ -8,8 +8,8 @@ import psycopg2.pool
import psycopg2.extras
import thread
from notes_log import log
-from sco_exceptions import *
-from types import *
+from sco_exceptions import ScoException, ScoValueError, NoteProcessError
+from types import StringType
from cgi import escape
import datetime
@@ -175,7 +175,7 @@ def DBSelectArgs(
cond = ""
i = 1
cl = []
- for (aux_tab, aux_id) in aux_tables:
+ for (_, aux_id) in aux_tables:
cl.append("T0.%s = T%d.%s" % (id_name, i, aux_id))
i = i + 1
cond += " and ".join(cl)
diff --git a/pe_settag.py b/pe_settag.py
index 38bfc56627..7d46b7c640 100644
--- a/pe_settag.py
+++ b/pe_settag.py
@@ -36,7 +36,7 @@ Created on Fri Sep 9 09:15:05 2016
@author: barasc
"""
-from pe_tools import *
+from pe_tools import pe_print, PE_DEBUG
import pe_tagtable
import pe_semestretag
diff --git a/pe_view.py b/pe_view.py
index a5dca1fdca..39ee975875 100644
--- a/pe_view.py
+++ b/pe_view.py
@@ -44,7 +44,7 @@ from gen_tables import GenTable
import sco_codes_parcours
import pe_tools
-from pe_tools import *
+from pe_tools import PE_LATEX_ENCODING
import pe_tagtable
import pe_semestretag
import pe_settag
diff --git a/sco_edit_module.py b/sco_edit_module.py
index a899cc0f35..899f04f01a 100644
--- a/sco_edit_module.py
+++ b/sco_edit_module.py
@@ -172,7 +172,7 @@ def module_create(context, matiere_id=None, REQUEST=None):
if tf[0] == 0:
return "\n".join(H) + tf[1] + context.sco_footer(REQUEST)
else:
- moduleid = context.do_module_create(tf[2], REQUEST)
+ context.do_module_create(tf[2], REQUEST)
return REQUEST.RESPONSE.redirect(
REQUEST.URL1 + "/ue_list?formation_id=" + UE["formation_id"]
)
@@ -397,7 +397,6 @@ def edit_module_set_code_apogee(context, id=None, value=None, REQUEST=None):
modules = context.do_module_list(args={"module_id": module_id})
if not modules:
return "module invalide" # shoud not occur
- module = modules[0]
context.do_module_edit({"module_id": module_id, "code_apogee": value})
if not value:
diff --git a/sco_parcours_dut.py b/sco_parcours_dut.py
index 3bdaca8e3b..952ff6be3a 100644
--- a/sco_parcours_dut.py
+++ b/sco_parcours_dut.py
@@ -27,11 +27,37 @@
"""Semestres: gestion parcours DUT (Arreté du 13 août 2005)
"""
+from types import FloatType
+
+import sco_utils as scu
import notesdb as ndb
from notes_log import log
from scolog import logdb
import sco_formsemestre
-from sco_codes_parcours import *
+
+from sco_codes_parcours import (
+ CMP,
+ ADC,
+ ADJ,
+ ADM,
+ AJ,
+ ATT,
+ NO_SEMESTRE_ID,
+ BUG,
+ NEXT,
+ NEXT2,
+ NEXT_OR_NEXT2,
+ REO,
+ REDOANNEE,
+ REDOSEM,
+ RA_OR_NEXT,
+ RA_OR_RS,
+ RS_OR_NEXT,
+ CODES_SEM_VALIDES,
+ NOTES_BARRE_GEN_COMPENSATION,
+ code_semestre_attente,
+ code_semestre_validant,
+)
from dutrules import DUTRules # regles generees a partir du CSV
from sco_exceptions import ScoValueError
@@ -166,7 +192,7 @@ class SituationEtudParcoursGeneric:
if rule.conclusion[5] == BUG:
log("get_possible_choices: inconsistency: state=%s" % str(state))
#
- valid_semestre = code_semestre_validant(rule.conclusion[0])
+ # valid_semestre = code_semestre_validant(rule.conclusion[0])
choices.append(
DecisionSem(
code_etat=rule.conclusion[0],
@@ -391,7 +417,7 @@ class SituationEtudParcoursGeneric:
)
self.moy_gen = self.nt.get_etud_moy_gen(self.etudid)
self.barre_moy_ok = (type(self.moy_gen) == FloatType) and (
- self.moy_gen >= (self.parcours.BARRE_MOY - NOTES_TOLERANCE)
+ self.moy_gen >= (self.parcours.BARRE_MOY - scu.NOTES_TOLERANCE)
)
# conserve etat UEs
ue_ids = [
diff --git a/sco_pvpdf.py b/sco_pvpdf.py
index 2a3d50bc58..391e8c057f 100644
--- a/sco_pvpdf.py
+++ b/sco_pvpdf.py
@@ -29,24 +29,37 @@
"""
import os
import types
+import re
+import cStringIO
+import reportlab
+from reportlab.lib.units import cm, mm
+from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
+from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Frame, PageBreak
+from reportlab.platypus import Table, TableStyle, Image, KeepInFrame
+from reportlab.platypus.flowables import Flowable
+from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate
+from reportlab.lib.pagesizes import A4, landscape
+from reportlab.lib import styles
+from reportlab.lib.colors import Color
-from sco_pdf import *
import sco_utils as scu
+import sco_pdf
+from sco_pdf import SU
import sco_formsemestre
import sco_pvjury
import sco_codes_parcours
from sco_pdf import PDFLOCK
import sco_preferences
import sco_bulletins_pdf
+import VERSION
+LOGO_FOOTER_ASPECT = scu.CONFIG.LOGO_FOOTER_ASPECT # XXX A AUTOMATISER
+LOGO_FOOTER_HEIGHT = scu.CONFIG.LOGO_FOOTER_HEIGHT * mm
+LOGO_FOOTER_WIDTH = LOGO_FOOTER_HEIGHT * scu.CONFIG.LOGO_FOOTER_ASPECT
-LOGO_FOOTER_ASPECT = CONFIG.LOGO_FOOTER_ASPECT # XXX A AUTOMATISER
-LOGO_FOOTER_HEIGHT = CONFIG.LOGO_FOOTER_HEIGHT * mm
-LOGO_FOOTER_WIDTH = LOGO_FOOTER_HEIGHT * CONFIG.LOGO_FOOTER_ASPECT
-
-LOGO_HEADER_ASPECT = CONFIG.LOGO_HEADER_ASPECT # XXX logo IUTV (A AUTOMATISER)
-LOGO_HEADER_HEIGHT = CONFIG.LOGO_HEADER_HEIGHT * mm
-LOGO_HEADER_WIDTH = LOGO_HEADER_HEIGHT * CONFIG.LOGO_HEADER_ASPECT
+LOGO_HEADER_ASPECT = scu.CONFIG.LOGO_HEADER_ASPECT # XXX logo IUTV (A AUTOMATISER)
+LOGO_HEADER_HEIGHT = scu.CONFIG.LOGO_HEADER_HEIGHT * mm
+LOGO_HEADER_WIDTH = LOGO_HEADER_HEIGHT * scu.CONFIG.LOGO_HEADER_ASPECT
def pageFooter(canvas, doc, logo, preferences, with_page_numbers=True):
@@ -76,7 +89,7 @@ def pageFooter(canvas, doc, logo, preferences, with_page_numbers=True):
RightFootStyle.fontSize = preferences["SCOLAR_FONT_SIZE_FOOT"]
RightFootStyle.alignment = TA_RIGHT
- p = makeParas(
+ p = sco_pdf.makeParas(
"""%s%s"""
% (preferences["INSTITUTION_NAME"], preferences["INSTITUTION_ADDRESS"]),
LeftFootStyle,
@@ -186,12 +199,12 @@ class CourrierIndividuelTemplate(PageTemplate):
self.background_image_filename = None
self.logo_footer = None
self.logo_header = None
- # Search logos in dept specific dir, then in global config dir
+ # Search logos in dept specific dir, then in global scu.CONFIG dir
for image_dir in (
- SCODOC_LOGOS_DIR + "/logos_" + context.DeptId() + "/",
- SCODOC_LOGOS_DIR + "/", # global logos
+ scu.SCODOC_LOGOS_DIR + "/logos_" + context.DeptId() + "/",
+ scu.SCODOC_LOGOS_DIR + "/", # global logos
):
- for suffix in LOGOS_IMAGES_ALLOWED_TYPES:
+ for suffix in scu.LOGOS_IMAGES_ALLOWED_TYPES:
if template_name == "PVJuryTemplate":
fn = image_dir + "/pvjury_background" + "." + suffix
else:
@@ -377,7 +390,7 @@ def pdf_lettres_individuelles(
CourrierIndividuelTemplate(
document,
context=context,
- author="%s %s (E. Viennet)" % (SCONAME, SCOVERSION),
+ author="%s %s (E. Viennet)" % (VERSION.SCONAME, VERSION.SCOVERSION),
title="Lettres décision %s" % sem["titreannee"],
subject="Décision jury",
margins=margins,
@@ -514,7 +527,7 @@ def pdf_lettre_individuelle(sem, decision, etud, params, signature=None, context
% params
)
sig = _simulate_br(sig, '')
- objects += makeParas(
+ objects += sco_pdf.makeParas(
(
""""""
+ sig
@@ -529,7 +542,7 @@ def pdf_lettre_individuelle(sem, decision, etud, params, signature=None, context
% params
)
sig = _simulate_br(sig, '')
- objects += makeParas(
+ objects += sco_pdf.makeParas(
(
""""""
+ sig
@@ -650,7 +663,7 @@ def pvjury_pdf(
PVTemplate(
document,
context=context,
- author="%s %s (E. Viennet)" % (SCONAME, SCOVERSION),
+ author="%s %s (E. Viennet)" % (VERSION.SCONAME, VERSION.SCOVERSION),
title=SU("PV du jury de %s" % sem["titre_num"]),
subject="PV jury",
preferences=context.get_preferences(formsemestre_id),
@@ -683,7 +696,7 @@ def _pvjury_pdf_type(
sem = dpv["formsemestre"]
formsemestre_id = sem["formsemestre_id"]
- titre_jury, titre_court_jury = _descr_jury(sem, diplome)
+ titre_jury, _ = _descr_jury(sem, diplome)
titre_diplome = pv_title or dpv["formation"]["titre_officiel"]
objects = []
@@ -708,7 +721,7 @@ def _pvjury_pdf_type(
bulletStyle.spaceAfter = 5 * mm
objects += [Spacer(0, 5 * mm)]
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""
Procès-verbal de %s du département %s - Session unique %s
"""
@@ -720,7 +733,7 @@ def _pvjury_pdf_type(
style,
)
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""
%s
"""
@@ -729,20 +742,20 @@ def _pvjury_pdf_type(
)
if showTitle:
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""Semestre: %s""" % sem["titre"], style
)
if context.get_preference("PV_TITLE_WITH_VDI", formsemestre_id):
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""VDI et Code: %s""" % (VDICode or ""), style
)
if date_jury:
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""Jury tenu le %s""" % date_jury, style
)
- objects += makeParas(
+ objects += sco_pdf.makeParas(
""
+ context.get_preference("PV_INTRO", formsemestre_id)
% {
@@ -757,7 +770,7 @@ def _pvjury_pdf_type(
bulletStyle,
)
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""Le jury propose les décisions suivantes :""", style
)
objects += [Spacer(0, 4 * mm)]
@@ -809,7 +822,7 @@ def _pvjury_pdf_type(
objects.append(Table(Pt, repeatRows=1, colWidths=widths, style=table_style))
# Signature du directeur
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""
Le %s, %s"""
% (
@@ -822,7 +835,7 @@ def _pvjury_pdf_type(
# Légende des codes
codes = sco_codes_parcours.CODES_EXPL.keys()
codes.sort()
- objects += makeParas(
+ objects += sco_pdf.makeParas(
"""
Codes utilisés :""",
style,
diff --git a/sco_trombino.py b/sco_trombino.py
index 416e84af5b..b529ea7735 100644
--- a/sco_trombino.py
+++ b/sco_trombino.py
@@ -28,16 +28,27 @@
"""Photos: trombinoscopes
"""
-try:
- from cStringIO import StringIO
-except:
- from StringIO import StringIO
+from cStringIO import StringIO
from zipfile import ZipFile, BadZipfile
import xml
import tempfile
+import reportlab
+from reportlab.lib.units import cm, mm
+from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
+from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Frame, PageBreak
+from reportlab.platypus import Table, TableStyle, Image, KeepInFrame
+from reportlab.platypus.flowables import Flowable
+from reportlab.platypus.doctemplate import PageTemplate, BaseDocTemplate
+from reportlab.lib.pagesizes import A4, landscape
+from reportlab.lib import styles
+from reportlab.lib.colors import Color
+from reportlab.lib import colors
+from PIL import Image as PILImage
from notes_log import log
import sco_utils as scu
+import sco_pdf
+from sco_pdf import SU
from sco_exceptions import ScoValueError
from TrivialFormulator import TrivialFormulator
import scolars
@@ -47,11 +58,8 @@ import sco_groups
import sco_groups_view
import sco_portal_apogee
import htmlutils
-from sco_pdf import *
import ImportScolars
import sco_excel
-from reportlab.lib import colors
-from PIL import Image as PILImage
def trombino(
@@ -368,7 +376,7 @@ def _trombino_pdf(context, groups_infos, REQUEST):
# Build document
document = BaseDocTemplate(report)
document.addPageTemplates(
- ScolarsPageTemplate(
+ sco_pdf.ScolarsPageTemplate(
document,
context=context,
preferences=context.get_preferences(sem["formsemestre_id"]),
@@ -451,7 +459,7 @@ def _listeappel_photos_pdf(context, groups_infos, REQUEST):
# Build document
document = BaseDocTemplate(report)
document.addPageTemplates(
- ScolarsPageTemplate(
+ sco_pdf.ScolarsPageTemplate(
document,
context,
preferences=context.get_preferences(sem["formsemestre_id"]),
diff --git a/scolog.py b/scolog.py
index 1ee852da50..6ce6e54251 100644
--- a/scolog.py
+++ b/scolog.py
@@ -26,8 +26,10 @@
##############################################################################
-import pdb, os, sys
-from sco_exceptions import *
+import pdb
+import os
+import sys
+
import notesdb as ndb
from notes_log import retreive_request