possibly fixed a problem with virtualfields in fields option of SQLFORM.grid, thanks peckto

This commit is contained in:
mdipierro
2013-07-19 03:28:11 -05:00
parent e0d3d99be0
commit 5add14bf68
3 changed files with 14 additions and 13 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.6.0-development+timestamp.2013.07.17.17.18.40 Version 2.6.0-development+timestamp.2013.07.19.03.27.22
+10 -11
View File
@@ -1538,6 +1538,7 @@ class BaseAdapter(ConnectionPool):
args_get = attributes.get args_get = attributes.get
tablenames = tables(query) tablenames = tables(query)
tablenames_for_common_filters = tablenames tablenames_for_common_filters = tablenames
fields = [f for f in fields if not isinstance(f,Field.Virtual)] # skip virtual fields
for field in fields: for field in fields:
if isinstance(field, basestring) \ if isinstance(field, basestring) \
and REGEX_TABLE_DOT_FIELD.match(field): and REGEX_TABLE_DOT_FIELD.match(field):
@@ -2109,19 +2110,17 @@ class BaseAdapter(ConnectionPool):
rowsobj = Rows(db, new_rows, colnames, rawrows=rows) rowsobj = Rows(db, new_rows, colnames, rawrows=rows)
for tablename in virtualtables: for tablename in virtualtables:
### new style virtual fields
table = db[tablename] table = db[tablename]
fields_virtual = [(f,v) for (f,v) in table.iteritems() all_fields = filter(lambda nv: nv[1] in fields and
if isinstance(v,FieldVirtual)] isinstance(nv[1],(FieldVirtual,FieldMethod)),
fields_lazy = [(f,v) for (f,v) in table.iteritems() table.iteritems())
if isinstance(v,FieldMethod)] if all_fields:
if fields_virtual or fields_lazy:
for row in rowsobj.records: for row in rowsobj.records:
box = row[tablename] box = row[tablename] # CHECK THIS
for f,v in fields_virtual: for fieldname,field in all_fields:
box[f] = v.f(row) box[fieldname] = field.f(row) \
for f,v in fields_lazy: if isinstance(field,FieldVirtual) else \
box[f] = (v.handler or VirtualCommand)(v.f,row) (field.handler or VirtualCommand)(field.f,row)
### old style virtual fields ### old style virtual fields
for item in table.virtualfields: for item in table.virtualfields:
+3 -1
View File
@@ -1928,6 +1928,7 @@ class SQLFORM(FORM):
if isinstance(f,Field.Virtual) and f.readable: if isinstance(f,Field.Virtual) and f.readable:
f.tablename = table._tablename f.tablename = table._tablename
columns.append(f) columns.append(f)
fields.append(f)
if not field_id: if not field_id:
field_id = tables[0]._id field_id = tables[0]._id
if not any(str(f)==str(field_id) for f in fields): if not any(str(f)==str(field_id) for f in fields):
@@ -2239,7 +2240,7 @@ class SQLFORM(FORM):
limitby = None limitby = None
try: try:
table_fields = [f for f in fields if f.tablename in tablenames] table_fields = filter(lambda f: f.tablename in tablenames, fields)
if dbset._db._adapter.dbengine=='google:datastore': if dbset._db._adapter.dbengine=='google:datastore':
rows = dbset.select(left=left,orderby=orderby, rows = dbset.select(left=left,orderby=orderby,
groupby=groupby,limitby=limitby, groupby=groupby,limitby=limitby,
@@ -2247,6 +2248,7 @@ class SQLFORM(FORM):
cacheable=True,*table_fields) cacheable=True,*table_fields)
next_cursor = dbset._db.get('_lastcursor', None) next_cursor = dbset._db.get('_lastcursor', None)
else: else:
# print('table_fields: %s' %([f_.name for f_ in table_fields],))
rows = dbset.select(left=left,orderby=orderby, rows = dbset.select(left=left,orderby=orderby,
groupby=groupby,limitby=limitby, groupby=groupby,limitby=limitby,
cacheable=True,*table_fields) cacheable=True,*table_fields)