Source code for openmdao.main.importfactory

#public symbols
__all__ = ["ImportFactory"]

import sys

from openmdao.main.factory import Factory
from openmdao.util.log import logger


class ImportFactory(Factory):
[docs] """Creates objects using the standard Python *__import__* mechanism. The object must have a ctor with the same name as the module, minus the file extension. For example, to create a MyComp object, the module must be named *MyComp.py* (or *.pyc* or *.pyo*). This factory does not support specific version creation or creation on a remote server.""" def __init__(self): super(ImportFactory, self).__init__() self._ctors = {} def create(self, typ, version=None, server=None,
[docs] res_desc=None, **ctor_args): """Tries to import the given named module and return a factory function from it. The factory function or constructor must have the same name as the module. The module must be importable in the current Python environment. """ if server is not None or version is not None: return None if res_desc is not None and len(res_desc)>0: return None ctor = self._import(typ) if ctor is None: return None else: return ctor(**ctor_args) def _import(self, typ):
"""Return class for *typ*.""" if typ not in self._ctors: parts = typ.split('.') cname = parts[-1] modname = '.'.join(parts[:-1]) try: __import__(modname, globals(), locals(), [cname]) mod = sys.modules[modname] except (ImportError, KeyError) as err: logger.error(str(err)) return None try: self._ctors[typ] = getattr(mod, cname) except AttributeError as err: logger.error(str(err)) return None return self._ctors[typ] def get_available_types(self, groups=None):
[docs] """Does nothing but is included to adhere to the Factory interface.""" return [] def get_signature(self, typname, version=None):
[docs] """Return constructor argument signature for *typname,* using the specified package version. The return value is a dictionary. """ if version is not None: return None cls = self._import(typname) if cls is None: return None else: return self.form_signature(cls)
OpenMDAO Home