[Zodb-checkins] CVS: Zope3/lib/python/Persistence - Module.py:1.15
Jeremy Hylton
jeremy@zope.com
Fri, 20 Sep 2002 11:21:06 -0400
Update of /cvs-repository/Zope3/lib/python/Persistence
In directory cvs.zope.org:/tmp/cvs-serv14533/Persistence
Modified Files:
Module.py
Log Message:
Add support for package __init__ modules.
Also extend _import signature to handle __name__. This will be used
to support package-local imports.
=== Zope3/lib/python/Persistence/Module.py 1.14 => 1.15 ===
--- Zope3/lib/python/Persistence/Module.py:1.14 Thu Sep 19 23:51:47 2002
+++ Zope3/lib/python/Persistence/Module.py Fri Sep 20 11:21:05 2002
@@ -56,8 +56,13 @@
state["__builtins__"] = __builtin__
self.__dict__.update(state)
+# TODO for persistent packages:
+# handle package-local imports
+
class PersistentPackage(PersistentModule):
+ # XXX Is it okay that these packages don't have __path__?
pass
+
__persistent_module_registry__ = "__persistent_module_registry__"
@@ -78,12 +83,14 @@
raise ValueError, "module already exists"
if "." in name:
parent = self._package(name)
- else:
- parent = None
- self._module = PersistentModule(name)
- if parent is not None:
modname = name.split(".")[-1]
- setattr(parent, modname, self._module)
+ if modname == "__init__":
+ self._module = parent
+ else:
+ self._module = PersistentModule(name)
+ setattr(parent, modname, self._module)
+ else:
+ self._module = PersistentModule(name)
try:
self._registry.setModule(name, self._module)
except ValueError:
@@ -130,6 +137,8 @@
parts = name.split(".")[:-1]
parent = None
for i in range(len(parts)):
+ if parts[i] == "__init__":
+ raise ValueError, "__init__ can not be a package"
pname = ".".join(parts[:i+1])
package = self._registry.findModule(pname)
if package is None:
@@ -154,7 +163,7 @@
def uninstall(self):
__builtin__.__import__ = self._saved_import
- def _import(self, registry, name, fromlist):
+ def _import(self, registry, name, parent, fromlist):
mod = registry.findModule(name)
if mod is not None:
if fromlist:
@@ -171,7 +180,8 @@
def __import__(self, name, globals={}, locals={}, fromlist=[]):
registry = globals.get(__persistent_module_registry__)
if registry is not None:
- mod = self._import(registry, name, fromlist)
+ mod = self._import(registry, name, globals.get("__name__"),
+ fromlist)
if mod is not None:
return mod
return self._saved_import(name, globals, locals, fromlist)