From 0c35b45e6f5777bdadb188f5de97b0d35223cf98 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 4 Oct 2018 22:53:35 +0200 Subject: [PATCH 2/4] user: add a deleted flag (#24430) --- wcs/sql.py | 17 ++++++++++++----- wcs/users.py | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/wcs/sql.py b/wcs/sql.py index 63bd0122..a71829c0 100644 --- a/wcs/sql.py +++ b/wcs/sql.py @@ -540,7 +540,8 @@ def do_user_table(): verified_fields text[], name_identifiers text[], lasso_dump text, - last_seen timestamp)''' % table_name) + last_seen timestamp, + deleted boolean DEFAULT(FALSE))''' % table_name) cur.execute('''SELECT column_name FROM information_schema.columns WHERE table_schema = 'public' AND table_name = %s''', (table_name,)) @@ -548,7 +549,7 @@ def do_user_table(): needed_fields = set(['id', 'name', 'email', 'roles', 'is_admin', 'anonymous', 'name_identifiers', 'verified_fields', - 'lasso_dump', 'last_seen', 'fts', 'ascii_name']) + 'lasso_dump', 'last_seen', 'fts', 'ascii_name', 'deleted']) from admin.settings import UserFieldsFormDef formdef = UserFieldsFormDef() @@ -587,6 +588,9 @@ def do_user_table(): if not 'ascii_name' in existing_fields: cur.execute('ALTER TABLE %s ADD COLUMN ascii_name varchar' % table_name) + if not 'deleted' in existing_fields: + cur.execute('ALTER TABLE %s ADD COLUMN deleted DEFAULT(FALSE)' % table_name) + # delete obsolete fields for field in (existing_fields - needed_fields): cur.execute('''ALTER TABLE %s DROP COLUMN %s''' % (table_name, field)) @@ -1605,6 +1609,7 @@ class SqlUser(SqlMixin, wcs.users.User): ('lasso_dump', 'text'), ('last_seen', 'timestamp'), ('ascii_name', 'varchar'), + ('deleted', 'boolean'), ] id = None @@ -1629,6 +1634,7 @@ class SqlUser(SqlMixin, wcs.users.User): 'verified_fields': self.verified_fields, 'lasso_dump': self.lasso_dump, 'last_seen': None, + 'deleted': self.deleted, } if self.last_seen: sql_dict['last_seen'] = datetime.datetime.fromtimestamp(self.last_seen), @@ -1696,7 +1702,7 @@ class SqlUser(SqlMixin, wcs.users.User): o = cls() (o.id, o.name, o.email, o.roles, o.is_admin, o.anonymous, o.name_identifiers, o.verified_fields, o.lasso_dump, - o.last_seen, ascii_name) = [str_encode(x) for x in tuple(row[:11])] + o.last_seen, ascii_name, o.deleted) = [str_encode(x) for x in tuple(row[:12])] if o.last_seen: o.last_seen = time.mktime(o.last_seen.timetuple()) if o.roles: @@ -2146,7 +2152,7 @@ def get_yearly_totals(period_start=None, period_end=None, criterias=None): return result -SQL_LEVEL = 28 +SQL_LEVEL = 29 def migrate_global_views(conn, cur): cur.execute('''SELECT COUNT(*) FROM information_schema.tables @@ -2230,12 +2236,13 @@ def migrate(): # 26: add digest to formdata # 27: add last_jump_datetime in evolutions tables migrate_views(conn, cur) - if sql_level < 21: + if sql_level < 29: # 3: introduction of _structured for user fields # 4: removal of identification_token # 12: (first part) add fts to users # 16: add verified_fields to users # 21: (first part) add ascii_name to users + # 29: add deleted do_user_table() if sql_level < 6: # 6: add actions_roles_array to tables and views diff --git a/wcs/users.py b/wcs/users.py index df334313..c769ff60 100644 --- a/wcs/users.py +++ b/wcs/users.py @@ -35,6 +35,7 @@ class User(StorableObject): verified_fields = None name_identifiers = None lasso_dump = None + deleted = False last_seen = None -- 2.18.0