]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Sep 2005 04:57:21 +0000 (04:57 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 17 Sep 2005 04:57:21 +0000 (04:57 +0000)
lib/sqlalchemy/util.py
test/objectstore.py

index c65726c16b5e8624a863749d58ec73f08828b529..23c2420adf7d416585147466f3813e8a67de52f0 100644 (file)
@@ -148,7 +148,7 @@ class HistoryArraySet(UserList.UserList):
 
         # TODO: fix this up, remove items from array while iterating
         for i in range(0, len(self.data)):
-            if not _setrecord(self, self.data[i]):
+            if not self._setrecord(self.data[i]):
                del self.data[i]
                i -= 1
 
@@ -181,6 +181,16 @@ class HistoryArraySet(UserList.UserList):
                 del self.records[key]
             else:
                 self.records[key] = None
+    def rollback(self):
+        # TODO: speed this up
+        list = []
+        for key, status in self.records.iteritems():
+            if status is False or status is None:
+                list.append(key)
+        self.data[:] = []
+        self.records = {}
+        for l in list:
+            self.append(l)
     def added_items(self):
         return [key for key in self.data if self.records[key] is True]
     def deleted_items(self):
@@ -248,12 +258,19 @@ class PropHistory(object):
     def delattr(self):
         self.deleted = self.current
         self.current = None
+    def rollback(self):
+        if self.deleted is not None:
+            self.current = self.deleted
+            self.deleted = None
+        else:
+            self.current = None
+        self.added = None
+        self.deleted = None
     def clear_history(self):
         if self.added is not None:
             self.current = self.added
             self.added = None
-        if self.deleted is not None:
-            self.deleted = None
+        self.deleted = None
     def added_items(self):
         if self.added is not None:
             return [self.added]
index 467eac0195968ee15021481dae02f24c128eed8c..49a310b69d6aab11d2a88e01cfee059ad7d38132 100644 (file)
@@ -21,6 +21,18 @@ keywords.insert().execute(
 
 db.connection().commit()
 
+class HistoryTest(AssertMixin):
+    def testattr(self):
+        m = mapper(User, users, properties = dict(addresses = relation(Address, addresses)))
+        u = User()
+        u.user_id = 7
+        u.user_name = 'afdas'
+        u.addresses = [Address(), Address()]
+        u.addresses[0].email_address = 'hi'
+        u.addresses[1].email_address = 'there'
+        m.rollback(u)
+        print repr(u.__dict__)
+        
 class SaveTest(AssertMixin):
 
     def setUp(self):