From: Mike Bayer Date: Fri, 13 May 2022 13:24:09 +0000 (-0400) Subject: search for pickle failures X-Git-Tag: rel_1_4_37~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48ccecbe69795753baac1ca6d351c1af5ebcdd7b;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git search for pickle failures this is not for merge, trying to locate what might be the problem at #8000 Change-Id: I3ee7bf85f42eca861d32fc402b69796d518934d1 --- diff --git a/lib/sqlalchemy/testing/pickleable.py b/lib/sqlalchemy/testing/pickleable.py index 04405e5397..fb02157780 100644 --- a/lib/sqlalchemy/testing/pickleable.py +++ b/lib/sqlalchemy/testing/pickleable.py @@ -20,6 +20,14 @@ class Order(fixtures.ComparableEntity): pass +class Item(fixtures.ComparableEntity): + pass + + +class Keyword(fixtures.ComparableEntity): + pass + + class Dingaling(fixtures.ComparableEntity): pass diff --git a/test/orm/_fixtures.py b/test/orm/_fixtures.py index 6715cb7fea..64a86ce7e5 100644 --- a/test/orm/_fixtures.py +++ b/test/orm/_fixtures.py @@ -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.""" diff --git a/test/orm/test_selectin_relations.py b/test/orm/test_selectin_relations.py index 3e44abe88f..5df1c00e64 100644 --- a/test/orm/test_selectin_relations.py +++ b/test/orm/test_selectin_relations.py @@ -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, )