From 4dae25ec8f6d1995e1f63542aa2bde95b248b154 Mon Sep 17 00:00:00 2001 From: mdipierro Date: Mon, 20 Aug 2012 21:54:02 -0500 Subject: [PATCH] another attempt at faster Storage --- Makefile | 2 +- VERSION | 2 +- gluon/storage.py | 31 +++++++++++++++++++++++++------ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index c433d751..7750ec01 100644 --- a/Makefile +++ b/Makefile @@ -114,7 +114,7 @@ pip: run: python2.5 web2py.py -a hello commit: - python web2py.py --run_system_tests + # python web2py.py --run_system_tests make src echo '' > NEWINSTALL hg commit -m "$(S)" diff --git a/VERSION b/VERSION index 10eca311..22e90b7a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.00.0 (2012-08-20 16:03:17) dev +Version 2.00.0 (2012-08-20 21:53:59) dev diff --git a/gluon/storage.py b/gluon/storage.py index 7682f9ed..223e0de3 100644 --- a/gluon/storage.py +++ b/gluon/storage.py @@ -50,7 +50,7 @@ class List(list): raise RuntimeError, "invalid otherwise" return value -class Storage(object): +class Storage(dict): """ A Storage object is like a dictionary except `obj.foo` can be used in addition to `obj['foo']`, and setting obj.foo = None deletes item foo. @@ -71,10 +71,8 @@ class Storage(object): None """ - __class__ = dict - def __init__(self, __d__=None, **values): - self.__dict__.update(__d__ or {},**values) + self.update(__d__ or {},**values) def __getattr__(self,key): return getattr(self,key) if key in self else None def __getitem__(self,key): @@ -100,6 +98,28 @@ class Storage(object): return self.__dict__.values() def items(self): return self.__dict__.items() + def iterkeys(self): + return self.__dict__.iterkeys() + def itervalues(self): + return self.__dict__.itervalues() + def iteritems(self): + return self.__dict__.iteritems() + def viewkeys(self): + return self.__dict__.viewkeys() + def viewvalues(self): + return self.__dict__.viewvalues() + def viewitems(self): + return self.__dict__.viewitems() + def fromkeys(self,S,v=None): + return self.__dict__.fromkeys(S,v) + def setdefault(self, key, default=None): + try: + return getattr(self,key) + except AttributeError: + setattr(self,key,default) + return default + def clear(self): + self.__dict__.clear() def len(self): return len(self.__dict__) def __iter__(self): @@ -182,9 +202,8 @@ class Storage(object): values = self.getlist(default) return values[0] if values else default + PICKABLE = (str,int,long,float,bool,list,dict,tuple,set) -def PickleableStorage(data): - return Storage(dict((k,v) for (k,v) in data.items() if isinstance(v,PICKABLE))) class StorageList(Storage): """