# HG changeset patch -- Bitbucket.org # Project apipkg # URL http://bitbucket.org/hpk42/apipkg/overview # User holger krekel <hol...@merlinux.eu> # Date 1280668765 -7200 # Node ID 69b6f42e005c7ab969722dc79dc1123e424888f0 # Parent e31678d39e272aabc016355eda6aab0149518eb1 # Parent 031b6257823acbd6bfbd49ff67065413ab38921a merge ronny's changes, fix for py3 and added a tox.ini bump version to 1.0b7
--- a/test_apipkg.py +++ b/test_apipkg.py @@ -2,6 +2,7 @@ import types import sys import py import apipkg +import subprocess # # test support for importing modules # @@ -192,7 +193,7 @@ def test_initpkg_transfers_attrs(monkeyp apipkg.initpkg('hello', {}) newmod = sys.modules['hello'] assert newmod != mod - assert newmod.__file__ == mod.__file__ + assert newmod.__file__ == py.path.local(mod.__file__) assert newmod.__version__ == mod.__version__ assert newmod.__loader__ == mod.__loader__ @@ -203,7 +204,7 @@ def test_initpkg_not_transfers_not_exist apipkg.initpkg('hello', {}) newmod = sys.modules['hello'] assert newmod != mod - assert newmod.__file__ == mod.__file__ + assert newmod.__file__ == py.path.local(mod.__file__) assert not hasattr(newmod, '__loader__') assert not hasattr(newmod, '__path__') @@ -284,7 +285,7 @@ def test_onfirstaccess_setsnewattr(tmpdi if mode == 'attr': assert mod.newattr == 42 elif mode == "dict": - print mod.__dict__.keys() + print (list(mod.__dict__.keys())) assert 'newattr' in mod.__dict__ elif mode == "onfirst": assert not hasattr(mod, '__onfirstaccess__') @@ -300,4 +301,36 @@ def test_bpython_getattr_override(tmpdir }) d = api.__dict__ assert 'abspath' in d - + + + + +def test_chdir_with_relative_imports_shouldnt_break_lazy_loading(tmpdir): + pkg = tmpdir.mkdir('pkg') + messy = tmpdir.mkdir('messy') + pkg.join('__init__.py').write(py.code.Source(""" + import apipkg + apipkg.initpkg(__name__, { + 'test': '.sub:test', + }) + """)) + pkg.join('sub.py').write('def test(): pass') + + tmpdir.join('main.py').write(py.code.Source(""" + import os + import sys + sys.path.insert(0, '') + import pkg + import py + py.builtin.print_(pkg.__path__, file=sys.stderr) + py.builtin.print_(pkg.__file__, file=sys.stderr) + py.builtin.print_(pkg, file=sys.stderr) + os.chdir('messy') + pkg.test() + """)) + res = subprocess.call( + ['python', 'main.py'], + cwd=str(tmpdir), + ) + assert res == 0 + --- a/apipkg.py +++ b/apipkg.py @@ -5,20 +5,26 @@ see http://pypi.python.org/pypi/apipkg (c) holger krekel, 2009 - MIT license """ +import os import sys from types import ModuleType -__version__ = "1.0b6" +__version__ = "1.0b7" def initpkg(pkgname, exportdefs): """ initialize given package from the export definitions. """ mod = ApiModule(pkgname, exportdefs, implprefix=pkgname) oldmod = sys.modules[pkgname] - mod.__file__ = getattr(oldmod, '__file__', None) + file = getattr(oldmod, '__file__', None) + if file: + file = os.path.abspath(file) + mod.__file__ = file mod.__version__ = getattr(oldmod, '__version__', '0') - for name in ('__path__', '__loader__'): - if hasattr(oldmod, name): - setattr(mod, name, getattr(oldmod, name)) + if hasattr(oldmod, '__loader__'): + mod.__loader__ = oldmod.__loader__ + if hasattr(oldmod, '__path__'): + mod.__path__ = [os.path.abspath(p) for p in oldmod.__path__] + sys.modules[pkgname] = mod def importobj(modpath, attrname): --- /dev/null +++ b/tox.ini @@ -0,0 +1,12 @@ +[tox] +envlist=py27,py26,py25,py24,py31 + +[tox:hudson] +sdistsrc={distshare}/apipkg-* + +[testenv] +commands= + py.test --junitxml={envlogdir}/junit-{envname}.xml [] +deps= + {distshare}/py-* + --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +1.0.0b7 +---------------------------------------- + +- make apipkg memorize the absolute path where a package starts + importing so that subsequent chdir + imports won't break. + 1.0.0b6 ---------------------------------------- _______________________________________________ py-svn mailing list py-svn@codespeak.net http://codespeak.net/mailman/listinfo/py-svn