Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python2.7 contextlib.ExitStack equivalent

To programmatically combine context managers I use the following code:

== helpers.py ==

from contextlib import nested
import mock

def multiple_patch(obj_to_be_patch, *methods):
    return nested(
        *[mock.patch.object(obj_to_be_patch, method) for method in methods]
    )

== tests.py ==

def test_foo(self):
    with helpers.multiple_patch(Foo, "method1", "method2", "method3",    "method3") as mocks:
         mock_method1 = mocks[0]
         ....
         # asserts on mocks

Because I'm stuck with this version of python I can't use contextlib.ExitStack and contextlib.nested is deprecated.

Thanks

like image 849
Ali SAID OMAR Avatar asked Jan 06 '16 10:01

Ali SAID OMAR


1 Answers

Check out contextlib2.ExitStack, a backport of Python3's contextlib.ExitStack.

like image 139
pjvandehaar Avatar answered Oct 11 '22 13:10

pjvandehaar