auth.define_tables(signature=True) and auth.enable_record_versioning(db)
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 1.99.7 (2012-04-04 08:20:14) dev
|
Version 1.99.7 (2012-04-05 16:00:45) dev
|
||||||
|
|||||||
+77
-6
@@ -1255,7 +1255,68 @@ class Auth(object):
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def define_tables(self, username=False, migrate=True, fake_migrate=False):
|
def enable_record_versioning(self,
|
||||||
|
tables,
|
||||||
|
archive_names='%s_archive',
|
||||||
|
current_record='current_record'):
|
||||||
|
"""
|
||||||
|
to enable full record vernionioning (including auth tables):
|
||||||
|
|
||||||
|
auth = Auth(db)
|
||||||
|
auth.define_tables(signature=True)
|
||||||
|
# define our own tables
|
||||||
|
db.define_table('mything',Field('name'),auth.signature)
|
||||||
|
auth.enable_record_vernining(tables=db)
|
||||||
|
|
||||||
|
tables can be the db (all table) or a list of tables.
|
||||||
|
only tables with modified_by and modified_on fiels (as created
|
||||||
|
by auth.signature) will have versioning. Old record versions will be
|
||||||
|
in table 'mything_archive' automatically defined.
|
||||||
|
|
||||||
|
when you enable enable_record_versioning, records are never
|
||||||
|
deleted but marked with is_active=False.
|
||||||
|
|
||||||
|
enable_record_versioning enables a common_filter for
|
||||||
|
every table that filters out records with is_active = False
|
||||||
|
|
||||||
|
Important: If you use auth.enable_record_versioning,
|
||||||
|
do not use auth.archive or you will end up with duplicates.
|
||||||
|
auth.archive does explicitely what enable_record_versioning
|
||||||
|
does automatically.
|
||||||
|
|
||||||
|
"""
|
||||||
|
def archive(qset,fs,archive_table,current_name):
|
||||||
|
tablenames = qset.db._adapter.tables(qset.query)
|
||||||
|
if len(tablenames)!=1: raise RuntimeError, "cannot update join"
|
||||||
|
table = qset.db[tablenames[0]]
|
||||||
|
for row in qset.select():
|
||||||
|
fields = archive_table._filter_fields(row)
|
||||||
|
fields[current_record] = row.id
|
||||||
|
archive_table.insert(**fields)
|
||||||
|
|
||||||
|
tables = [table for table in tables]
|
||||||
|
for table in tables:
|
||||||
|
fieldnames = table.fields()
|
||||||
|
if 'modified_by' in fieldnames and 'modified_on' in fieldnames:
|
||||||
|
archive_name = archive_names % table._tablename
|
||||||
|
archive_table = self.db.define_table(
|
||||||
|
archive_name,
|
||||||
|
Field(current_record,table),
|
||||||
|
table)
|
||||||
|
table._before_update.append(
|
||||||
|
lambda qset,fs,at=archive_table,cn=current_record:
|
||||||
|
archive(qset,fs,at,cn))
|
||||||
|
if 'is_active' in fieldnames:
|
||||||
|
table._before_delete.append(
|
||||||
|
lambda qset: qset.update(is_active=False))
|
||||||
|
newquery = lambda query, t=table: t.is_active == True
|
||||||
|
query = table._common_filter
|
||||||
|
if query:
|
||||||
|
newquery = query & newquery
|
||||||
|
table._common_filter = newquery
|
||||||
|
|
||||||
|
def define_tables(self, username=False, signature=None,
|
||||||
|
migrate=True, fake_migrate=False):
|
||||||
"""
|
"""
|
||||||
to be called unless tables are defined manually
|
to be called unless tables are defined manually
|
||||||
|
|
||||||
@@ -1272,8 +1333,12 @@ class Auth(object):
|
|||||||
|
|
||||||
db = self.db
|
db = self.db
|
||||||
settings = self.settings
|
settings = self.settings
|
||||||
|
if signature==True: signature = self.signature
|
||||||
|
elif signature==None: signature = []
|
||||||
if not settings.table_user_name in db.tables:
|
if not settings.table_user_name in db.tables:
|
||||||
passfield = settings.password_field
|
passfield = settings.password_field
|
||||||
|
extra_fields = settings.extra_fields.get(
|
||||||
|
settings.table_user_name,[])+[signature]
|
||||||
if username or settings.cas_provider:
|
if username or settings.cas_provider:
|
||||||
table = db.define_table(
|
table = db.define_table(
|
||||||
settings.table_user_name,
|
settings.table_user_name,
|
||||||
@@ -1296,7 +1361,7 @@ class Auth(object):
|
|||||||
Field('registration_id', length=512,
|
Field('registration_id', length=512,
|
||||||
writable=False, readable=False, default='',
|
writable=False, readable=False, default='',
|
||||||
label=self.messages.label_registration_id),
|
label=self.messages.label_registration_id),
|
||||||
*settings.extra_fields.get(settings.table_user_name,[]),
|
*extra_fields,
|
||||||
**dict(
|
**dict(
|
||||||
migrate=self.__get_migrate(settings.table_user_name,
|
migrate=self.__get_migrate(settings.table_user_name,
|
||||||
migrate),
|
migrate),
|
||||||
@@ -1327,7 +1392,7 @@ class Auth(object):
|
|||||||
Field('registration_id', length=512,
|
Field('registration_id', length=512,
|
||||||
writable=False, readable=False, default='',
|
writable=False, readable=False, default='',
|
||||||
label=self.messages.label_registration_id),
|
label=self.messages.label_registration_id),
|
||||||
*settings.extra_fields.get(settings.table_user_name,[]),
|
*extra_fields,
|
||||||
**dict(
|
**dict(
|
||||||
migrate=self.__get_migrate(settings.table_user_name,
|
migrate=self.__get_migrate(settings.table_user_name,
|
||||||
migrate),
|
migrate),
|
||||||
@@ -1348,13 +1413,15 @@ class Auth(object):
|
|||||||
table.registration_key.default = ''
|
table.registration_key.default = ''
|
||||||
settings.table_user = db[settings.table_user_name]
|
settings.table_user = db[settings.table_user_name]
|
||||||
if not settings.table_group_name in db.tables:
|
if not settings.table_group_name in db.tables:
|
||||||
|
extra_fields = settings.extra_fields.get(
|
||||||
|
settings.table_group_name,[])+[signature]
|
||||||
table = db.define_table(
|
table = db.define_table(
|
||||||
settings.table_group_name,
|
settings.table_group_name,
|
||||||
Field('role', length=512, default='',
|
Field('role', length=512, default='',
|
||||||
label=self.messages.label_role),
|
label=self.messages.label_role),
|
||||||
Field('description', 'text',
|
Field('description', 'text',
|
||||||
label=self.messages.label_description),
|
label=self.messages.label_description),
|
||||||
*settings.extra_fields.get(settings.table_group_name,[]),
|
*extra_fields,
|
||||||
**dict(
|
**dict(
|
||||||
migrate=self.__get_migrate(
|
migrate=self.__get_migrate(
|
||||||
settings.table_group_name, migrate),
|
settings.table_group_name, migrate),
|
||||||
@@ -1364,13 +1431,15 @@ class Auth(object):
|
|||||||
% settings.table_group_name)
|
% settings.table_group_name)
|
||||||
settings.table_group = db[settings.table_group_name]
|
settings.table_group = db[settings.table_group_name]
|
||||||
if not settings.table_membership_name in db.tables:
|
if not settings.table_membership_name in db.tables:
|
||||||
|
extra_fields = settings.extra_fields.get(
|
||||||
|
settings.table_membership_name,[])+[signature]
|
||||||
table = db.define_table(
|
table = db.define_table(
|
||||||
settings.table_membership_name,
|
settings.table_membership_name,
|
||||||
Field('user_id', settings.table_user,
|
Field('user_id', settings.table_user,
|
||||||
label=self.messages.label_user_id),
|
label=self.messages.label_user_id),
|
||||||
Field('group_id', settings.table_group,
|
Field('group_id', settings.table_group,
|
||||||
label=self.messages.label_group_id),
|
label=self.messages.label_group_id),
|
||||||
*settings.extra_fields.get(settings.table_membership_name,[]),
|
*extra_fields,
|
||||||
**dict(
|
**dict(
|
||||||
migrate=self.__get_migrate(
|
migrate=self.__get_migrate(
|
||||||
settings.table_membership_name, migrate),
|
settings.table_membership_name, migrate),
|
||||||
@@ -1383,6 +1452,8 @@ class Auth(object):
|
|||||||
'%(role)s (%(id)s)')
|
'%(role)s (%(id)s)')
|
||||||
settings.table_membership = db[settings.table_membership_name]
|
settings.table_membership = db[settings.table_membership_name]
|
||||||
if not settings.table_permission_name in db.tables:
|
if not settings.table_permission_name in db.tables:
|
||||||
|
extra_fields = settings.extra_fields.get(
|
||||||
|
settings.table_permission_name,[])+[signature]
|
||||||
table = db.define_table(
|
table = db.define_table(
|
||||||
settings.table_permission_name,
|
settings.table_permission_name,
|
||||||
Field('group_id', settings.table_group,
|
Field('group_id', settings.table_group,
|
||||||
@@ -1393,7 +1464,7 @@ class Auth(object):
|
|||||||
label=self.messages.label_table_name),
|
label=self.messages.label_table_name),
|
||||||
Field('record_id', 'integer',default=0,
|
Field('record_id', 'integer',default=0,
|
||||||
label=self.messages.label_record_id),
|
label=self.messages.label_record_id),
|
||||||
*settings.extra_fields.get(settings.table_permission_name,[]),
|
*extra_fields,
|
||||||
**dict(
|
**dict(
|
||||||
migrate=self.__get_migrate(
|
migrate=self.__get_migrate(
|
||||||
settings.table_permission_name, migrate),
|
settings.table_permission_name, migrate),
|
||||||
|
|||||||
Reference in New Issue
Block a user