[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