From 8590aae2e8f5d49f7661afe62b8ad151e054b3c5 Mon Sep 17 00:00:00 2001 From: geomapdev Date: Wed, 4 Oct 2017 10:34:48 -0700 Subject: [PATCH] dal.py code cleanup --- gluon/dal.py | 92 ++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 54 deletions(-) diff --git a/gluon/dal.py b/gluon/dal.py index e60cf82d..e4abd6fa 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -44,66 +44,50 @@ def _default_validators(db, field): requires.append(validators.IS_TIME()) elif field_type == 'datetime': requires.append(validators.IS_DATETIME()) - elif db and field_type.startswith('reference') and \ - field_type.find('.') < 0 and \ - field_type[10:] in db.tables: - referenced = db[field_type[10:]] - if hasattr(referenced, '_format') and referenced._format: - requires = validators.IS_IN_DB(db, referenced._id, - referenced._format) - else: - requires = validators.IS_IN_DB(db, referenced._id) - if field.unique: - requires._and = validators.IS_NOT_IN_DB(db, field) - if field.tablename == field_type[10:]: - return validators.IS_EMPTY_OR(requires) - return requires - elif db and field_type.startswith('reference') and \ - field_type.find('.') > 0 and \ - field_type[10:].split('.')[0] in db.tables: - table_name=field_type[10:].split('.')[0] - field_name=field_type[10:].split('.')[1] - referenced = db[table_name] - if hasattr(referenced, '_format') and referenced._format: - requires = validators.IS_IN_DB(db, referenced[field_name], - referenced._format) - else: - requires = validators.IS_IN_DB(db, referenced[field_name]) - if field.unique: - requires._and = validators.IS_NOT_IN_DB(db, field) - if field.tablename == table_name: - return validators.IS_EMPTY_OR(requires) - return requires - elif db and field_type.startswith('list:reference') and \ - field_type.find('.') < 0 and \ - field_type[15:] in db.tables: - referenced = db[field_type[15:]] - if hasattr(referenced, '_format') and referenced._format: - requires = validators.IS_IN_DB(db, referenced._id, - referenced._format, multiple=True) - else: - requires = validators.IS_IN_DB(db, referenced._id, - multiple=True) + elif db and field_type.startswith('reference'): + if field_type.find('.') < 0 and field_type[10:] in db.tables: + referenced = db[field_type[10:]] + if hasattr(referenced, '_format') and referenced._format: + requires = validators.IS_IN_DB(db, referenced._id,referenced._format) + else: + requires = validators.IS_IN_DB(db, referenced._id) + elif field_type.find('.') > 0 and field_type[10:].split('.')[0] in db.tables: + table_field = field_type[10:].split('.') + table_name=table_field[0] + field_name=table_field[1] + referenced = db[table_name] + if hasattr(referenced, '_format') and referenced._format: + requires = validators.IS_IN_DB(db, referenced[field_name],referenced._format) + else: + requires = validators.IS_IN_DB(db, referenced[field_name]) if field.unique: requires._and = validators.IS_NOT_IN_DB(db, field) if not field.notnull: - requires = validators.IS_EMPTY_OR(requires) + return validators.IS_EMPTY_OR(requires) return requires - elif db and field_type.startswith('list:reference') and \ - field_type.find('.') > 0 and \ - field_type[15:].split('.')[0] in db.tables: - table_name=field_type[15:].split('.')[0] - field_name=field_type[15:].split('.')[1] - referenced = db[table_name] - if hasattr(referenced, '_format') and referenced._format: - requires = validators.IS_IN_DB(db, referenced[field_name], - referenced._format, multiple=True) - else: - requires = validators.IS_IN_DB(db, referenced[field_name], - multiple=True) + elif db and field_type.startswith('list:reference'): + if field_type.find('.') < 0 and field_type[15:] in db.tables: + referenced = db[field_type[15:]] + if hasattr(referenced, '_format') and referenced._format: + requires = validators.IS_IN_DB(db, referenced._id, + referenced._format, multiple=True) + else: + requires = validators.IS_IN_DB(db, referenced._id, + multiple=True) + elif field_type.find('.') > 0 and field_type[15:].split('.')[0] in db.tables: + table_field = field_type[15:].split('.') + table_name=table_field[0] + field_name=table_field[1] + referenced = db[table_name] + if hasattr(referenced, '_format') and referenced._format: + requires = validators.IS_IN_DB(db, referenced[field_name], + referenced._format, multiple=True) + else: + requires = validators.IS_IN_DB(db, referenced[field_name], + multiple=True) if field.unique: requires._and = validators.IS_NOT_IN_DB(db, field) - if not field.notnull: + if field.notnull: requires = validators.IS_EMPTY_OR(requires) return requires # does not get here for reference and list:reference