diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-04-30 19:44:16 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-04-30 19:55:28 -0400 |
| commit | e0f9b279f43759886c61e6c82f97d95d0093fdf7 (patch) | |
| tree | 30752e0689319850969ebd52174532afeab9980e /test/engine/test_pool.py | |
| parent | 0e98795ff2c7a164b4da164d7b26af3faabf84d1 (diff) | |
| download | sqlalchemy-e0f9b279f43759886c61e6c82f97d95d0093fdf7.tar.gz | |
- work the wrapping of the "creator" to be as resilient to
old / new style, direct access, and ad-hoc patching and
unpatching as possible
Diffstat (limited to 'test/engine/test_pool.py')
| -rw-r--r-- | test/engine/test_pool.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/test/engine/test_pool.py b/test/engine/test_pool.py index 3d93cda89..912c6c3fe 100644 --- a/test/engine/test_pool.py +++ b/test/engine/test_pool.py @@ -1807,3 +1807,58 @@ class StaticPoolTest(PoolTestBase): p = pool.StaticPool(creator) p2 = p.recreate() assert p._creator is p2._creator + + +class CreatorCompatibilityTest(PoolTestBase): + def test_creator_callable_outside_noarg(self): + e = testing_engine() + + creator = e.pool._creator + try: + conn = creator() + finally: + conn.close() + + def test_creator_callable_outside_witharg(self): + e = testing_engine() + + creator = e.pool._creator + try: + conn = creator(Mock()) + finally: + conn.close() + + def test_creator_patching_arg_to_noarg(self): + e = testing_engine() + creator = e.pool._creator + try: + # the creator is the two-arg form + conn = creator(Mock()) + finally: + conn.close() + + def mock_create(): + return creator() + + conn = e.connect() + conn.invalidate() + conn.close() + + # test that the 'should_wrap_creator' memoized attribute + # will dynamically switch if the _creator is monkeypatched. + + is_(e.pool.__dict__.get("_should_wrap_creator")[0], False) + + # patch it with a zero-arg form + with patch.object(e.pool, "_creator", mock_create): + conn = e.connect() + conn.invalidate() + conn.close() + + is_(e.pool.__dict__.get("_should_wrap_creator")[0], True) + + conn = e.connect() + conn.close() + + is_(e.pool.__dict__.get("_should_wrap_creator")[0], False) + |
