On Wed, Oct 30, 2013 at 4:09 PM, Nick Coghlan <ncogh...@gmail.com> wrote: > On 31 Oct 2013 03:41, "Eric Snow" <ericsnowcurren...@gmail.com> wrote: >> Our recent discovery about reloading should probably be reflected in >> the signature of finder.find_spec(): >> >> MetaPathFinder.find_spec(name, path=None, existing=None) >> PathEntryFinder.find_spec(name, existing=None) >> >> This way the finder has an opportunity to incorporate information from >> an existing spec into the spec it returns. reload() would make use of >> this by passing module.__spec__ (or None if the module has no >> __spec__) to _bootstrap._find_spec(). >> >> This approach should also address what you are looking for. I'd >> prefer it over passing the existing spec to exec_module(). The module >> (and its __spec__) should have everything exec_module() needs to do >> its job. > > Yes, that should work.
Cool. I'll update the PEP. > >> We would still need to use loader.supports_reload() in reload(). > > Why? If the reload isn't supported, exec_module can just throw an exception > based on the loader state in the spec. At the point that exec_module() gets called, the loader can't check sys.modules to see if it's a reload or not. As a workaround, the finder could set up some loader state to indicate to the loader that it's a reload and then the loader, during exec_module(), would check that and act accordingly. However, that's the sort of boilerplate that PEP 451 is trying to offload onto the import machinery. With Loader.supports_reload() it's a lot cleaner. -eric > > From the import system's point of view "reload not permitted" is no > different from any other exec time failure. > > Cheers, > Nick. _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com