[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