forked from ScoDoc/ScoDoc
python-modernize
This commit is contained in:
parent
960de61928
commit
67c458f929
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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
0
config/postupgrade.py
Normal file → Executable 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)',
|
||||
|
||||
}
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user