Exemplo n.º 1
0
 def __call__(backends=None):
     backends = backends or ResourceManager._discover_types()
     for backend, cls in get_resource_classes(backends):
         param_doc = "\n".join([
             "  {}: {}".format(p, pdoc)
             for p, pdoc in sorted(get_resource_backends(cls).items())
         ])
         if param_doc:
             out = "Backend parameters for '{}'\n{}".format(
                 backend, param_doc)
         else:
             out = "No backend parameters for '{}'".format(backend)
         print(out)
Exemplo n.º 2
0
def get_resource_classes(names=None):
    for name in names or ResourceManager._discover_types():
        try:
            module = import_module('reproman.resource.{}'.format(name))
        except ImportError as exc:
            import difflib
            known = ResourceManager._discover_types()
            suggestions = difflib.get_close_matches(name, known)
            lgr.warning(
                "Failed to import resource %s: %s. %s: %s", name, exc_str(exc),
                "Similar backends" if suggestions else "Known backends",
                ', '.join(suggestions or known))
            continue

        class_name = ''.join([token.capitalize() for token in name.split('_')])
        cls = getattr(module, class_name)
        if issubclass(cls, Resource):
            yield name, cls
        else:
            lgr.debug(
                "Skipping %s.%s because it is not a Resource. "
                "Consider moving away", module, class_name)