[py-svn] py-trunk commit c9b711ddbfe4: (fixes issue83) don't try to import conftest from an invalid package path, refine path.pyimport() logic

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Tue Apr 27 15:49:39 CEST 2010


# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview
# User holger krekel <holger at merlinux.eu>
# Date 1272376153 -7200
# Node ID c9b711ddbfe441d8b5ae5d17975db3559399210c
# Parent  e368347f7d1342098d61d6abe8b54361e7859b4f
(fixes issue83) don't try to import conftest from an invalid package path, refine path.pyimport() logic

--- a/py/_path/local.py
+++ b/py/_path/local.py
@@ -456,7 +456,8 @@ class LocalPath(FSBase):
     def pypkgpath(self, pkgname=None):
         """ return the path's package path by looking for the given
             pkgname.  If pkgname is None then look for the last
-            directory upwards which still contains an __init__.py.
+            directory upwards which still contains an __init__.py
+            and whose basename is python-importable.
             Return None if a pkgpath can not be determined.
         """
         pkgpath = None
@@ -464,6 +465,8 @@ class LocalPath(FSBase):
             if pkgname is None:
                 if parent.check(file=1):
                     continue
+                if not isimportable(parent.basename):
+                    break
                 if parent.join('__init__.py').check():
                     pkgpath = parent
                     continue
@@ -797,3 +800,6 @@ def autopath(globs=None):
     ret.pkgdir = pkgdir
     return ret
 
+
+def isimportable(name):
+    return name[0].isalpha() and name.isalnum()

--- a/testing/path/test_local.py
+++ b/testing/path/test_local.py
@@ -355,6 +355,14 @@ def test_pypkgdir(tmpdir):
     assert pkg.pypkgpath() == pkg
     assert pkg.join('subdir', '__init__.py').pypkgpath() == pkg
 
+def test_pypkgdir_unimportable(tmpdir):
+    pkg = tmpdir.ensure('pkg1-1', dir=1) # unimportable
+    pkg.ensure("__init__.py")
+    subdir = pkg.ensure("subdir/__init__.py").dirpath()
+    assert subdir.pypkgpath() == subdir
+    assert subdir.ensure("xyz.py").pypkgpath() == subdir
+    assert not pkg.pypkgpath() 
+
 def test_homedir():
     homedir = py.path.local._gethomedir()
     assert homedir.check(dir=1)

--- a/testing/test_conftesthandle.py
+++ b/testing/test_conftesthandle.py
@@ -90,6 +90,13 @@ class TestConftestValueAccessGlobal:
         assert path.dirpath() == basedir.join("adir", "b")
         assert path.purebasename == "conftest"
 
+def test_conftest_in_nonpkg_with_init(tmpdir):
+    tmpdir.ensure("adir-1.0/conftest.py").write("a=1 ; Directory = 3")
+    tmpdir.ensure("adir-1.0/b/conftest.py").write("b=2 ; a = 1.5")
+    tmpdir.ensure("adir-1.0/b/__init__.py")
+    tmpdir.ensure("adir-1.0/__init__.py")
+    conftest = ConftestWithSetinitial(tmpdir.join("adir-1.0", "b"))
+
 def test_conftestcutdir(testdir):
     conf = testdir.makeconftest("")
     p = testdir.mkdir("x")

--- a/testing/test_config.py
+++ b/testing/test_config.py
@@ -169,6 +169,7 @@ class TestConfigApi_getinitialnodes:
         assert col.config is config 
 
     def test_pkgfile(self, testdir, tmpdir):
+        tmpdir = tmpdir.join("subdir")
         x = tmpdir.ensure("x.py")
         tmpdir.ensure("__init__.py")
         config = testdir.reparseconfig([x])



More information about the pytest-commit mailing list