MCPcopy Create free account
hub / github.com/sqlalchemy/sqlalchemy / test_instance_deferred_cols

Method test_instance_deferred_cols

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

Source from the content-addressed store, hash-verified

391 eq_([ad.email_address for ad in u1.addresses], ["ed@bar.com"])
392
393 def test_instance_deferred_cols(self):
394 users, addresses = (self.tables.users, self.tables.addresses)
395
396 self.mapper_registry.map_imperatively(
397 User,
398 users,
399 properties={"addresses": relationship(Address, backref="user")},
400 )
401 self.mapper_registry.map_imperatively(Address, addresses)
402
403 with fixture_session(expire_on_commit=False) as sess:
404 u1 = User(name="ed")
405 u1.addresses.append(Address(email_address="ed@bar.com"))
406 sess.add(u1)
407 sess.commit()
408
409 with fixture_session(expire_on_commit=False) as sess:
410 u1 = sess.get(
411 User,
412 u1.id,
413 options=[
414 sa.orm.defer(User.name),
415 sa.orm.defaultload(User.addresses).defer(
416 Address.email_address
417 ),
418 ],
419 )
420 assert "name" not in u1.__dict__
421 assert "addresses" not in u1.__dict__
422
423 u2 = pickle.loads(pickle.dumps(u1))
424 with fixture_session() as sess2:
425 sess2.add(u2)
426 eq_(u2.name, "ed")
427 assert "addresses" not in u2.__dict__
428 ad = u2.addresses[0]
429 assert "email_address" not in ad.__dict__
430 eq_(ad.email_address, "ed@bar.com")
431 eq_(
432 u2,
433 User(
434 name="ed", addresses=[Address(email_address="ed@bar.com")]
435 ),
436 )
437
438 u2 = pickle.loads(pickle.dumps(u1))
439 with fixture_session() as sess2:
440 u2 = sess2.merge(u2, load=False)
441 eq_(u2.name, "ed")
442 assert "addresses" not in u2.__dict__
443 ad = u2.addresses[0]
444
445 # mapper options now transmit over merge(),
446 # new as of 0.6, so email_address is deferred.
447 assert "email_address" not in ad.__dict__
448
449 eq_(ad.email_address, "ed@bar.com")
450 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