(self)
| 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_( |
nothing calls this directly
no test coverage detected