docs: def get_subclasses(modulepath, parent_class):
      """given a module return all the parent_class subclasses that are found in
      that module and any submodules.
  
      :param modulepath: string, a path like foo.bar.che
      :param parent_class: object, the class whose children you are looking for
      :returns: set, all the found child classes in modulepath of parent_class
      """
      if isinstance(modulepath, ModuleType):
          modules = get_modules(modulepath.__name__)
      else:
          modules = get_modules(modulepath)
  
      ret = set()
      for m in modules:
          cs = inspect.getmembers(m, lambda v: inspect.isclass(v) and issubclass(v, parent_class))
          for class_name, klass in cs:
              ret.add(klass)
  
      return ret