On 31 Oct 2013 08:54, "Eric Snow" <ericsnowcurren...@gmail.com> wrote: > > 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.
There's also the option of implementing the constraint directly in the finder, which *does* have the necessary info (with the change to pass the previous spec to find_spec). I still think it makes more sense to leave this out for the moment - it's not at all clear we need the extra method, and adding it later would be a straightforward protocol update. Cheers, Nick. > > -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