diff options
author | Gustavo Niemeyer <gustavo@niemeyer.net> | 2002-12-16 13:11:57 (GMT) |
---|---|---|
committer | Gustavo Niemeyer <gustavo@niemeyer.net> | 2002-12-16 13:11:57 (GMT) |
commit | d5ae01a8037d5cba917aef531a3281760e82ed77 (patch) | |
tree | a610da98e483885db7363f1b28fa9c1af0c5e48c /Lib/ihooks.py | |
parent | 822a77fcc761b3c9992950ddf48b3f0bec917b4d (diff) | |
download | cpython-d5ae01a8037d5cba917aef531a3281760e82ed77.zip cpython-d5ae01a8037d5cba917aef531a3281760e82ed77.tar.gz cpython-d5ae01a8037d5cba917aef531a3281760e82ed77.tar.bz2 |
Applying patch
[#636769] Fix for major rexec bugs
* Lib/rexec.py
(FileBase): Added 'xreadlines' and '__iter__' to allowed file methods.
(FileWrapper.__init__): Removed unnecessary self.f variable, which gave
direct access to the file object.
(RExec): Added 'xreadlines' and '_weakref' to allowed modules.
(RExec.r_open): Convert string subclasses to a real string classes
before doing comparisons with mode parameter.
* Lib/ihooks.py
(BasicModuleImporter.import_module/reload/unload): Convert the module
name to a real string before working with it.
(ModuleImporter.import_module/import_it/reload): Convert the module
name to a real strings before working with it.
* Misc/NEWS
Document the change.
Diffstat (limited to 'Lib/ihooks.py')
-rw-r--r-- | Lib/ihooks.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Lib/ihooks.py b/Lib/ihooks.py index 7b00837..f01862d 100644 --- a/Lib/ihooks.py +++ b/Lib/ihooks.py @@ -352,6 +352,7 @@ class BasicModuleImporter(_Verbose): return self.loader.set_hooks(hooks) def import_module(self, name, globals={}, locals={}, fromlist=[]): + name = str(name) if name in self.modules: return self.modules[name] # Fast path stuff = self.loader.find_module(name) @@ -360,14 +361,14 @@ class BasicModuleImporter(_Verbose): return self.loader.load_module(name, stuff) def reload(self, module, path = None): - name = module.__name__ + name = str(module.__name__) stuff = self.loader.find_module(name, path) if not stuff: raise ImportError, "Module %s not found for reload" % name return self.loader.load_module(name, stuff) def unload(self, module): - del self.modules[module.__name__] + del self.modules[str(module.__name__)] # XXX Should this try to clear the module's namespace? def install(self): @@ -394,7 +395,7 @@ class ModuleImporter(BasicModuleImporter): def import_module(self, name, globals=None, locals=None, fromlist=None): parent = self.determine_parent(globals) - q, tail = self.find_head_package(parent, name) + q, tail = self.find_head_package(parent, str(name)) m = self.load_tail(q, tail) if not fromlist: return q @@ -480,16 +481,18 @@ class ModuleImporter(BasicModuleImporter): path = parent and parent.__path__ except AttributeError: return None + partname = str(partname) stuff = self.loader.find_module(partname, path) if not stuff: return None + fqname = str(fqname) m = self.loader.load_module(fqname, stuff) if parent: setattr(parent, partname, m) return m def reload(self, module): - name = module.__name__ + name = str(module.__name__) if '.' not in name: return self.import_it(name, name, None, force_load=1) i = name.rfind('.') |