Projet

Général

Profil

0001-user-add-a-deleted-flag-24430.patch

Benjamin Dauvergne, 04 janvier 2020 18:17

Télécharger (5,21 ko)

Voir les différences:

Subject: [PATCH 1/5] user: add a deleted flag (#24430)

 tests/test_sql.py | 23 +++++++++++++++++++++++
 wcs/sql.py        | 17 ++++++++++++-----
 wcs/users.py      |  1 +
 3 files changed, 36 insertions(+), 5 deletions(-)
tests/test_sql.py
1200 1200
    conn.commit()
1201 1201
    cur.close()
1202 1202

  
1203
@postgresql
1204
def test_migration_29_user_deleted():
1205
    conn, cur = sql.get_connection_and_cursor()
1206
    cur.execute('UPDATE wcs_meta SET value = 28 WHERE key = %s', ('sql_level',))
1207
    conn.commit()
1208
    cur.close()
1209

  
1210
    sql.SqlUser.wipe()
1211
    user = sql.SqlUser()
1212
    user.name = 'Jean Sénisme'
1213
    user.store()
1214
    assert sql.SqlUser.count() == 1
1215

  
1216
    conn, cur = sql.get_connection_and_cursor()
1217
    cur.execute('ALTER TABLE users DROP COLUMN deleted')
1218
    assert not column_exists_in_table(cur, 'users', 'deleted')
1219
    sql.migrate()
1220
    assert column_exists_in_table(cur, 'users', 'ascii_name')
1221
    assert migration_level(cur) >= 28
1222

  
1223
    assert sql.SqlUser.count() == 1
1224
    assert not sql.SqlUser.get(id=user.id).deleted
1225

  
1203 1226
def drop_formdef_tables():
1204 1227
    conn, cur = sql.get_connection_and_cursor()
1205 1228
    cur.execute('''SELECT table_name FROM information_schema.tables''')
wcs/sql.py
606 606
                                    verified_fields text[],
607 607
                                    name_identifiers text[],
608 608
                                    lasso_dump text,
609
                                    last_seen timestamp)''' % table_name)
609
                                    last_seen timestamp,
610
                                    deleted boolean DEFAULT(FALSE))''' % table_name)
610 611
    cur.execute('''SELECT column_name FROM information_schema.columns
611 612
                    WHERE table_schema = 'public'
612 613
                      AND table_name = %s''', (table_name,))
......
614 615

  
615 616
    needed_fields = set(['id', 'name', 'email', 'roles', 'is_admin',
616 617
        'anonymous', 'name_identifiers', 'verified_fields',
617
        'lasso_dump', 'last_seen', 'fts', 'ascii_name'])
618
        'lasso_dump', 'last_seen', 'fts', 'ascii_name', 'deleted'])
618 619

  
619 620
    from wcs.admin.settings import UserFieldsFormDef
620 621
    formdef = UserFieldsFormDef()
......
653 654
    if not 'ascii_name' in existing_fields:
654 655
        cur.execute('ALTER TABLE %s ADD COLUMN ascii_name varchar' % table_name)
655 656

  
657
    if not 'deleted' in existing_fields:
658
        cur.execute('ALTER TABLE %s ADD COLUMN deleted DEFAULT(FALSE)' % table_name)
659

  
656 660
    # delete obsolete fields
657 661
    for field in (existing_fields - needed_fields):
658 662
        cur.execute('''ALTER TABLE %s DROP COLUMN %s''' % (table_name, field))
......
1736 1740
        ('lasso_dump', 'text'),
1737 1741
        ('last_seen', 'timestamp'),
1738 1742
        ('ascii_name', 'varchar'),
1743
        ('deleted', 'boolean'),
1739 1744
    ]
1740 1745

  
1741 1746
    id = None
......
1760 1765
                'verified_fields': self.verified_fields,
1761 1766
                'lasso_dump': self.lasso_dump,
1762 1767
                'last_seen': None,
1768
                'deleted': self.deleted,
1763 1769
        }
1764 1770
        if self.last_seen:
1765 1771
            sql_dict['last_seen'] = datetime.datetime.fromtimestamp(self.last_seen),
......
1827 1833
        o = cls()
1828 1834
        (o.id, o.name, o.email, o.roles, o.is_admin, o.anonymous,
1829 1835
         o.name_identifiers, o.verified_fields, o.lasso_dump,
1830
         o.last_seen, ascii_name) = [str_encode(x) for x in tuple(row[:11])]
1836
         o.last_seen, ascii_name, o.deleted) = [str_encode(x) for x in tuple(row[:12])]
1831 1837
        if o.last_seen:
1832 1838
            o.last_seen = time.mktime(o.last_seen.timetuple())
1833 1839
        if o.roles:
......
2292 2298
    return result
2293 2299

  
2294 2300

  
2295
SQL_LEVEL = 34
2301
SQL_LEVEL = 35
2296 2302

  
2297 2303
def migrate_global_views(conn, cur):
2298 2304
    cur.execute('''SELECT COUNT(*) FROM information_schema.tables
......
2379 2385
        # 31: add user_label to formdata
2380 2386
        # 33: add anonymised field to global view
2381 2387
        migrate_views(conn, cur)
2382
    if sql_level < 21:
2388
    if sql_level < 35:
2383 2389
        # 3: introduction of _structured for user fields
2384 2390
        # 4: removal of identification_token
2385 2391
        # 12: (first part) add fts to users
2386 2392
        # 16: add verified_fields to users
2387 2393
        # 21: (first part) add ascii_name to users
2394
        # 35: add deleted
2388 2395
        do_user_table()
2389 2396
    if sql_level < 6:
2390 2397
        # 6: add actions_roles_array to tables and views
wcs/users.py
35 35
    verified_fields = None
36 36
    name_identifiers = None
37 37
    lasso_dump = None
38
    deleted = False
38 39

  
39 40
    last_seen = None
40 41

  
41
-