python-modernize

This commit is contained in:
Emmanuel Viennet 2021-07-09 18:49:16 +02:00
parent 960de61928
commit 67c458f929
6 changed files with 110 additions and 92 deletions

View File

@ -701,7 +701,6 @@ class TF:
labels = descr.get( labels = descr.get(
"labels", descr.get("allowed_values", ["oui", "non"]) "labels", descr.get("allowed_values", ["oui", "non"])
) )
# XXX open('/tmp/log', 'w').write('%s labels=%s, val=%s\ndescr=%s\n'%(field, labels, self.values[field], descr))
R.append(labels[int(self.values[field])]) R.append(labels[int(self.values[field])])
if int(self.values[field]): if int(self.values[field]):
R.append('<input type="hidden" name="%s" value="1"/>' % field) R.append('<input type="hidden" name="%s" value="1"/>' % field)

View File

@ -34,11 +34,15 @@ Runned as "www-data" with scodoc and postgresql up.
E. Viennet, Jan 2019 E. Viennet, Jan 2019
""" """
import sys, os, traceback, psycopg2 import os
import psycopg2
import sys
import traceback
def log(msg): def log(msg):
sys.stdout.flush() sys.stdout.flush()
sys.stderr.write(msg+'\n') sys.stderr.write(msg + "\n")
sys.stderr.flush() sys.stderr.flush()
@ -61,52 +65,47 @@ anonymize_null = "NULL"
# car c'est la clé avec SCOUSERS) # car c'est la clé avec SCOUSERS)
# #
ANONYMIZED_FIELDS = { ANONYMIZED_FIELDS = {
'identite.nom' : anonymize_name, "identite.nom": anonymize_name,
'identite.prenom' : anonymize_name, "identite.prenom": anonymize_name,
'identite.date_naissance' : anonymize_date, "identite.date_naissance": anonymize_date,
'identite.lieu_naissance' : anonymize_question_str, "identite.lieu_naissance": anonymize_question_str,
'identite.nationalite' : anonymize_question_str, "identite.nationalite": anonymize_question_str,
'identite.foto' : anonymize_null, "identite.foto": anonymize_null,
'identite.code_nip' : anonymize_null, "identite.code_nip": anonymize_null,
'identite.code_ine' : anonymize_null, "identite.code_ine": anonymize_null,
'identite.nom_usuel' : anonymize_null, "identite.nom_usuel": anonymize_null,
"adresse.email": "'ano@nyme.fr'",
"adresse.emailperso": anonymize_null,
"adresse.domicile": anonymize_null,
"adresse.telephone": anonymize_null,
"adresse.telephonemobile": anonymize_null,
"adresse.fax": anonymize_null,
"billet_absence.description": anonymize_null,
"etud_annotations.comment": anonymize_name,
"entreprises.nom": anonymize_name,
"entreprises.adresse": anonymize_null,
"entreprises.ville": anonymize_null,
"entreprises.codepostal": anonymize_null,
"entreprises.pays": anonymize_null,
"entreprises.contact_origine": anonymize_null,
"entreprises.secteur": anonymize_null,
"entreprises.note": anonymize_null,
"entreprises.privee": anonymize_null,
"entreprises.localisation": anonymize_null,
"entreprise_correspondant.nom": anonymize_name,
"entreprise_correspondant.prenom": anonymize_name,
"entreprise_correspondant.phone1": anonymize_null,
"entreprise_correspondant.phone2": anonymize_null,
"entreprise_correspondant.mobile": anonymize_null,
"entreprise_correspondant.mail1": anonymize_null,
"entreprise_correspondant.mail2": anonymize_null,
"entreprise_correspondant.note": anonymize_null,
"entreprise_correspondant.fax": anonymize_null,
"entreprise_contact.description": anonymize_null,
"entreprise_contact.enseignant": anonymize_null,
"notes_appreciations.comment": anonymize_name,
}
'adresse.email' : "'ano@nyme.fr'",
'adresse.emailperso' : anonymize_null,
'adresse.domicile' : anonymize_null,
'adresse.telephone' : anonymize_null,
'adresse.telephonemobile' : anonymize_null,
'adresse.fax' : anonymize_null,
'billet_absence.description' : anonymize_null,
'etud_annotations.comment' : anonymize_name,
'entreprises.nom' : anonymize_name,
'entreprises.adresse' : anonymize_null,
'entreprises.ville' : anonymize_null,
'entreprises.codepostal' : anonymize_null,
'entreprises.pays' : anonymize_null,
'entreprises.contact_origine' : anonymize_null,
'entreprises.secteur' : anonymize_null,
'entreprises.note' : anonymize_null,
'entreprises.privee' : anonymize_null,
'entreprises.localisation' : anonymize_null,
'entreprise_correspondant.nom' : anonymize_name,
'entreprise_correspondant.prenom' : anonymize_name,
'entreprise_correspondant.phone1' : anonymize_null,
'entreprise_correspondant.phone2' : anonymize_null,
'entreprise_correspondant.mobile' : anonymize_null,
'entreprise_correspondant.mail1' : anonymize_null,
'entreprise_correspondant.mail2' : anonymize_null,
'entreprise_correspondant.note' : anonymize_null,
'entreprise_correspondant.fax' : anonymize_null,
'entreprise_contact.description' : anonymize_null,
'entreprise_contact.enseignant' : anonymize_null,
'notes_appreciations.comment' : anonymize_name,
}
def anonymize_column(cursor, tablecolumn): def anonymize_column(cursor, tablecolumn):
"""Anonymise une colonne """Anonymise une colonne
@ -115,28 +114,32 @@ def anonymize_column(cursor, tablecolumn):
(cette clé doit être anonyme et unique). Par exemple, un nom propre pourrait être (cette clé doit être anonyme et unique). Par exemple, un nom propre pourrait être
remplacé par nom_valeur_de_la_clé. remplacé par nom_valeur_de_la_clé.
""" """
table, column = tablecolumn.split('.') table, column = tablecolumn.split(".")
anonymization = ANONYMIZED_FIELDS[ tablecolumn ] anonymization = ANONYMIZED_FIELDS[tablecolumn]
log('processing {}'.format(tablecolumn)) log("processing {}".format(tablecolumn))
cursor.execute("UPDATE {table} SET {column} = {value};".format( cursor.execute(
"UPDATE {table} SET {column} = {value};".format(
table=table, table=table,
column=column, column=column,
value=anonymization(column, key_name) if callable(anonymization) else anonymization value=anonymization(column, key_name)
)) if callable(anonymization)
else anonymization,
)
)
def anonymize_db(cursor): def anonymize_db(cursor):
"""Traite, une à une, les colonnes indiquées dans ANONYMIZED_FIELDS """Traite, une à une, les colonnes indiquées dans ANONYMIZED_FIELDS"""
"""
for tablecolumn in ANONYMIZED_FIELDS: for tablecolumn in ANONYMIZED_FIELDS:
anonymize_column(cursor, tablecolumn) anonymize_column(cursor, tablecolumn)
dbname = sys.argv[1] dbname = sys.argv[1]
log('\nAnonymizing database %s' % dbname) log("\nAnonymizing database %s" % dbname)
cnx_string = 'dbname=' + dbname cnx_string = "dbname=" + dbname
try: try:
cnx = psycopg2.connect( cnx_string ) cnx = psycopg2.connect(cnx_string)
except: except:
log("\n*** Error: can't connect to database %s ***\n" % dbname) log("\n*** Error: can't connect to database %s ***\n" % dbname)
log('connexion string was "%s"' % cnx_string) log('connexion string was "%s"' % cnx_string)

