[Checkins] SVN: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/mapper.py replace asDict() implementation with a dictish proxy implementation
Andreas Jung
andreas at andreas-jung.com
Mon Jan 5 05:32:48 EST 2009
Log message for revision 94528:
replace asDict() implementation with a dictish proxy implementation
Changed:
U z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/mapper.py
-=-
Modified: z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/mapper.py
===================================================================
--- z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/mapper.py 2009-01-05 10:32:26 UTC (rev 94527)
+++ z3c.sqlalchemy/trunk/src/z3c/sqlalchemy/mapper.py 2009-01-05 10:32:48 UTC (rev 94528)
@@ -20,7 +20,30 @@
marker = object
+class Proxy(dict):
+ """ Dict-Proxy for mapped objects providing
+ attribute-style access.
+ """
+ def __init__(self, obj):
+ super(dict, self).__init__()
+ self.update(obj.__dict__.copy())
+ for attr in getattr(obj, 'proxied_properties', ()):
+ self[attr] = getattr(obj, attr)
+ del self['_sa_instance_state']
+
+ def __getattribute__(self, name):
+ if name in dict.keys(self):
+ return self.get(name)
+
+ return super(dict, self).__getattribute__(name)
+
+ def __getattr__(self, name, default=None):
+ if name in dict.keys(self):
+ return self.get(name, default)
+ return super(dict, self).__getattr__(name, default)
+
+
class MappedClassBase(object):
""" base class for all mapped classes """
@@ -51,11 +74,8 @@
def asDict(self):
- """ Return row values as a dict """
- d= dict()
- for col in self.c.keys():
- d[col] = getattr(self, col)
- return d
+ """ Returns current object as a dict"""
+ return Proxy(self)
def getMapper(self, name):
More information about the Checkins
mailing list