upgrade apipkg.py to fix a potential recursive import issue
--HG-- branch : trunk
This commit is contained in:
parent
14feeb9ca1
commit
aa6d2a37e6
|
@ -2,6 +2,8 @@ Changes between 1.2.1 and 1.2.0
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
- fix issue63: assume <40 columns to be a bogus terminal width, default to 80
|
- fix issue63: assume <40 columns to be a bogus terminal width, default to 80
|
||||||
|
- update apipkg.py to fix an issue where recursive imports might
|
||||||
|
unnecessarily break importing
|
||||||
- fix plugin links
|
- fix plugin links
|
||||||
|
|
||||||
Changes between 1.2 and 1.1.1
|
Changes between 1.2 and 1.1.1
|
||||||
|
|
14
py/apipkg.py
14
py/apipkg.py
|
@ -8,16 +8,17 @@ see http://pypi.python.org/pypi/apipkg
|
||||||
import sys
|
import sys
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
|
|
||||||
__version__ = "1.0b4"
|
__version__ = "1.0b6"
|
||||||
|
|
||||||
def initpkg(pkgname, exportdefs):
|
def initpkg(pkgname, exportdefs):
|
||||||
""" initialize given package from the export definitions. """
|
""" initialize given package from the export definitions. """
|
||||||
mod = ApiModule(pkgname, exportdefs, implprefix=pkgname)
|
mod = ApiModule(pkgname, exportdefs, implprefix=pkgname)
|
||||||
oldmod = sys.modules[pkgname]
|
oldmod = sys.modules[pkgname]
|
||||||
mod.__file__ = getattr(oldmod, '__file__', None)
|
mod.__file__ = getattr(oldmod, '__file__', None)
|
||||||
mod.__version__ = getattr(oldmod, '__version__', None)
|
mod.__version__ = getattr(oldmod, '__version__', '0')
|
||||||
mod.__path__ = getattr(oldmod, '__path__', None)
|
for name in ('__path__', '__loader__'):
|
||||||
mod.__loader__ = getattr(oldmod, '__loader__', None)
|
if hasattr(oldmod, name):
|
||||||
|
setattr(mod, name, getattr(oldmod, name))
|
||||||
sys.modules[pkgname] = mod
|
sys.modules[pkgname] = mod
|
||||||
|
|
||||||
def importobj(modpath, attrname):
|
def importobj(modpath, attrname):
|
||||||
|
@ -71,7 +72,10 @@ class ApiModule(ModuleType):
|
||||||
else:
|
else:
|
||||||
result = importobj(modpath, attrname)
|
result = importobj(modpath, attrname)
|
||||||
setattr(self, name, result)
|
setattr(self, name, result)
|
||||||
del self.__map__[name]
|
try:
|
||||||
|
del self.__map__[name]
|
||||||
|
except KeyError:
|
||||||
|
pass # in a recursive-import situation a double-del can happen
|
||||||
return result
|
return result
|
||||||
|
|
||||||
__getattr__ = __makeattr
|
__getattr__ = __makeattr
|
||||||
|
|
Loading…
Reference in New Issue