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("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])])
if int(self.values[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
"""
import sys, os, traceback, psycopg2
import os
import psycopg2
import sys
import traceback
def log(msg):
sys.stdout.flush()
sys.stderr.write(msg+'\n')
sys.stderr.write(msg + "\n")
sys.stderr.flush()
@ -61,53 +65,48 @@ anonymize_null = "NULL"
# car c'est la clé avec SCOUSERS)
#
ANONYMIZED_FIELDS = {
'identite.nom' : anonymize_name,
'identite.prenom' : anonymize_name,
'identite.date_naissance' : anonymize_date,
'identite.lieu_naissance' : anonymize_question_str,
'identite.nationalite' : anonymize_question_str,
'identite.foto' : anonymize_null,
'identite.code_nip' : anonymize_null,
'identite.code_ine' : 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,
"identite.nom": anonymize_name,
"identite.prenom": anonymize_name,
"identite.date_naissance": anonymize_date,
"identite.lieu_naissance": anonymize_question_str,
"identite.nationalite": anonymize_question_str,
"identite.foto": anonymize_null,
"identite.code_nip": anonymize_null,
"identite.code_ine": 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,
}
def anonymize_column(cursor, tablecolumn):
"""Anonymise une colonne
tablecolumn est de la forme nom_de_table.nom_de_colonne, par exemple "identite.nom"
@ -115,26 +114,30 @@ def anonymize_column(cursor, tablecolumn):
(cette clé doit être anonyme et unique). Par exemple, un nom propre pourrait être
remplacé par nom_valeur_de_la_clé.
"""
table, column = tablecolumn.split('.')
table, column = tablecolumn.split(".")
anonymization = ANONYMIZED_FIELDS[tablecolumn]
log('processing {}'.format(tablecolumn))
cursor.execute("UPDATE {table} SET {column} = {value};".format(
log("processing {}".format(tablecolumn))
cursor.execute(
"UPDATE {table} SET {column} = {value};".format(
table=table,
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):
"""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:
anonymize_column(cursor, tablecolumn)
dbname = sys.argv[1]
log('\nAnonymizing database %s' % dbname)
cnx_string = 'dbname=' + dbname
log("\nAnonymizing database %s" % dbname)
cnx_string = "dbname=" + dbname
try:
cnx = psycopg2.connect(cnx_string)
except:

View File

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

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

View File

@ -18,6 +18,7 @@
class CFG:
pass
CONFIG = CFG()
CONFIG.always_require_ine = 0 # set to 1 if you want to require INE
@ -29,23 +30,29 @@ CONFIG.ABSOLUTE_URL = ""
#
# ------------- Documents PDF -------------
#
CONFIG.SCOLAR_FONT = 'Helvetica'
CONFIG.SCOLAR_FONT = "Helvetica"
CONFIG.SCOLAR_FONT_SIZE = 10
CONFIG.SCOLAR_FONT_SIZE_FOOT = 6
# Pour pieds de pages Procès verbaux:
# (markup leger reportlab supporté, par ex. <b>blah blah</b>)
CONFIG.INSTITUTION_NAME="<b>Institut Universitaire de Technologie - Université Paris 13</b>"
CONFIG.INSTITUTION_ADDRESS="Web <b>www.iutv.univ-paris13.fr</b> - 99 avenue Jean-Baptiste Clément - F 93430 Villetaneuse"
CONFIG.INSTITUTION_NAME = (
"<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 . !!!)
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_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
# 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"
#
# ------------- 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
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>
# 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>)
CONFIG.CUSTOM_HTML_FOOTER = ''
CONFIG.CUSTOM_HTML_FOOTER = ""
# 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)
@ -110,15 +118,19 @@ CONFIG.CUSTOM_HTML_FOOTER_CNX = CONFIG.CUSTOM_HTML_FOOTER
# Fichier de correspondance codelycee -> noms
# (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.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)
@ -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
CONFIG.CODES_EXPL = {
# 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("..")
@ -17,6 +20,7 @@ os.environ["INSTANCE_HOME"] = "/opt/scodoc"
def log(msg):
"write msg on stderr, add newline and flush"
sys.stdout.flush()
sys.stderr.write(msg + "\n")
sys.stderr.flush()