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(
|
||||||
"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)
|
||||||
|
@ -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,85 +65,84 @@ 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
|
||||||
tablecolumn est de la forme nom_de_table.nom_de_colonne, par exemple "identite.nom"
|
tablecolumn est de la forme nom_de_table.nom_de_colonne, par exemple "identite.nom"
|
||||||
key_name est le nom de la colonne (clé) à utiliser pour certains remplacements
|
key_name est le nom de la colonne (clé) à utiliser pour certains remplacements
|
||||||
(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(
|
||||||
table=table,
|
"UPDATE {table} SET {column} = {value};".format(
|
||||||
column=column,
|
table=table,
|
||||||
value=anonymization(column, key_name) if callable(anonymization) else anonymization
|
column=column,
|
||||||
))
|
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)
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
cnx.set_session(autocommit=False)
|
cnx.set_session(autocommit=False)
|
||||||
|
@ -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
0
config/postupgrade.py
Normal file → Executable file
@ -7,46 +7,53 @@
|
|||||||
|
|
||||||
# La plupart des réglages sont stoqués en base de donnée et accessibles via le web
|
# La plupart des réglages sont stoqués en base de donnée et accessibles via le web
|
||||||
# (pages de paramètres ou préférences).
|
# (pages de paramètres ou préférences).
|
||||||
# Les valeurs indiquées ici sont les valeurs initiales que prendront
|
# Les valeurs indiquées ici sont les valeurs initiales que prendront
|
||||||
# les paramètres lors de la création d'un nouveau département,
|
# les paramètres lors de la création d'un nouveau département,
|
||||||
# elles ne sont plus utilisées ensuite.
|
# elles ne sont plus utilisées ensuite.
|
||||||
|
|
||||||
# Nota: il y a aussi des réglages dans sco_utils.py, mais ils nécessitent
|
# Nota: il y a aussi des réglages dans sco_utils.py, mais ils nécessitent
|
||||||
# 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
|
||||||
|
|
||||||
# The base URL, use only if you are behind a proxy
|
# The base URL, use only if you are behind a proxy
|
||||||
# eg "https://scodoc.example.net/ScoDoc"
|
# eg "https://scodoc.example.net/ScoDoc"
|
||||||
CONFIG.ABSOLUTE_URL = ""
|
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 = (
|
||||||
CONFIG.LOGO_FOOTER_HEIGHT = 10 # taille dans le document en millimetres
|
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
|
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.
|
||||||
# Les variables définies sont:
|
# Les variables définies sont:
|
||||||
@ -56,12 +63,11 @@ CONFIG.LOGO_HEADER_HEIGHT = 28 # taille verticale dans le document en millimetre
|
|||||||
# Year : Year with century as a decimal number.
|
# Year : Year with century as a decimal number.
|
||||||
# hour : Hour (24-hour clock) as a decimal number [00,23].
|
# hour : Hour (24-hour clock) as a decimal number [00,23].
|
||||||
# minute: Minute as a decimal number [00,59].
|
# minute: Minute as a decimal number [00,59].
|
||||||
#
|
#
|
||||||
# server_url: URL du serveur ScoDoc
|
# server_url: URL du serveur ScoDoc
|
||||||
# scodoc_name: le nom du logiciel (ScoDoc actuellement, voir VERSION.py)
|
# scodoc_name: le nom du logiciel (ScoDoc actuellement, voir VERSION.py)
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -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,22 +118,25 @@ 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)
|
||||||
|
|
||||||
# ----------------------------------------------------
|
# ----------------------------------------------------
|
||||||
# Ce dictionnaire est fusionné à celui de sco_codes_parcours
|
# Ce dictionnaire est fusionné à celui de sco_codes_parcours
|
||||||
# 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)',
|
||||||
|
}
|
||||||
}
|
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user