On Wed, May 29, 2013 at 11:58 AM, R. David Murray <rdmurray at bitdance.com> wrote: > On Thu, 30 May 2013 00:59:02 +1000, Nick Coghlan <ncoghlan at gmail.com> wrote: >> On Thu, May 30, 2013 at 12:47 AM, Brett Cannon <brett at python.org> wrote: >> > I am willing to compromise to module_to_initialize, module_to_init, or >> > module_to_load. Pick one. =) >> >> I see this as *really* similar to a database transaction, and those >> start with "session.begin()". >> >> Could you tolerate "with begin_module_init(name) as m:"? > > But for a transaction, it is 'with session', not 'with begin_session'. > > With 'begin_module_init' I would have no idea what 'm' was. With > Brett's 'module_to_init' I have an intuitive idea about what 'm' is. > And if 'm' isn't a module, then module_manager would be better. > > (Note that I haven't grokked what Brett's context manager is actually > doing/returning, I'm speaking here as an ignorant reader of someone > else's code :) In case you want to suggest a name, the context manager returns the module that should be initialized/loaded. So typical usage will be:: class Loader: def load_module(self, fullname): with importlib.util.module_to_init(fullname) as module: # Load/initialize the module return module Basically the manager either gets the module from sys.modules if it is already there (a reload) or creates a new module and sticks it into sys.modules so other imports will grab the right module object. If there is an exception and the module was new, it deletes it from sys.modules to prevent stale modules from sticking around.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4