On Jul 22, 10:06 am, escalation746 <[EMAIL PROTECTED]> wrote: > I've got a namespace query that amounts to this: How can an imported > function see data in the parent custom namespace? I have read through > numerous posts which skirt this issue without answering it. > > To illustrate, create plugin.py with a couple of functions. The second > will obviously fail. > > ---- > def Hello(): > print 'hello' > > def ViewValuable(): > print VALUABLE > ---- > > Then create master.py which loads the plugin at runtime, later running > various code fragments against it. > > ---- > # location of plugin module > filespec = '/path/to/plugins/plugin.py' > filepath, filename = os.path.split(filespec) > filename = os.path.splitext(filename)[0] > > # add to system path > if filepath not in sys.path: > sys.path.append(filepath) > > # import into our namespace > space = __import__(filename, globals(), locals(), []) > namespace = space.__dict__ > > # sometime later in the code... define a new function > def _plus(): > print 'plus' > > # add that to our namespace > namespace.update({'Plus': _plus, 'VALUABLE': 'gold'}) > > # run custom code > code = """ > Hello() > Plus() > Valuable() > """ > exec code in namespace > ---- > > This code will echo the lines: > hello > plus > > Followed by a traceback for: > NameError: global name 'VALUABLE' is not defined > > The question is: How do I get a function in plugin.py to see VALUABLE? > Using external storage of some sort is not viable since many different > instances of plugin.py, all with different values of VALUABLE, might > be running at once. (In fact VALUABLE is to be a key into a whole > whack of data stored in a separate module space.) > > Extensive modifications to plugin.py is also not a viable approach, > since that module will be created by users. Rather, I need to be able > to pass something at execution time to make this happen. Or create an > access function along the lines of _plus() that I can inject into the > namespace. > > Any help, please? I've been losing sleep over this one. > > -- robin
sys._getframe(1).f_locals -- http://mail.python.org/mailman/listinfo/python-list