]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed bug where list instrumentation would fail to represent a
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 20 Aug 2013 17:27:27 +0000 (13:27 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 20 Aug 2013 17:28:21 +0000 (13:28 -0400)
setslice of ``[0:0]`` correctly, which in particular could occur
when using ``insert(0, item)`` with the association proxy.  Due
to some quirk in Python collections, the issue was much more likely
with Python 3 rather than 2.  Also in 0.8.3, 0.7.11.
[ticket:2807]

Conflicts:
doc/build/changelog/changelog_09.rst

doc/build/changelog/changelog_07.rst
doc/build/changelog/changelog_08.rst
lib/sqlalchemy/orm/collections.py
test/orm/test_collection.py

index c6da742b8decdb3d1d6a0271c251533fb17571f4..be1dd989132bd3c96a6342a139849b05965e2e0e 100644 (file)
@@ -6,6 +6,16 @@
 .. changelog::
     :version: 0.7.11
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2807
+
+        Fixed bug where list instrumentation would fail to represent a
+        setslice of ``[0:0]`` correctly, which in particular could occur
+        when using ``insert(0, item)`` with the association proxy.  Due
+        to some quirk in Python collections, the issue was much more likely
+        with Python 3 rather than 2.
+
     .. change::
         :tags: bug, sql
         :tickets: 2801
index 96983e5bf140666939f71c291c88c86bf0c0a994..43dcf7c51514920ea2e490b78543ea7ce0dc2e21 100644 (file)
@@ -6,6 +6,16 @@
 .. changelog::
     :version: 0.8.3
 
+    .. change::
+        :tags: bug, orm
+        :tickets: 2807
+
+        Fixed bug where list instrumentation would fail to represent a
+        setslice of ``[0:0]`` correctly, which in particular could occur
+        when using ``insert(0, item)`` with the association proxy.  Due
+        to some quirk in Python collections, the issue was much more likely
+        with Python 3 rather than 2.  Also in 0.7.11.
+
     .. change::
         :tags: bug, orm
         :tickets: 2779
index 5691acfffba0c36225bac908607bbcc460220139..6c858227a07720be27843fe6e8b7979d36362cf0 100644 (file)
@@ -1089,7 +1089,10 @@ def _list_decorators():
                 start = index.start or 0
                 if start < 0:
                     start += len(self)
-                stop = index.stop or len(self)
+                if index.stop is not None:
+                    stop = index.stop
+                else:
+                    stop = len(self)
                 if stop < 0:
                     stop += len(self)
 
index f6cf51037168b63227e1ef945a21b491a91aa54e..fbc31b0f0f81fd011d4216507ce2c462393ec7c9 100644 (file)
@@ -128,9 +128,9 @@ class CollectionsTest(fixtures.ORMTest):
         control = list()
 
         def assert_eq():
-            self.assert_(set(direct) == canary.data)
-            self.assert_(set(adapter) == canary.data)
-            self.assert_(direct == control)
+            eq_(set(direct), canary.data)
+            eq_(set(adapter), canary.data)
+            eq_(direct, control)
 
         # assume append() is available for list tests
         e = creator()
@@ -260,6 +260,11 @@ class CollectionsTest(fixtures.ORMTest):
             control[-2:-1] = values
             assert_eq()
 
+            values = [creator()]
+            direct[0:0] = values
+            control[0:0] = values
+            assert_eq()
+
 
         if hasattr(direct, '__delitem__') or hasattr(direct, '__delslice__'):
             for i in range(1, 4):