示例#1
0
文件: core.py 项目: darvid/borealis
 def generate_help(self):
     print("usage: {} <operation> [...]".format(sys.argv[0]))
     print("supported operations:")
     for backend in self.backends:
         print("  " + backend.__class__.__name__ + ":")
         for action_name in ACTIONS:
             capab = CAPABS.get(action_name)
             if CAPABS.test(backend.capabs, capab):
                 print("    {} {:<3} [options] [package(s)]".format(
                       sys.argv[0], self.get_switch_for_action(capab)))
         print("")
示例#2
0
文件: core.py 项目: darvid/borealis
 def dispatch(self, action, arguments):
     name = CAPABS.get_name(action)
     results = []
     for index, backend in enumerate(self.backends):
         method = backend.get_method(action)
         if method:
             try:
                 if action == CAPABS.SEARCH:
                     results.append(method(*arguments))
                 else:
                     results.extend(map(method, arguments))
             except DeferToNextBackend:
                 if index != len(self.backends) - 1:
                     next_backend = self.backends[index + 1]
                     log.info("deferring to " +
                              next_backend.__class__.__name__)
                     continue
         else:
             log.warning("backend {} does not support method {}"\
                         .format(backend.__class__.__name__, name))
     results = flatten_lazy(results)
     try:
         first = next(results)
         results = itertools.chain([first], results)
     except StopIteration:
         log.notice("no results")
         sys.exit(0)
     return getattr(self, "post_" + name.lower())(results)
示例#3
0
文件: core.py 项目: darvid/borealis
 def current_action_name(self):
     return CAPABS.get_name(self.current_action)