Using __import__ in python product to access a local module attribute
I'm trying to use __import__ to dynamically import a module in a customized formulator python product, and thereby access a singleton instance attribute of the primary class wtih a call to getattr. I can get it to work with hardcoding the module name, but I don't see what I'm missing when I try to use __import__. The code below is just an early version of a means to an end, and I'm wide open to better ways accessing the instance attribute. Metaprogramming babysteps, I guess... The MyExtClassInstance attribute in MyExtModule.py that I'm trying to access is defined like this: MyExtClassInstance = MyExtClass() justl like the widget and validator formulator classes are. MyExtModule.py is in the same product directory with my customized formulator filesystem product, call it 'FormulatorMyExt'. --- FieldRegistry.py ------------------------------------------------------ def initializeFieldForm(field_class, components=('widget','validator')): """ """ from Form import BasicForm from DummyField import fields form = BasicForm() override_form = BasicForm() tales_form = BasicForm() for component in components: if component not in ('widget','validator'): # when the seq is ('widget','validator','myExtModule') import MyExtModule # This works ... # but what I intend is a working form of either of these next lines.... # __import__(component.capitalize(), globals(), locals()) #__import__(getattr(Products.FormulatorMyExt,component.capitalize()), globals(), locals()) setattr(field_class, component, getattr(MyExtModule,component.capitalize()+'Instance')) I get errors like: NameError: global name 'Layout' is not defined (in the first case, and) NameError: global name 'Products' is not defined (in the second case) Does anyone see my mistakes here? __import__ isn't restricted to product python code is it? And obviously, I want to get that last line of hardcoded MyExtModule name out of there, but it obfuscated the problem to add that here. I can do it with a setattr call, I think, contingent on solving the former problem. Thanks for any help with using __import__, including the from list, or suggestion of a completely different way to do it as appropriate.
participants (1)
-
Jeff Kowalczyk