Source code for clink.com.find

import inspect
from collections import deque

from clink.com.type import Component


[docs]def find(module, com_type=Component): ''' Find class which extends from com_type in module :param module module: :param class com_type: ''' coms = [] mod_que = deque([module]) while len(mod_que) > 0: mod = mod_que.popleft() for name in dir(mod): a = getattr(mod, name) if inspect.ismodule(a): if a.__name__ != mod.__name__ + '.' + name: continue mod_que.append(a) elif inspect.isclass(a): if a.__module__ != mod.__name__: continue if not issubclass(a, com_type): continue coms.append(a) return coms