From b2b0c12b5c1c54db15f18f704bb1474ad8b4b281 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Sat, 16 Mar 2019 00:59:04 +0100 Subject: [PATCH] sql: add evo.who on evolution update (#31472) --- tests/test_sql.py | 45 +++++++++++++++++++++++++++++++++++++++++ tests/test_workflows.py | 3 ++- wcs/sql.py | 12 ++++++++++- 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/tests/test_sql.py b/tests/test_sql.py index 49e4d004..151ef2ff 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -1786,3 +1786,48 @@ def test_view_performances(): formdatas = sql.AnyFormData.select(criterias, order_by='receipt_time', limit=20, offset=0) print time.time() - t0 assert (time.time() - t0) < 0.5 + + +@postgresql +def test_migration_30_anonymize_evo_who(): + formdef = FormDef() + formdef.name = 'tests migration 24' + formdef.fields = [] + formdef.store() + + user = sql.SqlUser() + user.name = 'JohnDoe' + user.store() + + klass = formdef.data_class() + formdata = klass() + formdata.evolution = [] + formdata.anonymised = datetime.datetime.now() + evo = Evolution(formdata) + evo.who = user.id + evo.time = time.localtime() + formdata.evolution.append(evo) + formdata.store() + + conn, cur = sql.get_connection_and_cursor() + cur.execute('UPDATE wcs_meta SET value = 29 WHERE key = %s', ('sql_level',)) + conn.commit() + cur.close() + + conn, cur = sql.get_connection_and_cursor() + cur.execute('SELECT COUNT(*) FROM %s_evolutions WHERE who IS NULL' % formdef.table_name) + assert cur.fetchone() == (0,) + cur.execute('SELECT COUNT(*) FROM wcs_meta WHERE key = %s AND value::integer > 29', ('sql_level',)) + assert cur.fetchone() == (0,) + conn.commit() + cur.close() + + sql.migrate() + + conn, cur = sql.get_connection_and_cursor() + cur.execute('SELECT COUNT(*) FROM %s_evolutions WHERE who IS NULL' % formdef.table_name) + assert cur.fetchone() == (1,) + cur.execute('SELECT COUNT(*) FROM wcs_meta WHERE key = %s AND value::integer > 29', ('sql_level',)) + assert cur.fetchone() == (1,) + conn.commit() + cur.close() diff --git a/tests/test_workflows.py b/tests/test_workflows.py index ec093fc4..3fae0f25 100644 --- a/tests/test_workflows.py +++ b/tests/test_workflows.py @@ -675,7 +675,7 @@ def test_roles_idp(pub): item2.perform(formdata) assert pub.user_class.get(user.id).roles == [] -def test_anonymise(pub): +def test_anonymise(two_pubs): # build a backoffice field Workflow.wipe() wf = Workflow(name='wf with backoffice field') @@ -718,6 +718,7 @@ def test_anonymise(pub): 'bo1': None, 'bo2': 'foo', 'bo2_display': 'foo'} assert formdef.data_class().get(formdata.id).workflow_data is None + assert formdef.data_class().get(formdata.id).evolution[0].who is None def test_remove(pub): formdef = FormDef() diff --git a/wcs/sql.py b/wcs/sql.py index 63f2c71d..66561ace 100644 --- a/wcs/sql.py +++ b/wcs/sql.py @@ -1377,6 +1377,7 @@ class SqlFormData(SqlMixin, wcs.formdata.FormData): if hasattr(evo, '_sql_id'): sql_dict.update({'id': evo._sql_id}) sql_statement = '''UPDATE %s_evolutions SET + who = %%(who)s, time = %%(time)s, last_jump_datetime = %%(last_jump_datetime)s, status = %%(status)s, @@ -2167,7 +2168,7 @@ def get_yearly_totals(period_start=None, period_end=None, criterias=None): return result -SQL_LEVEL = 29 +SQL_LEVEL = 30 def migrate_global_views(conn, cur): cur.execute('''SELECT COUNT(*) FROM information_schema.tables @@ -2284,6 +2285,15 @@ def migrate(): do_formdef_indexes(formdef, created=False, conn=conn, cur=cur) if sql_level < 25: do_session_table() + if sql_level < 30: + # 30: actually remove evo.who on anonymised formdatas + from wcs.formdef import FormDef + for formdef in FormDef.select(): + for formdata in formdef.data_class().select_iterator(clause=[NotNull('anonymised')]): + if formdata.evolution: + for evo in formdata.evolution: + evo.who = None + formdata.store() cur.execute('''UPDATE wcs_meta SET value = %s WHERE key = %s''', ( str(SQL_LEVEL), 'sql_level')) -- 2.20.1