MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_instance_deferred_cols

Method test_instance_deferred_cols

test/orm/test_pickled.py:378–440  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

376 eq_([ad.email_address for ad in u1.addresses], ["ed@bar.com"])
377
378 def test_instance_deferred_cols(self):
379 users, addresses = (self.tables.users, self.tables.addresses)
380
381 self.mapper_registry.map_imperatively(
382 User,
383 users,
384 properties={"addresses": relationship(Address, backref="user")},
385 )
386 self.mapper_registry.map_imperatively(Address, addresses)
387
388 with fixture_session(expire_on_commit=False) as sess:
389 u1 = User(name="ed")
390 u1.addresses.append(Address(email_address="ed@bar.com"))
391 sess.add(u1)
392 sess.commit()
393
394 with fixture_session(expire_on_commit=False) as sess:
395 u1 = sess.get(
396 User,
397 u1.id,
398 options=[
399 sa.orm.defer(User.name),
400 sa.orm.defaultload(User.addresses).defer(
401 Address.email_address
402 ),
403 ],
404 )
405 assert "name" not in u1.__dict__
406 assert "addresses" not in u1.__dict__
407
408 u2 = pickle.loads(pickle.dumps(u1))
409 with fixture_session() as sess2:
410 sess2.add(u2)
411 eq_(u2.name, "ed")
412 assert "addresses" not in u2.__dict__
413 ad = u2.addresses[0]
414 assert "email_address" not in ad.__dict__
415 eq_(ad.email_address, "ed@bar.com")
416 eq_(
417 u2,
418 User(
419 name="ed", addresses=[Address(email_address="ed@bar.com")]
420 ),
421 )
422
423 u2 = pickle.loads(pickle.dumps(u1))
424 with fixture_session() as sess2:
425 u2 = sess2.merge(u2, load=False)
426 eq_(u2.name, "ed")
427 assert "addresses" not in u2.__dict__
428 ad = u2.addresses[0]
429
430 # mapper options now transmit over merge(),
431 # new as of 0.6, so email_address is deferred.
432 assert "email_address" not in ad.__dict__
433
434 eq_(ad.email_address, "ed@bar.com")
435 eq_(

Callers

nothing calls this directly

Calls 15

relationshipFunction · 0.90
fixture_sessionFunction · 0.90
UserClass · 0.90
AddressClass · 0.90
eq_Function · 0.90
map_imperativelyMethod · 0.80
deferMethod · 0.80
defaultloadMethod · 0.80
appendMethod · 0.45
addMethod · 0.45
commitMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected