# HG changeset patch # User Paul Boddie # Date 1100384240 -3600 # Node ID 036e01d8f7974cac59e79ba56b3256560d749273 # Parent eeb675a30dd9f9c7238f284d6b88b72b8cfd7987 Fixed hierarchical imports. Removed some unnecessary code. diff -r eeb675a30dd9 -r 036e01d8f797 classhook.py --- a/classhook.py Sat Nov 13 23:16:42 2004 +0100 +++ b/classhook.py Sat Nov 13 23:17:20 2004 +0100 @@ -20,6 +20,12 @@ "A class providing support for searching directories for supported files." + """ + def find_module(self, name, path=None): + print "find_module", name, path + return ihooks.ModuleLoader.find_module(self, name, path) + """ + def find_module_in_dir(self, name, dir): """ @@ -39,9 +45,28 @@ path = os.path.join(dir, name) print "Processing name", name, "in", dir, "producing", path + + if self._find_module_at_path(path): + return (None, path, ("", "", PKG_DIRECTORY)) + else: + return None + + def _find_module_at_path(self, path): if os.path.isdir(path): + + # Look for classes in the directory. + if len(glob.glob(os.path.join(path, "*" + os.extsep + "class"))) != 0: - return (None, path, ("", "", PKG_DIRECTORY)) + return 1 + + # Otherwise permit importing where directories containing classes exist. + + for filename in os.listdir(path): + pathname = os.path.join(path, filename) + result = self._find_module_at_path(pathname) + if result is not None: + return result + return None def load_module(self, name, stuff): @@ -56,6 +81,7 @@ # Just go into the directory and find the class files. file, filename, info = stuff + print "*", file, filename, info # Prepare a dictionary of globals. @@ -76,11 +102,19 @@ cls = translator.process(global_names) module.__dict__[cls.__name__] = cls + module.__path__ = [filename] return module +""" class ClassImporter(ihooks.ModuleImporter): + def find_head_package(self, parent, name): + print "find_head_package", parent, name + return ihooks.ModuleImporter.find_head_package(self, parent, name) + def import_it(self, partname, fqname, parent, force_load=0): + print "import_it", partname, fqname, parent, force_load + print "modules", self.modules try: return parent.__dict__[partname] @@ -88,8 +122,9 @@ return ihooks.ModuleImporter.import_it( self, partname, fqname, parent, force_load ) +""" -importer = ClassImporter(loader=ClassLoader(hooks=ClassHooks())) +importer = ihooks.ModuleImporter(loader=ClassLoader(hooks=ClassHooks())) importer.install() # vim: tabstop=4 expandtab shiftwidth=4