diff --git a/VERSION b/VERSION index 34c73233..22cf4c39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 1.99.4 (2011-12-16 09:55:58) stable +Version 1.99.4 (2011-12-16 10:16:31) stable diff --git a/gluon/storage.py b/gluon/storage.py index f8dcdce0..4f09d69e 100644 --- a/gluon/storage.py +++ b/gluon/storage.py @@ -156,6 +156,10 @@ class Storage(dict): return value[-1] return None +PICKABLE = (str,int,long,float,bool,list,dict,tuple,set) +def PickableStorage(data): + return Storage(dict((k,v) for (k,v) in data.items() if isinstance(v,PICKABLE))) + class StorageList(Storage): """ like Storage but missing elements default to [] instead of None diff --git a/gluon/tools.py b/gluon/tools.py index d3b4c7d7..ca088729 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -24,7 +24,7 @@ import cStringIO from email import MIMEBase, MIMEMultipart, MIMEText, Encoders, Header, message_from_string from contenttype import contenttype -from storage import Storage, StorageList, Settings, Messages +from storage import Storage, PickableStorage, StorageList, Settings, Messages from utils import web2py_uuid from fileutils import read_file from gluon import * @@ -1494,7 +1494,7 @@ class Auth(object): if user: password = table_user[passfield].validate(password)[0] if not user.registration_key and user[passfield] == password: - user = Storage(table_user._filter_fields(user, id=True)) + user = PickableStorage(user) session.auth = Storage(user=user, last_visit=request.now, expiration=self.settings.expiration, hmac_key = web2py_uuid()) @@ -1771,7 +1771,7 @@ class Auth(object): # process authenticated users if user: - user = Storage(table_user._filter_fields(user, id=True)) + user = PickableStorage(user) # process authenticated users # user wants to be logged in for longer