[Sqlalchemy-tickets] Issue #4049: cache key error w/ undefer group on top of defaultload, 1.2 regr
Brought to you by:
zzzeek
From: Michael B. <iss...@bi...> - 2017-08-21 03:06:26
|
New issue 4049: cache key error w/ undefer group on top of defaultload, 1.2 regression w/ lazyload caching https://bitbucket.org/zzzeek/sqlalchemy/issues/4049/cache-key-error-w-undefer-group-on-top-of Michael Bayer: related to #4048, we can't even get to the lazyload for this one ``` #!python def test_undefer_group_from_relationship_lazyload(self): users, Order, User, orders = \ (self.tables.users, self.classes.Order, self.classes.User, self.tables.orders) mapper(User, users, properties=dict( orders=relationship(Order, order_by=orders.c.id))) mapper( Order, orders, properties=util.OrderedDict([ ('userident', deferred(orders.c.user_id, group='primary')), ('description', deferred(orders.c.description, group='primary')), ('opened', deferred(orders.c.isopen, group='primary')) ]) ) sess = create_session() q = sess.query(User).filter(User.id == 7).options( defaultload(User.orders).undefer_group('primary') ) def go(): result = q.all() o2 = result[0].orders[1] eq_(o2.opened, 1) eq_(o2.userident, 7) eq_(o2.description, 'order 3') self.assert_sql_count(testing.db, go, 1) ``` trace: ``` #! Traceback (most recent call last): File "/home/classic/dev/sqlalchemy/test/orm/test_deferred.py", line 419, in test_undefer_group_from_relationship_lazyload self.assert_sql_count(testing.db, go, 1) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/testing/assertions.py", line 520, in assert_sql_count db, callable_, assertsql.CountStatements(count)) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/testing/assertions.py", line 500, in assert_sql_execution result = callable_() File "/home/classic/dev/sqlalchemy/test/orm/test_deferred.py", line 415, in go o2 = result[0].orders[1] File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/attributes.py", line 242, in __get__ return self.impl.get(instance_state(instance), dict_) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/attributes.py", line 603, in get value = self.callable_(state, passive) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/strategies.py", line 623, in _load_for_state return self._emit_lazyload(session, state, ident_key, passive) File "<string>", line 1, in <lambda> File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/strategies.py", line 714, in _emit_lazyload state.load_options, effective_path File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/ext/baked.py", line 178, in _add_lazyload_options cache_key = opt._generate_cache_key(cache_path) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/strategy_options.py", line 389, in _generate_cache_key c_key = opt._generate_cache_key(path) File "/home/classic/dev/sqlalchemy/test/../lib/sqlalchemy/orm/strategy_options.py", line 113, in _generate_cache_key obj.strategy + TypeError: can only concatenate tuple (not "NoneType") to tuple ``` |