import inspect


def get_all_concrete_subclasses(cls):
    """Recursively finds all subclasses of `cls` that are not abstract"""
    ret = []
    for subcls in cls.__subclasses__():
        if not inspect.isabstract(subcls):
            ret.append(subcls)
        ret.extend(get_all_concrete_subclasses(subcls))
    return ret