mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
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.
This commit is contained in:
parent
822a77fcc7
commit
d5ae01a803
3 changed files with 15 additions and 7 deletions
|
|
@ -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('.')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue