File: mk_test-database.py

package info (click to toggle)
slm 2.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,520 kB
  • sloc: python: 15,419; javascript: 5,061; makefile: 184; sh: 182; xml: 57
file content (129 lines) | stat: -rwxr-xr-x 4,983 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#! /usr/bin/python3

"""
Fabrication d'une base de données de test. On reprend une base de
données avec des noms d'élèves réels, qu'on rend anonymes en injectant
des noms issus d'une longue liste de noms factices, et en mélangeant
aléatoirement les prénoms.
"""

import os
import  sqlite3
import  random
import  sys
from unidecode import unidecode

BASEDIR = os.path.dirname(__file__)
BASE = BASEDIR + "/../db.sqlite3"
TEST_BASE = BASEDIR + "/db_test.sqlite3"

if __name__ == "__main__":
    # inutile de copier la base à chaque fois, de toute façon on peut
    # anonymiser plusieurs fois une même base !
    ## shutil.copyfile(BASE, TEST_BASE)
    con = sqlite3.connect(TEST_BASE)
    with con:
        cur = con.cursor()
        prenoms=set()
        for row in cur.execute("SELECT Prenom FROM gestion_eleves"):
            prenoms.add(row[0])
        prenoms = sorted(list(prenoms))
        noms = [n.strip() for n in \
                open("noms-aleatoires.txt").read().split("\n") if n.strip()]
        # print(prenoms, len(prenoms))
        # print(random.choice(prenoms))
        ids=[]
        for row in cur.execute("SELECT id FROM gestion_eleves"):
            ids.append(row[0])
        sql = """UPDATE gestion_eleves SET
          Nom_de_famille=(:nom),
          Nom=(:nom),
          Nom_d_usage=(:nom),
          Prenom=(:prenom),
          Prenom_2='',
          Prenom_3='',
          NomPrenomEleve=(:nomprenom),
          sans_accent=(:sans_accent),
          Tel_Personnel=(:tel),
          Tel_Professionnel=(:tel),
          Tel_Portable=(:tel),
          email='john.doe@example.com',
          Nom_Repr_Leg='Doe',
          Nom_de_famille_Repr_Leg='Doe',
          Nom_d_usage_Repr_Leg='Doe',
          Prenom_Repr_Leg='John',
          ConcaReprLeg='',
          Tel_Personnel_Repr_Leg=(:tel),
          Tel_Portable_Repr_Leg=(:tel),
          Tel_Professionnel_Repr_Leg=(:tel),
          Email_Repr_Leg='daddy.doe@example.com',
          Nom_Autre_Repr_Leg='Doe',
          Nom_de_famille_Autre_Repr_Leg='Doe',
          Nom_d_usage_Autre_Repr_Leg='Doe',
          Prenom_Autre_Repr_Leg='John',
          ConcaAutreReprLeg='',
          Tel_Personnel_Autre_Repr_Leg=(:tel),
          Tel_Portable_Autre_Repr_Leg=(:tel),
          Tel_Professionnel_Autre_Repr_Leg=(:tel),
          Email_Autre_Repr_Leg='mummy.doe@example.com'
          WHERE id=(:id)"""
        sql_modif_caution = "UPDATE gestion_caution SET nom=(:nom), " + \
            "prenom=(:prenom), sans_accent=(:sans_accent) " +\
            "WHERE numero=(:no_caution)"
        for id in sorted(ids):
            no_caution = 0
            for row in cur.execute(
                    f"SELECT no_caution FROM gestion_eleves WHERE id={id}"):
                no_caution = row[0]
            nom = random.choice(noms)
            prenom = random.choice(prenoms)
            nomprenom = nom + ' ' + prenom
            sans_accent = unidecode(nomprenom)
            if no_caution > 0:
                cur.execute(sql_modif_caution,{
                    "nom": nom, "prenom": prenom,
                    "no_caution": no_caution,
                    "sans_accent": sans_accent,
                })
            data= {
                "nom": nom,
                "prenom": prenom,
                "nomprenom": nomprenom,
                "sans_accent": sans_accent,
                "id": id,
                "tel": "06 12 34 56 78"
            }
            cur.execute(sql, data)
            print(".", end="")
            sys.stdout.flush()
        con.commit()
        ######################################
        # efface les sans-caution
        ######################################
        cur.execute("UPDATE gestion_caution SET somme_payee=70, commentaire=''")
        ######################################
        # efface l'importation de siecle
        ######################################
        cur.execute("DELETE FROM gestion_eleves_de_siecle WHERE 1")
        ######################################
        # efface le journal
        ######################################
        cur.execute("DELETE FROM django_admin_log")
        ######################################
        # efface les sessions
        ######################################
        cur.execute("DELETE FROM django_session")
        ######################################
        # conserve un seul compte : admin, mot de passe "slmslm1234",
        # dont le hash est codé en dur ci-dessous
        ######################################
        cur.execute("DELETE FROM auth_user WHERE username != 'admin'")
        cur.execute("UPDATE auth_user set " + \
                    "password='pbkdf2_sha256$600000$7R0oBpiQRVoNMXhmGD" + \
                    "QAPa$uE5MZLYr6SSatUfJYCYdOkWyCrpKtzk682oDtatiz2Y=' " + \
                    "WHERE username='admin'")
        con.commit()
    # fin de with con, équivalent à con.close()
    print()
    print ("modifié la base", TEST_BASE)