]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 5 Oct 2005 02:58:54 +0000 (02:58 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 5 Oct 2005 02:58:54 +0000 (02:58 +0000)
lib/sqlalchemy/attributes.py

index 7f9c708257dd45868f36669d4f984fa043c4f815..fdb1f1c1da185e39f6fbc7a27ba7f4aa7ae70326 100644 (file)
@@ -100,7 +100,6 @@ class ListElement(util.HistoryArraySet):
         try:
             list_ = obj.__dict__[key]
             if data is not None:
-                list_.clear()
                 for d in data:
                     list_.append(d)
         except KeyError:
@@ -150,16 +149,21 @@ class CallableProp(object):
     def gethistory(self, manager, *args, **kwargs):
         self.__call__(manager, *args, **kwargs)
         return manager.attribute_history[self.obj][self.key]
-    def __call__(self, manager, passive=False):
+    def __call__(self, manager, passive=False, **kwargs):
         if passive:
             return None
-        value = self.callable_()
         if self.uselist:
+            if not self.obj.__dict__.has_key(self.key) or len(self.obj.__dict__[self.key]) == 0:
+                value = self.callable_()
+            else:
+                value = None
             p = manager.create_list(self.obj, self.key, value, **self.kwargs)
             manager.attribute_history[self.obj][self.key] = p
             return p
         else:
-            self.obj.__dict__[self.key] = value
+            if not self.obj.__dict__.has_key(self.key):
+                value = self.callable_()
+                self.obj.__dict__[self.key] = value
             p = PropHistory(self.obj, self.key, **self.kwargs)
             manager.attribute_history[self.obj][self.key] = p
             return p
@@ -245,7 +249,7 @@ class AttributeManager(object):
             
     def get_history(self, obj, key, **kwargs):
         try:
-            return self.attribute_history[obj][key].gethistory(self)
+            return self.attribute_history[obj][key].gethistory(self, **kwargs)
         except KeyError, e:
             if e.args[0] is obj:
                 d = {}