]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
search for pickle failures
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 13 May 2022 13:24:09 +0000 (09:24 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 13 May 2022 13:24:09 +0000 (09:24 -0400)
this is not for merge, trying to locate what might be
the problem at #8000

Change-Id: I3ee7bf85f42eca861d32fc402b69796d518934d1

lib/sqlalchemy/testing/pickleable.py
test/orm/_fixtures.py
test/orm/test_selectin_relations.py

index 04405e539749e3277b4c3d3681b00df00b2a11cb..fb02157780ecd67bcb77a0aa99c932685c042250 100644 (file)
@@ -20,6 +20,14 @@ class Order(fixtures.ComparableEntity):
     pass
 
 
+class Item(fixtures.ComparableEntity):
+    pass
+
+
+class Keyword(fixtures.ComparableEntity):
+    pass
+
+
 class Dingaling(fixtures.ComparableEntity):
     pass
 
index 6715cb7feae203ad1d9b5224fd3751daae01cee5..64a86ce7e59f77ae494002a83af5f824a22f962d 100644 (file)
@@ -396,6 +396,23 @@ class FixtureTest(fixtures.MappedTest):
         return CannedResults(self)
 
 
+class PickleFixtureMixin(object):
+    @classmethod
+    def setup_classes(cls):
+        from sqlalchemy.testing import pickleable
+
+        cls.classes.update(
+            {
+                "User": pickleable.User,
+                "Order": pickleable.Order,
+                "Address": pickleable.Address,
+                "Item": pickleable.Item,
+                "Keyword": pickleable.Keyword,
+                "Dingaling": pickleable.Dingaling,
+            }
+        )
+
+
 class CannedResults(object):
     """Built on demand, instances use mappers in effect at time of call."""
 
index 3e44abe88f5b252eecdcb8f6236ba4c946c8905d..5df1c00e64e261807fe25b750ffcf7eec0bf0d6e 100644 (file)
@@ -1,3 +1,5 @@
+import pickle
+
 import sqlalchemy as sa
 from sqlalchemy import bindparam
 from sqlalchemy import ForeignKey
@@ -43,7 +45,11 @@ from .inheritance._poly_fixtures import Paperwork
 from .inheritance._poly_fixtures import Person
 
 
-class EagerTest(_fixtures.FixtureTest, testing.AssertsCompiledSQL):
+class EagerTest(
+    _fixtures.PickleFixtureMixin,
+    _fixtures.FixtureTest,
+    testing.AssertsCompiledSQL,
+):
     run_inserts = "once"
     run_deletes = None
 
@@ -759,8 +765,17 @@ class EagerTest(_fixtures.FixtureTest, testing.AssertsCompiledSQL):
         with fixture_session() as sess:
 
             def go():
+                result = (
+                    sess.query(User).options(*opts).order_by(User.id).all()
+                )
+                eq_(
+                    result,
+                    self.static.user_item_keyword_result,
+                )
+
+                print(f"pickling User structure based on: {opts}")
                 eq_(
-                    sess.query(User).options(*opts).order_by(User.id).all(),
+                    pickle.loads(pickle.dumps(result)),
                     self.static.user_item_keyword_result,
                 )