4 new commits in pytest: https://bitbucket.org/hpk42/pytest/commits/2c2048157a12/ Changeset: 2c2048157a12 User: jaraco Date: 2013-10-10 17:40:31 Summary: Adding test capturing #366 where an error occurs when package resources are loaded from the test package. Affected #: 1 file
diff -r abb2eaf10864ef237380150cb61dace37dad2ad7 -r 2c2048157a121db03d3bc06121629b9d98ba4a93 testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -493,3 +493,34 @@ raise e monkeypatch.setattr(b, "open", open) assert not _write_pyc(state, [1], source_path, pycpath) + + def test_resources_provider_for_loader(self, testdir): + """ + Attempts to load resources from a package should succeed normally, + even when the AssertionRewriteHook is used to load the modules. + + See #366 for details. + """ + pytest.importorskip("pkg_resources") + + testdir.mkpydir('testpkg') + contents = { + 'testpkg/test_pkg': """ + import pkg_resources + + import pytest + from _pytest.assertion.rewrite import AssertionRewritingHook + + def test_load_resource(): + assert isinstance(__loader__, AssertionRewritingHook) + res = pkg_resources.resource_string(__name__, 'resource.txt') + assert res == 'Load me please.' + """, + } + testdir.makepyfile(**contents) + testdir.maketxtfile(**{'testpkg/resource': "Load me please."}) + + result = testdir.runpytest() + result.stdout.fnmatch_lines([ + '* 1 passed*', + ]) https://bitbucket.org/hpk42/pytest/commits/9ce7380eb99c/ Changeset: 9ce7380eb99c User: jaraco Date: 2013-10-10 17:56:12 Summary: Register the AssertionRewritingHook loader with pkg_resources; fixes #366. Affected #: 1 file diff -r 2c2048157a121db03d3bc06121629b9d98ba4a93 -r 9ce7380eb99c7d30ca3d4cfdae6782bc0ecfbd15 _pytest/assertion/rewrite.py --- a/_pytest/assertion/rewrite.py +++ b/_pytest/assertion/rewrite.py @@ -41,6 +41,7 @@ def __init__(self): self.session = None self.modules = {} + self._register_with_pkg_resources() def set_session(self, session): self.fnpats = session.config.getini("python_files") @@ -169,6 +170,23 @@ tp = desc[2] return tp == imp.PKG_DIRECTORY + @classmethod + def _register_with_pkg_resources(cls): + """ + Ensure package resources can be loaded from this loader. + """ + try: + pkg_resources = __import__('pkg_resources') + # access an attribute in case a deferred importer is present + pkg_resources.__name__ + except ImportError: + return + + # Since pytest tests are always located in the file system, the + # DefaultProvider is appropriate. + pkg_resources.register_loader_type(cls, pkg_resources.DefaultProvider) + + def _write_pyc(state, co, source_path, pyc): # Technically, we don't have to have the same pyc format as # (C)Python, since these "pycs" should never be seen by builtin https://bitbucket.org/hpk42/pytest/commits/7bd3084ea722/ Changeset: 7bd3084ea722 User: jaraco Date: 2013-10-10 23:39:37 Summary: Implement suggestions by HPK Affected #: 1 file diff -r 9ce7380eb99c7d30ca3d4cfdae6782bc0ecfbd15 -r 7bd3084ea72250eec2d03952c43d9e4de47753d4 _pytest/assertion/rewrite.py --- a/_pytest/assertion/rewrite.py +++ b/_pytest/assertion/rewrite.py @@ -173,10 +173,11 @@ @classmethod def _register_with_pkg_resources(cls): """ - Ensure package resources can be loaded from this loader. + Ensure package resources can be loaded from this loader. May be called + multiple times, as the operation is idempotent. """ try: - pkg_resources = __import__('pkg_resources') + import pkg_resources # access an attribute in case a deferred importer is present pkg_resources.__name__ except ImportError: https://bitbucket.org/hpk42/pytest/commits/70020cf2651b/ Changeset: 70020cf2651b User: jaraco Date: 2013-10-11 00:01:56 Summary: Fix bytes/string mismatch in test on Python 3 Affected #: 1 file diff -r 7bd3084ea72250eec2d03952c43d9e4de47753d4 -r 70020cf2651ba7bc717586d43dc715c059a71d9a testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -514,6 +514,7 @@ def test_load_resource(): assert isinstance(__loader__, AssertionRewritingHook) res = pkg_resources.resource_string(__name__, 'resource.txt') + res = res.decode('ascii') assert res == 'Load me please.' """, } 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