Hi,

I am using GAE (dev server) and i am unable to cache Row objects.
For some reason they cannot be pickled.
When a convert it to dicts everything works fine, but then i am unable to 
work with web2py Rows.

This is a related post: 
https://groups.google.com/forum/#!msg/web2py/SbJGKMRyeT8/BNybB-znFQgJ

I tried 2 different ways and below i copied the errors. The first is when 
using my own caching mechanism in which i pickle the data myself and 
directly use GAE memcache.
The second is when i use "@cache.action"
*
*
*Pickle by me*
=========

Traceback (most recent call last):

File "C:\Users\****************\gluon\restricted.py", line 212, in 
restricted
exec ccode in environment
File "C:\Users\****************\applications\init\controllers/api.py", line 
401, in <module>
File "C:\Users\****************\gluon\globals.py", line 194, in <lambda>
self._caller = lambda f: f()
File "C:\Users\****************\gluon\globals.py", line 158, in f
return rest_action(*_self.args, **_self.vars)
File "C:\Users\****************\applications\init\controllers/api.py", line 
346, in GET
return get(get_articles, use_etag, t, categories=c, channel=ch)
File "C:\Users\****************\applications\init\controllers/api.py", line 
259, in get
cached_response = pickle.dumps(cached_response)
File "C:\Python\Python273_X86\Lib\pickle.py", line 1374, in dumps
Pickler(file, protocol).dump(obj)
File "C:\Python\Python273_X86\Lib\pickle.py", line 224, in dump
self.save(obj)
File "C:\Python\Python273_X86\Lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python\Python273_X86\Lib\pickle.py", line 401, in save_reduce
save(args)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 562, in save_tuple
save(element)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python\Python273_X86\Lib\pickle.py", line 663, in _batch_setitems
save(v)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python\Python273_X86\Lib\pickle.py", line 663, in _batch_setitems
save(v)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 600, in save_list
self._batch_appends(iter(obj))
File "C:\Python\Python273_X86\Lib\pickle.py", line 615, in _batch_appends
save(x)
File "C:\Python\Python273_X86\Lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python\Python273_X86\Lib\pickle.py", line 419, in save_reduce
save(state)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 649, in save_dict
self._batch_setitems(obj.iteritems())
File "C:\Python\Python273_X86\Lib\pickle.py", line 663, in _batch_setitems
save(v)
File "C:\Python\Python273_X86\Lib\pickle.py", line 331, in save
self.save_reduce(obj=obj, *rv)
File "C:\Python\Python273_X86\Lib\pickle.py", line 401, in save_reduce
save(args)
File "C:\Python\Python273_X86\Lib\pickle.py", line 286, in save
f(self, obj) # Call unbound method with explicit self
File "C:\Python\Python273_X86\Lib\pickle.py", line 562, in save_tuple
save(element)
File "C:\Python\Python273_X86\Lib\pickle.py", line 300, in save
self.save_global(obj)
File "C:\Python\Python273_X86\Lib\pickle.py", line 748, in save_global
(obj, module, name))
PicklingError: Can't pickle <class 'gluon.dal.article'>: it's not found as 
gluon.dal.article


*@cache.action*
===========

Traceback (most recent call last):
File "C:\Users\****************\gluon\restricted.py", line 212, in 
restricted
exec ccode in environment
File "C:\Users\****************\applications\init\controllers/api.py", line 
403, in <module>
File "C:\Users\****************\gluon\globals.py", line 194, in <lambda>
self._caller = lambda f: f()
File "C:\Users\****************\gluon\cache.py", line 505, in wrapped_f
rtn = cache_model(cache_key, lambda : func(), time_expire=time_expire)
File "C:\Users\****************\gluon\contrib\gae_memcache.py", line 40, in 
__call__
self.client.set(key, (time.time(), value))
File "C:\Program Files 
(x86)\Google\google_appengine\google\appengine\api\memcache\__init__.py", 
line 773, in set
namespace=namespace)
File "C:\Program Files 
(x86)\Google\google_appengine\google\appengine\api\memcache\__init__.py", 
line 878, in _set_with_policy
time, '', namespace)
File "C:\Program Files 
(x86)\Google\google_appengine\google\appengine\api\memcache\__init__.py", 
line 957, in _set_multi_async_with_policy
stored_value, flags = _validate_encode_value(value, self._do_pickle)
File "C:\Program Files 
(x86)\Google\google_appengine\google\appengine\api\memcache\__init__.py", 
line 227, in _validate_encode_value
stored_value = do_pickle(value)
File "C:\Program Files 
(x86)\Google\google_appengine\google\appengine\api\memcache\__init__.py", 
line 399, in _do_pickle
pickler.dump(value)
TypeError: 'NoneType' object is not callable


Does anyone know whats going on here?

Thanks! 

-- 

--- 
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to