fixed problem with on_define

This commit is contained in:
mdipierro
2012-08-23 10:08:00 -05:00
parent 09dc27faed
commit 87a7d2e423
3 changed files with 68 additions and 43 deletions

View File

@@ -2,6 +2,7 @@
### DAL Improvements
- Support for DAL(lazy_tables=True) and db.define_table(on_define=lambda table:), thanks Jonathan
- MongoDB support in DAL (experimental)
- geodal and spatialite, thanks Denes and Fran (experimental)
- db.mytable._before_insert, _after_insert, _before_update, _after_update, _before_delete. _after_delete (list of callbacks)
@@ -17,6 +18,7 @@
- experimental Sybase Adapter
- added db.table.field.avg()
- Support for Google App Engine projections
- Field(... 'upload', default=path) now accepts a path to a local file as default value, if user does not upload a file. Relative path looks inside current application folder, thanks Marin
### Auth improvements

View File

@@ -1 +1 @@
Version 2.00.0 (2012-08-23 09:20:22) dev
Version 2.00.0 (2012-08-23 10:07:57) dev

View File

@@ -1460,7 +1460,7 @@ class Auth(object):
if not settings.email_case_sensitive:
table.email.requires.insert(1,IS_LOWER())
table.registration_key.default = ''
settings.table_user = db[settings.table_user_name]
reference_table_user = 'reference %s' % settings.table_user_name
if not settings.table_group_name in db.tables:
extra_fields = settings.extra_fields.get(
settings.table_group_name,[])+signature_list
@@ -1475,37 +1475,41 @@ class Auth(object):
migrate=self.__get_migrate(
settings.table_group_name, migrate),
fake_migrate=fake_migrate,
format = '%(role)s (%(id)s)'))
table.role.requires = IS_NOT_IN_DB(db, '%s.role'
% settings.table_group_name)
settings.table_group = db[settings.table_group_name]
format = '%(role)s (%(id)s)',
on_define = lambda table:
table.role.set_attributes(
requires = IS_NOT_IN_DB(
db, '%s.role'% settings.table_group_name))))
reference_table_group = 'reference %s' % settings.table_group_name
if not settings.table_membership_name in db.tables:
extra_fields = settings.extra_fields.get(
settings.table_membership_name,[])+signature_list
table = db.define_table(
settings.table_membership_name,
Field('user_id', settings.table_user,
Field('user_id', reference_table_user,
label=self.messages.label_user_id),
Field('group_id', settings.table_group,
Field('group_id', reference_table_group,
label=self.messages.label_group_id),
*extra_fields,
**dict(
migrate=self.__get_migrate(
settings.table_membership_name, migrate),
fake_migrate=fake_migrate))
table.user_id.requires = IS_IN_DB(db, '%s.id' %
settings.table_user_name,
settings.table_user._format)
table.group_id.requires = IS_IN_DB(db, '%s.id' %
settings.table_group_name,
'%(role)s (%(id)s)')
settings.table_membership = db[settings.table_membership_name]
fake_migrate=fake_migrate,
on_define = lambda table: (
table.user_id.set_attributes(
requires = IS_IN_DB(
db, '%s.id' % settings.table_user_name,
settings.table_user._format)).
table.group_id.set_attributes(
requires = IS_IN_DB(
db, '%s.id' % settings.table_group_name,
'%(role)s (%(id)s)')))))
if not settings.table_permission_name in db.tables:
extra_fields = settings.extra_fields.get(
settings.table_permission_name,[])+signature_list
table = db.define_table(
settings.table_permission_name,
Field('group_id', settings.table_group,
Field('group_id', reference_table_group,
label=self.messages.label_group_id),
Field('name', default='default', length=512,
label=self.messages.label_name),
@@ -1517,14 +1521,17 @@ class Auth(object):
**dict(
migrate=self.__get_migrate(
settings.table_permission_name, migrate),
fake_migrate=fake_migrate))
table.group_id.requires = IS_IN_DB(db, '%s.id' %
settings.table_group_name,
'%(role)s (%(id)s)')
table.name.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty)
#table.table_name.requires = IS_EMPTY_OR(IS_IN_SET(self.db.tables))
table.record_id.requires = IS_INT_IN_RANGE(0, 10 ** 9)
settings.table_permission = db[settings.table_permission_name]
fake_migrate=fake_migrate,
on_define = lambda table: (
table.group_id.set_attributes(
requires = IS_IN_DB(
db, '%s.id' % settings.table_group_name,
'%(role)s (%(id)s)')),
table.name.set_attributes(
requires = IS_NOT_EMPTY(
error_message=self.messages.is_empty)),
table.record_id.set_attributes(
requires = IS_INT_IN_RANGE(0, 10 ** 9)))))
if not settings.table_event_name in db.tables:
table = db.define_table(
settings.table_event_name,
@@ -1534,7 +1541,7 @@ class Auth(object):
Field('client_ip',
default=current.request.client,
label=self.messages.label_client_ip),
Field('user_id', settings.table_user, default=None,
Field('user_id', reference_table_user, default=None,
label=self.messages.label_user_id),
Field('origin', default='auth', length=512,
label=self.messages.label_origin),
@@ -1544,19 +1551,24 @@ class Auth(object):
**dict(
migrate=self.__get_migrate(
settings.table_event_name, migrate),
fake_migrate=fake_migrate))
table.user_id.requires = IS_IN_DB(db, '%s.id' %
settings.table_user_name,
settings.table_user._format)
table.origin.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty)
table.description.requires = IS_NOT_EMPTY(error_message=self.messages.is_empty)
settings.table_event = db[settings.table_event_name]
fake_migrate=fake_migrate,
on_define = lambda table: (
table.user_id.set_attributes(
requires = IS_IN_DB(
db, '%s.id' % settings.table_user_name,
settings.table_user._format)),
table.origin.set_attributes(
requires = IS_NOT_EMPTY(
error_message=self.messages.is_empty)),
table.description.set_attributes(
requires = IS_NOT_EMPTY(
error_message=self.messages.is_empty)))))
now = current.request.now
if settings.cas_domains:
if not settings.table_cas_name in db.tables:
table = db.define_table(
settings.table_cas_name,
Field('user_id', settings.table_user, default=None,
Field('user_id', reference_table_user, default=None,
label=self.messages.label_user_id),
Field('created_on','datetime',default=now),
Field('service',requires=IS_URL()),
@@ -1566,18 +1578,29 @@ class Auth(object):
**dict(
migrate=self.__get_migrate(
settings.table_cas_name, migrate),
fake_migrate=fake_migrate))
table.user_id.requires = IS_IN_DB(db, '%s.id' % \
settings.table_user_name,
settings.table_user._format)
settings.table_cas = db[settings.table_cas_name]
db._lazy_tables = lazy_tables
if settings.cas_provider:
fake_migrate=fake_migrate,
on_define = lambda table: (
table.user_id.set_attributes(
requires = IS_IN_DB(
db, '%s.id' % settings.table_user_name,
settings.table_user._format)))))
if not db._lazy_tables:
settings.table_user = db[settings.table_user_name]
settings.table_group = db[settings.table_group_name]
settings.table_membership = db[settings.table_membership_name]
settings.table_permission = db[settings.table_permission_name]
settings.table_event = db[settings.table_event_name]
if settings.cas_domains:
settings.table_cas = db[settings.table_cas_name]
if settings.cas_provider: ### THIS IS NOT LAZY
settings.actions_disabled = \
['profile','register','change_password','request_reset_password']
['profile','register','change_password',
'request_reset_password']
from gluon.contrib.login_methods.cas_auth import CasAuth
maps = settings.cas_maps
if not maps:
if not maps:
maps = dict((name,lambda v,n=name:v.get(n,None)) for name in \
settings.table_user.fields if name!='id' \
and settings.table_user[name].readable)