diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-03-09 11:36:19 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-03-14 16:58:17 -0400 |
| commit | 86cf3eb71c3c4d4c9f2e5cdb5059762f8f851ad9 (patch) | |
| tree | fc3e74edf6e2e5a6919856617310bc2cc6968396 /test/ext | |
| parent | 4ece86eb41274ba059211807e23273178c3c3384 (diff) | |
| download | sqlalchemy-86cf3eb71c3c4d4c9f2e5cdb5059762f8f851ad9.tar.gz | |
Improve serializer behavior
Fix an issue where the Annotated system needs to have a
__reduce__ method, also see why we can't default to HIGHEST_PROTOCOL.
This latter part might not be a good idea until 1.2 for compatibility
reasons.
Change-Id: I0239e38259fc768c9e3b6c448c29161e271a969c
Fixes: #3918
Diffstat (limited to 'test/ext')
| -rw-r--r-- | test/ext/test_serializer.py | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/test/ext/test_serializer.py b/test/ext/test_serializer.py index 4e33473b8..1ea5dfd1d 100644 --- a/test/ext/test_serializer.py +++ b/test/ext/test_serializer.py @@ -3,17 +3,21 @@ from sqlalchemy.ext import serializer from sqlalchemy import testing from sqlalchemy import Integer, String, ForeignKey, select, \ - desc, func, util, MetaData, literal_column + desc, func, util, MetaData, literal_column, join from sqlalchemy.testing.schema import Table from sqlalchemy.testing.schema import Column from sqlalchemy.orm import relationship, sessionmaker, scoped_session, \ class_mapper, mapper, joinedload, configure_mappers, aliased from sqlalchemy.testing import eq_, AssertsCompiledSQL from sqlalchemy.util import u, ue - from sqlalchemy.testing import fixtures +def pickle_protocols(): + return iter([-1, 1, 2]) + #return iter([-1, 0, 1, 2]) + + class User(fixtures.ComparableEntity): pass @@ -127,20 +131,32 @@ class SerializeTest(AssertsCompiledSQL, fixtures.MappedTest): eq_(q2.all(), [User(name='fred')]) eq_(list(q2.values(User.id, User.name)), [(9, 'fred')]) - # fails too often/randomly - # @testing.requires.non_broken_pickle - # def test_query_three(self): - # ua = aliased(User) - # q = \ - # Session.query(ua).join(ua.addresses).\ - # filter(Address.email.like('%fred%')) - # q2 = serializer.loads(serializer.dumps(q, -1), users.metadata, - # Session) - # eq_(q2.all(), [User(name='fred')]) - # - # try to pull out the aliased entity here... - # ua_2 = q2._entities[0].entity_zero.entity - # eq_(list(q2.values(ua_2.id, ua_2.name)), [(9, 'fred')]) + @testing.requires.non_broken_pickle + def test_query_three(self): + ua = aliased(User) + q = \ + Session.query(ua).join(ua.addresses).\ + filter(Address.email.like('%fred%')) + for prot in pickle_protocols(): + q2 = serializer.loads(serializer.dumps(q, prot), users.metadata, + Session) + eq_(q2.all(), [User(name='fred')]) + + # try to pull out the aliased entity here... + ua_2 = q2._entities[0].entity_zero.entity + eq_(list(q2.values(ua_2.id, ua_2.name)), [(9, 'fred')]) + + def test_annotated_one(self): + j = join(users, addresses)._annotate({"foo": "bar"}) + query = select([addresses]).select_from( + j + ) + + str(query) + for prot in pickle_protocols(): + pickled_failing = serializer.dumps( + j, prot) + serializer.loads(pickled_failing, users.metadata, None) @testing.requires.non_broken_pickle def test_orm_join(self): |
