From 26c8fcd5b30258f43b6e4e952ad40ce1a93a3166 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Tue, 30 Jul 2013 09:12:22 -0500 Subject: [PATCH 1/3] catched attributeerror --- VERSION | 2 +- gluon/utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index a59a1788..88c016aa 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.6.0-development+timestamp.2013.07.29.07.50.41 +Version 2.6.0-development+timestamp.2013.07.30.09.11.35 diff --git a/gluon/utils.py b/gluon/utils.py index 848b80ad..57e29a4f 100644 --- a/gluon/utils.py +++ b/gluon/utils.py @@ -46,7 +46,7 @@ import hmac try: try: from contrib.pbkdf2_ctypes import pbkdf2_hex - except ImportError: + except (ImportError, AttributeError): from contrib.pbkdf2 import pbkdf2_hex HAVE_PBKDF2 = True except ImportError: From ab9a35b5419712ff26d2ffb00b66735a34336e41 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Wed, 31 Jul 2013 11:25:15 -0500 Subject: [PATCH 2/3] table.field.referent --- VERSION | 2 +- gluon/dal.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/VERSION b/VERSION index 88c016aa..63d32361 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.6.0-development+timestamp.2013.07.30.09.11.35 +Version 2.6.0-development+timestamp.2013.07.31.11.24.32 diff --git a/gluon/dal.py b/gluon/dal.py index 78839328..211ff2d5 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -8371,19 +8371,20 @@ class Table(object): self._referenced_by = [] for field in self: fieldname = field.name - field_type = field.type + field_type = field.type if isinstance(field_type,str) and field_type[:10] == 'reference ': ref = field_type[10:].strip() - if not ref.split(): + if not ref.strip(): raise SyntaxError('Table: reference to nothing: %s' %ref) - refs = ref.split('.') - rtablename = refs[0] + if '.' in ref: + rtablename, rfieldname = ref.split('.',1) + else: + rtablename, rfieldname = ref, None if not rtablename in db: pr[rtablename] = pr.get(rtablename,[]) + [field] continue rtable = db[rtablename] - if len(refs)==2: - rfieldname = refs[1] + if rfieldname: if not hasattr(rtable,'_primarykey'): raise SyntaxError( 'keyed tables can only reference other keyed tables (for now)') @@ -8391,7 +8392,13 @@ class Table(object): raise SyntaxError( "invalid field '%s' for referenced table '%s' in table '%s'" \ % (rfieldname, rtablename, self._tablename)) + rfield = rtable[rfieldname] + else: + rfield = rtable._id rtable._referenced_by.append(field) + field.referent = rfield + else: + field.referent = None for referee in pr.get(self._tablename,[]): self._referenced_by.append(referee) From 8a011cf3ac78a229bcc5b59b11dcf864d20f23e8 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Wed, 31 Jul 2013 11:45:14 -0500 Subject: [PATCH 3/3] table.field.referent, table._references --- VERSION | 2 +- gluon/dal.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 63d32361..232414f3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.6.0-development+timestamp.2013.07.31.11.24.32 +Version 2.6.0-development+timestamp.2013.07.31.11.44.33 diff --git a/gluon/dal.py b/gluon/dal.py index 211ff2d5..29714a33 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -8369,6 +8369,7 @@ class Table(object): db = self._db pr = db._pending_references self._referenced_by = [] + self._references = [] for field in self: fieldname = field.name field_type = field.type @@ -8397,11 +8398,12 @@ class Table(object): rfield = rtable._id rtable._referenced_by.append(field) field.referent = rfield + self._references.append(field) else: field.referent = None for referee in pr.get(self._tablename,[]): self._referenced_by.append(referee) - + def _filter_fields(self, record, id=False): return dict([(k, v) for (k, v) in record.iteritems() if k in self.fields and (self[k].type!='id' or id)])