def get_signature(self, classname): ''' Get constructor argument signature for `classname`. ''' try: return get_signature(str(classname)) except Exception as err: self._error(err, sys.exc_info())
def test_importing(self): projdirname = 'myproj.projdir' dirstruct = { os.path.splitext(projdirname)[0]: { 'top.py': """ from openmdao.main.api import Component class MyClass(Component): pass """, 'pkgdir': { '__init__.py': '', 'pkgfile.py': 'from openmdao.main.api import Component, Assembly', 'pkgdir2': { '__init__.py': '', 'pkgfile2.py': """ from openmdao.main.api import Component class PkgClass2(Component): def __init__(self, somearg=8, anotherarg=False): super(PkgClass2, self).__init__() """, } }, 'plaindir': { 'plainfile.py': """ from pkgdir.pkgdir2.pkgfile2 import PkgClass2 p = PkgClass2() """, }, }, } build_directory(dirstruct, topdir=os.getcwd()) try: sys.path_hooks = [ProjFinder] + sys.path_hooks sys.path = [os.path.join(os.getcwd(), projdirname)] + sys.path __import__('top') __import__('pkgdir.pkgfile') __import__('pkgdir.pkgdir2.pkgfile2') mod = sys.modules['pkgdir.pkgdir2.pkgfile2'] expected_classname = 'pkgdir.pkgdir2.pkgfile2.PkgClass2' matches = _match_insts([expected_classname]) self.assertEqual(matches, set()) sig = get_signature('pkgdir.pkgdir2.pkgfile2.PkgClass2') self.assertEqual(sig['args'], [['somearg', '8'], ['anotherarg', 'False']]) inst = getattr(mod, 'PkgClass2')() # create an inst of PkgClass2 matches = _match_insts([expected_classname]) self.assertEqual(matches, set([expected_classname])) finally: sys.path = sys.path[1:]
def test_importing(self): projdirname = 'myproj.projdir' dirstruct = { os.path.splitext(projdirname)[0]: { 'top.py': """ from openmdao.main.api import Component class MyClass(Component): pass """, 'pkgdir': { '__init__.py': '', 'pkgfile.py': 'from openmdao.main.api import Component, Assembly', 'pkgdir2': { '__init__.py': '', 'pkgfile2.py': """ from openmdao.main.api import Component class PkgClass2(Component): def __init__(self, somearg=8, anotherarg=False): super(PkgClass2, self).__init__() """, } }, 'plaindir': { 'plainfile.py': """ from pkgdir.pkgdir2.pkgfile2 import PkgClass2 p = PkgClass2() """, }, }, } build_directory(dirstruct, topdir=os.getcwd()) try: sys.path_hooks = [ProjFinder]+sys.path_hooks sys.path = [os.path.join(os.getcwd(), projdirname)]+sys.path __import__('top') __import__('pkgdir.pkgfile') __import__('pkgdir.pkgdir2.pkgfile2') mod = sys.modules['pkgdir.pkgdir2.pkgfile2'] expected_classname = 'pkgdir.pkgdir2.pkgfile2.PkgClass2' matches = _match_insts([expected_classname]) self.assertEqual(matches, set()) sig = get_signature('pkgdir.pkgdir2.pkgfile2.PkgClass2') self.assertEqual(sig['args'], [['somearg', '8'], ['anotherarg', 'False']]) inst = getattr(mod, 'PkgClass2')() # create an inst of PkgClass2 matches = _match_insts([expected_classname]) self.assertEqual(matches, set([expected_classname])) finally: sys.path = sys.path[1:]
def get_signature(self, typname, version=None): """Return constructor argument signature for *typname,* using the specified package version. The return value is a dictionary. typname: string Type of object to constructor to inspect. version: string or None Version of `typname` to create. """ self._logger.debug('get_signature typname %s version %s', typname, version) signature = get_signature(typname, version) self._logger.log(LOG_DEBUG2, ' %s', signature) return signature