Source code for fancytools.pystructure.getMembers

# -*- coding: utf-8 -*-

'''
Different functions to return members within a given module or package.
'''

import inspect


[docs]def getAvailableClassesInModule(prooveModule): ''' return a list of all classes in the given module that dont begin with '_' ''' l=tuple(x[1] for x in inspect.getmembers(prooveModule,inspect.isclass)) l = [x for x in l if x.__name__[0] != "_" ] return l
[docs]def getAvailableClassesInPackage(package): ''' return a list of all classes in the given package whose modules dont begin with '_' ''' l=list(x[1] for x in inspect.getmembers(package,inspect.isclass)) modules = list(x[1] for x in inspect.getmembers(package,inspect.ismodule)) for m in modules: l.extend(list(x[1] for x in inspect.getmembers(m,inspect.isclass))) l = [x for x in l if x.__name__[0] != "_" ] n=0 while n < len(l): cls =l[n] if not cls.__module__.startswith(package.__name__): l.pop(n) n-=1 n+=1 return l
[docs]def getAvClassNamesInPackage(package): '''get the class names within a package''' l = getAvailableClassesInPackage(package) return [x.__name__ for x in l]
[docs]def getAvClassNamesInModule(prooveModule): '''get the class names within a module''' l = getAvailableClassesInModule(prooveModule) return [x.__name__ for x in l]
[docs]def getClassInPackageFromName(className, pkg): ''' get a class from name within a package ''' #TODO: more efficiency! n = getAvClassNamesInPackage(pkg) i = n.index(className) c = getAvailableClassesInPackage(pkg) return c[i]
[docs]def getClassInModuleFromName(className, module): ''' get a class from name within a module ''' n = getAvClassNamesInModule(module) i = n.index(className) c = getAvailableClassesInModule(module) return c[i]
if __name__ == '__main__': import numpy c_names = getAvClassNamesInPackage(numpy) print('classes within numpy are: %s' %c_names ) print('get class from the first name [%s]: [%s]' %( c_names[0], getClassInPackageFromName(c_names[0], numpy) ) )