I did some digging around:

After i changed this piece of code in GoogleDatastoreAdapter, the cacheable 
attribute was passed to the *parse() *method in BaseAdapter.
Before the change it wasn't and thus cacheable was always the default value 
False.

def select(self,query,fields,attributes):
       [...]

        colnames = ['%s.%s' % (tablename, t) for t in fields]
        processor = attributes.get('processor',self.parse)
        *cacheable = attributes.get('cacheable',False)*
        # return processor(rows,fields,colnames,False)
       * return processor(rows,fields,colnames,False, cacheable=cacheable)*


after this change i noticed that in the resulting Rows, the "id" prop 
contained an instance of my model in stead of a numeric id.

So i changed some lines in parse() in BaseAdapter and after those changes, 
the resulting rows collection looks alright:

*old:*

  if ft == 'id' and not cacheable:
# temporary hack to deal with
# GoogleDatastoreAdapter
# references
if isinstance(self, GoogleDatastoreAdapter):
id = value.key().id_or_name()
colset[fieldname] = id
colset.gae_item = value
else:
id = value
colset.update_record = RecordUpdater(colset,table,id)
colset.delete_record = RecordDeleter(table,id)
for rfield in table._referenced_by:
referee_link = db._referee_name and \
db._referee_name % dict(
table=rfield.tablename,field=rfield.name)
if referee_link and not referee_link in colset:
colset[referee_link] = LazySet(rfield,id)

*new:*
*
*
  if ft == 'id':
# temporary hack to deal with
# GoogleDatastoreAdapter
# references
if isinstance(self, GoogleDatastoreAdapter):
id = value.key().id_or_name()
colset[fieldname] = id
colset.gae_item = value
else:
id = value
if not cacheable:
colset.update_record = RecordUpdater(colset,table,id)
colset.delete_record = RecordDeleter(table,id)
for rfield in table._referenced_by:
referee_link = db._referee_name and \
db._referee_name % dict(
table=rfield.tablename,field=rfield.name)
if referee_link and not referee_link in colset:
colset[referee_link] = LazySet(rfield,id)

But i'm still getting the same error. So it looks like "cacheable=True" 
does not solve this error.


-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to