View File

@ -1,6 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Script pour ScoDoc7 (python2), obsolete
"""Fix bug #70 """Fix bug #70
Utiliser comme: Utiliser comme:

0
config/postupgrade.py Normal file → Executable file
View File

View File

@ -15,9 +15,10 @@
# souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention. # souvent de comprendre le code qui les utilise pour ne pas faire d'erreur: attention.
class CFG : class CFG:
pass pass
CONFIG = CFG() CONFIG = CFG()
CONFIG.always_require_ine = 0 # set to 1 if you want to require INE CONFIG.always_require_ine = 0 # set to 1 if you want to require INE
@ -29,23 +30,29 @@ CONFIG.ABSOLUTE_URL = ""
# #
# ------------- Documents PDF ------------- # ------------- Documents PDF -------------
# #
CONFIG.SCOLAR_FONT = 'Helvetica' CONFIG.SCOLAR_FONT = "Helvetica"
CONFIG.SCOLAR_FONT_SIZE = 10 CONFIG.SCOLAR_FONT_SIZE = 10
CONFIG.SCOLAR_FONT_SIZE_FOOT = 6 CONFIG.SCOLAR_FONT_SIZE_FOOT = 6
# Pour pieds de pages Procès verbaux: # Pour pieds de pages Procès verbaux:
# (markup leger reportlab supporté, par ex. <b>blah blah</b>) # (markup leger reportlab supporté, par ex. <b>blah blah</b>)
CONFIG.INSTITUTION_NAME="<b>Institut Universitaire de Technologie - Université Paris 13</b>" CONFIG.INSTITUTION_NAME = (
CONFIG.INSTITUTION_ADDRESS="Web <b>www.iutv.univ-paris13.fr</b> - 99 avenue Jean-Baptiste Clément - F 93430 Villetaneuse" "<b>Institut Universitaire de Technologie - Université Georges Perec</b>"
)
CONFIG.INSTITUTION_ADDRESS = (
"Web <b>www.sor.bonne.top</b> - 11, rue Simon Crubelier - 75017 Paris"
)
CONFIG.INSTITUTION_CITY="Villetaneuse" CONFIG.INSTITUTION_CITY = "Paris"
# Taille du l'image logo: largeur/hauteur (ne pas oublier le . !!!) # Taille du l'image logo: largeur/hauteur (ne pas oublier le . !!!)
CONFIG.LOGO_FOOTER_ASPECT = 326/96. # W/H XXX provisoire: utilisera PIL pour connaitre la taille de l'image CONFIG.LOGO_FOOTER_ASPECT = (
326 / 96.0
) # W/H XXX provisoire: utilisera PIL pour connaitre la taille de l'image
CONFIG.LOGO_FOOTER_HEIGHT = 10 # taille dans le document en millimetres CONFIG.LOGO_FOOTER_HEIGHT = 10 # taille dans le document en millimetres
CONFIG.LOGO_HEADER_ASPECT = 549 / 346. # XXX logo IUTV CONFIG.LOGO_HEADER_ASPECT = 549 / 346.0 # XXX logo IUTV
CONFIG.LOGO_HEADER_HEIGHT = 28 # taille verticale dans le document en millimetres CONFIG.LOGO_HEADER_HEIGHT = 28 # taille verticale dans le document en millimetres
# Pied de page PDF : un format Python, %(xxx)s est remplacé par la variable xxx. # Pied de page PDF : un format Python, %(xxx)s est remplacé par la variable xxx.
@ -63,7 +70,6 @@ CONFIG.LOGO_HEADER_HEIGHT = 28 # taille verticale dans le document en millimetre
CONFIG.DEFAULT_PDF_FOOTER_TEMPLATE = "Edité par %(scodoc_name)s le %(day)s/%(month)s/%(year)s à %(hour)sh%(minute)s sur %(server_url)s" CONFIG.DEFAULT_PDF_FOOTER_TEMPLATE = "Edité par %(scodoc_name)s le %(day)s/%(month)s/%(year)s à %(hour)sh%(minute)s sur %(server_url)s"
# #
# ------------- Calcul bonus modules optionnels (sport, culture...) ------------- # ------------- Calcul bonus modules optionnels (sport, culture...) -------------
# #
@ -80,7 +86,9 @@ CONFIG.compute_bonus = bonus_iutv
# #
# - règle "LMD": capitalisation uniquement des UE avec moy. > 10 # - règle "LMD": capitalisation uniquement des UE avec moy. > 10
CONFIG.CAPITALIZE_ALL_UES = True # si vrai, capitalise toutes les UE des semestres validés (règle "LMD"). CONFIG.CAPITALIZE_ALL_UES = (
True # si vrai, capitalise toutes les UE des semestres validés (règle "LMD").
)
# #
@ -91,10 +99,10 @@ CONFIG.CAPITALIZE_ALL_UES = True # si vrai, capitalise toutes les UE des semestr
# ----------------------------------------------------- # -----------------------------------------------------
# Nom (chemin complet) d'un fichier .html à inclure juste après le <body> # Nom (chemin complet) d'un fichier .html à inclure juste après le <body>
# le <body> des pages ScoDoc # le <body> des pages ScoDoc
CONFIG.CUSTOM_HTML_HEADER = '' CONFIG.CUSTOM_HTML_HEADER = ""
# Fichier html a inclure en fin des pages (juste avant le </body>) # Fichier html a inclure en fin des pages (juste avant le </body>)
CONFIG.CUSTOM_HTML_FOOTER = '' CONFIG.CUSTOM_HTML_FOOTER = ""
# Fichier .html à inclure dans la pages connexion/déconnexion (accueil) # Fichier .html à inclure dans la pages connexion/déconnexion (accueil)
# si on veut que ce soit différent (par défaut la même chose) # si on veut que ce soit différent (par défaut la même chose)
@ -110,15 +118,19 @@ CONFIG.CUSTOM_HTML_FOOTER_CNX = CONFIG.CUSTOM_HTML_FOOTER
# Fichier de correspondance codelycee -> noms # Fichier de correspondance codelycee -> noms
# (chemin relatif au repertoire d'install des sources) # (chemin relatif au repertoire d'install des sources)
CONFIG.ETABL_FILENAME = 'config/etablissements.csv' CONFIG.ETABL_FILENAME = "config/etablissements.csv"
# ---------------------------------------------------- # ----------------------------------------------------
CONFIG.ALLOW_NULL_PRENOM = False # True for UCAC (étudiants camerounais sans prénoms) CONFIG.ALLOW_NULL_PRENOM = False # True for UCAC (étudiants camerounais sans prénoms)
CONFIG.ETUD_MAX_FILE_SIZE = 10*1024*1024 # taille max des fichiers archive etudiants (en octets) CONFIG.ETUD_MAX_FILE_SIZE = (
10 * 1024 * 1024
) # taille max des fichiers archive etudiants (en octets)
CONFIG.PUBLISH_PORTAL_PHOTO_URL = False # si pas de photo et portail, publie l'url (était vrai jusqu'en oct 2016) CONFIG.PUBLISH_PORTAL_PHOTO_URL = (
False # si pas de photo et portail, publie l'url (était vrai jusqu'en oct 2016)
)
CONFIG.MIN_PASSWORD_LENGTH = 0 # si > 0: longueur minimale requise des nouveaux mots de passe (le test cracklib.FascistCheck s'appliquera dans tous les cas) CONFIG.MIN_PASSWORD_LENGTH = 0 # si > 0: longueur minimale requise des nouveaux mots de passe (le test cracklib.FascistCheck s'appliquera dans tous les cas)
@ -127,5 +139,4 @@ CONFIG.MIN_PASSWORD_LENGTH = 0 # si > 0: longueur minimale requise des nouveaux
# pour définir les codes jury et explications associées # pour définir les codes jury et explications associées
CONFIG.CODES_EXPL = { CONFIG.CODES_EXPL = {
# AJ : 'Ajourné (échec)', # AJ : 'Ajourné (échec)',
}
}

View File

@ -5,7 +5,10 @@
""" """
import sys, os, psycopg2, glob, subprocess, traceback, time import glob
import os
import sys
import traceback
sys.path.append("..") sys.path.append("..")
@ -17,6 +20,7 @@ os.environ["INSTANCE_HOME"] = "/opt/scodoc"
def log(msg): def log(msg):
"write msg on stderr, add newline and flush"
sys.stdout.flush() sys.stdout.flush()
sys.stderr.write(msg + "\n") sys.stderr.write(msg + "\n")
sys.stderr.flush() sys.stderr.flush()