3 new commits in pytest: https://bitbucket.org/hpk42/pytest/commits/250c3345c9fe/ Changeset: 250c3345c9fe Branch: sys_meta_path_remove_hook_only_if_present User: Marc Abramowitz Date: 2014-03-28 08:33:12 Summary: Only try to remove hook from sys.meta_path if it's present
Prevent error on exit if some code messes with sys.meta_path and removes the assertionrewrite hook (CaptureMock seems to do this): File "/Users/marca/dev/hg-repos/pytest/_pytest/assertion/__init__.py", line 64, in pytest_unconfigure sys.meta_path.remove(hook) ValueError: list.remove(x): x not in list Affected #: 2 files diff -r 5ae1d4e50c635e3512be6cc8c16314251328d252 -r 250c3345c9fee00ba5db3c443e0e596fd3bdf870 _pytest/assertion/__init__.py --- a/_pytest/assertion/__init__.py +++ b/_pytest/assertion/__init__.py @@ -60,7 +60,7 @@ def pytest_unconfigure(config): hook = config._assertstate.hook - if hook is not None: + if hook is not None and hook in sys.meta_path: sys.meta_path.remove(hook) def pytest_collection(session): diff -r 5ae1d4e50c635e3512be6cc8c16314251328d252 -r 250c3345c9fee00ba5db3c443e0e596fd3bdf870 testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -482,6 +482,22 @@ assert "@py_builtins" in globals()""".replace("\n", "\r\n"), "wb") assert testdir.runpytest().ret == 0 + def test_sys_meta_path_munged(self, testdir): + # In some versions, if any code messed with sys.meta_path and removed + # the assertionrewrite import hook (one example is CaptureMock), it + # would cause an error on py.test exit: + # + # File "/Users/marca/dev/hg-repos/pytest/_pytest/assertion/__init__.py", line 64, in pytest_unconfigure + # sys.meta_path.remove(hook) + # ValueError: list.remove(x): x not in list + # + testdir.tmpdir.join("test_meta_path.py").write("""#!/usr/bin/env python +def test_meta_path(): + import sys + sys.meta_path = [] + assert True""".replace("\n", "\r\n"), "wb") + assert testdir.runpytest().ret == 0 + def test_write_pyc(self, testdir, tmpdir, monkeypatch): from _pytest.assertion.rewrite import _write_pyc from _pytest.assertion import AssertionState https://bitbucket.org/hpk42/pytest/commits/b156b9799705/ Changeset: b156b9799705 Branch: sys_meta_path_remove_hook_only_if_present User: Marc Abramowitz Date: 2014-03-28 09:03:52 Summary: test_sys_meta_path_munged: Simplify with makepyfile Affected #: 1 file diff -r 250c3345c9fee00ba5db3c443e0e596fd3bdf870 -r b156b9799705667c88b127453edd5dfa401302b4 testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -483,19 +483,9 @@ assert testdir.runpytest().ret == 0 def test_sys_meta_path_munged(self, testdir): - # In some versions, if any code messed with sys.meta_path and removed - # the assertionrewrite import hook (one example is CaptureMock), it - # would cause an error on py.test exit: - # - # File "/Users/marca/dev/hg-repos/pytest/_pytest/assertion/__init__.py", line 64, in pytest_unconfigure - # sys.meta_path.remove(hook) - # ValueError: list.remove(x): x not in list - # - testdir.tmpdir.join("test_meta_path.py").write("""#!/usr/bin/env python -def test_meta_path(): - import sys - sys.meta_path = [] - assert True""".replace("\n", "\r\n"), "wb") + testdir.makepyfile(""" + def test_meta_path(): + import sys; sys.meta_path = []""") assert testdir.runpytest().ret == 0 def test_write_pyc(self, testdir, tmpdir, monkeypatch): https://bitbucket.org/hpk42/pytest/commits/3f7abe3da427/ Changeset: 3f7abe3da427 User: hpk42 Date: 2014-03-28 09:10:58 Summary: Merged in msabramo/pytest/sys_meta_path_remove_hook_only_if_present (pull request #133) Only try to remove hook from sys.meta_path if it's present Affected #: 2 files diff -r 5ae1d4e50c635e3512be6cc8c16314251328d252 -r 3f7abe3da42704c757ea437f14bd8caf5b8f04c7 _pytest/assertion/__init__.py --- a/_pytest/assertion/__init__.py +++ b/_pytest/assertion/__init__.py @@ -60,7 +60,7 @@ def pytest_unconfigure(config): hook = config._assertstate.hook - if hook is not None: + if hook is not None and hook in sys.meta_path: sys.meta_path.remove(hook) def pytest_collection(session): diff -r 5ae1d4e50c635e3512be6cc8c16314251328d252 -r 3f7abe3da42704c757ea437f14bd8caf5b8f04c7 testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -482,6 +482,12 @@ assert "@py_builtins" in globals()""".replace("\n", "\r\n"), "wb") assert testdir.runpytest().ret == 0 + def test_sys_meta_path_munged(self, testdir): + testdir.makepyfile(""" + def test_meta_path(): + import sys; sys.meta_path = []""") + assert testdir.runpytest().ret == 0 + def test_write_pyc(self, testdir, tmpdir, monkeypatch): from _pytest.assertion.rewrite import _write_pyc from _pytest.assertion import AssertionState Repository URL: https://bitbucket.org/hpk42/pytest/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit