def __call__(self, argv): log_caf(argv) try: super().__call__(argv) # try CLI as if local except CLIExit as e: # store exception to reraise below if remote fails as well cliexit = e else: print_timing() return # finished # the local CLI above did not succeed # make a usage without local CLI usage = '\n'.join(l for l in str(self).splitlines() if 'caf COMMAND' not in l) try: # remote CLI failed as well, reraise CLIExit args = docopt(usage, argv=argv[1:], options_first=True, help=False) # parse local except DocoptExit: raise cliexit rargv = [argv[0], args['COMMAND']] + args['ARGS'] # remote argv try: # try CLI as if remote rargs = self.parse(rargv) # remote parsed arguments except DocoptExit: # remote CLI failed as well, reraise CLIExit raise cliexit if 'work' in rargs: if rargs['--queue']: # substitute URL url = self.get_queue_url(rargs['--queue'], 'get') if url: rargv = [arg if arg != rargs['--queue'] else url for arg in rargv] elif rargs['--last']: with open('.caf/LAST_QUEUE') as f: queue_url = f.read().strip() last_index = rargv.index('--last') rargv = rargv[:last_index] + ['--queue', queue_url] + rargv[last_index+1:] remotes = self.proc_remote(args['REMOTE']) # get Remote objects if args['COMMAND'] in ['init', 'build', 'work']: for remote in remotes: remote.update() if 'work' in rargs and not rargs['build'] and not args['--no-check']: for remote in remotes: remote.check(self.out) for remote in remotes: remote.command(' '.join(arg if ' ' not in arg else repr(arg) for arg in rargv[1:])) if 'work' in rargs and rargs['build'] and not args['--no-check']: remote.check(self.out)
def finalize(self, sig, frame): print_timing() sys.exit()