def collect_application_subclasses(clazz: ABCMeta) -> dict: result = dict() for class_ in clazz.__subclasses__(): # from module import subclass. if len(class_.__subclasses__()) != 0: sub_result = collect_application_subclasses(class_) confluence = result.keys() & sub_result.keys() if len(confluence) > 0: raise KeyError( f"{str(confluence)}: Already exist , duplicates in source code for subclasses of {str(clazz)}" ) result.update(sub_result) if not inspect.isabstract(class_): application = class_.get_application_name() package = inspect.getmodule(class_).__name__ full_name = package + "." + application if full_name in result: raise KeyError( f"{full_name}: Already exist , duplicates in source code for subclasses of {str(clazz)}" ) logging.info( f'New subclass of {str(clazz)} was found : {full_name} , implementation: {str(class_)}' ) result[full_name] = class_ return result
def allRegisteredSubclassesSelector(): return [ subclass for subclass in ABCMeta.__subclasses__(ValidationAPI) if subclass != ValidationAPIComposite ]