Exemple #1
0
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
Exemple #2
0
def allRegisteredSubclassesSelector():
    return [
        subclass for subclass in ABCMeta.__subclasses__(ValidationAPI)
        if subclass != ValidationAPIComposite
    ]