def urd_call_w_tildes(cfg, path, tildes): res = call(cfg.urd + '/' + path, server_name='urd', retries=0, quiet=True) if tildes: up = sum(count for char, count in tildes if char == '^') down = sum(count for char, count in tildes if char == '~') tildes = down - up if tildes: key = res.user + '/' + res.build timestamps = call(cfg.urd + '/' + key + '/since/0', server_name='urd', retries=0, quiet=True) pos = timestamps.index(res.timestamp) + tildes if pos < 0 or pos >= len(timestamps): return None res = call(cfg.urd + '/' + key + '/' + timestamps[pos], server_name='urd', retries=0, quiet=True) return res
def main(argv, cfg): usage = "%(prog)s [-a | [workdir [workdir [...]]]" parser = ArgumentParser(usage=usage, prog=argv.pop(0)) parser.add_argument('-a', '--all', action='store_true', help="list all workdirs") parser.add_argument('workdirs', nargs='*', default=[]) args = parser.parse_args(argv) if args.all: args.workdirs.extend(sorted(cfg.workdirs)) if not args.workdirs: for wd in sorted(cfg.workdirs): print(wd) return for name in args.workdirs: if name not in cfg.workdirs: print("No such workdir:", name, file=sys.stderr) continue known = call(cfg.url + '/workdir/' + url_quote(name)) for jid in workdir_jids(cfg, name): show_job(known, jid) try: latest = os.readlink(os.path.join(cfg.workdirs[name], name + '-LATEST')) except OSError: latest = None if latest: show_job(known, jid, name + '-LATEST')
def _call(self, url, data=None, fmt=_urd_typeify): assert self._url, "No urd configured for this server" url = url.replace(' ', '%20') return call(url, data=data, fmt=fmt, headers=self._headers, server_name='urd')
def show(url, job, show_output): print(job.path) print('=' * len(job.path)) setup = job.json_load('setup.json') setup.pop('_typing', None) setup.starttime = str(datetime.fromtimestamp(setup.starttime)) if 'endtime' in setup: setup.endtime = str(datetime.fromtimestamp(setup.endtime)) print(encode_setup(setup, as_str=True)) try: with job.open('datasets.txt') as fh: print() print('datasets:') for line in fh: print(' %s/%s' % ( job, line[:-1], )) except IOError: pass try: post = job.json_load('post.json') except FileNotFoundError: print('\x1b[31mWARNING: Job did not finish\x1b[m') post = None if post and post.subjobs: print() print('subjobs:') for sj in sorted(post.subjobs): print(' ', sj) if post and post.files: print() print('files:') for fn in sorted(post.files): print(' ', job.filename(fn)) if post and not call(url + '/job_is_current/' + job): print('\x1b[34mJob is not current\x1b[m') print() out = job.output() if show_output: if out: print('output (use --just-output/-O to see only the output):') print(out) if not out.endswith('\n'): print() else: print(job, 'produced no output') print() elif out: print('%s produced %d bytes of output, use --output/-o to see it' % ( job, len(out), )) print()
def show(url, job, show_output): print(job.path) print('=' * len(job.path)) setup = job.json_load('setup.json') setup.pop('_typing', None) setup.starttime = str(datetime.fromtimestamp(setup.starttime)) if 'endtime' in setup: setup.endtime = str(datetime.fromtimestamp(setup.endtime)) print(encode_setup(setup, as_str=True)) if job.datasets: print() print('datasets:') for ds in job.datasets: print(' ', ds.quoted) try: post = job.json_load('post.json') except FileNotFoundError: print(colour('WARNING: Job did not finish', 'job/warning')) post = None if post and post.subjobs: print() print('subjobs:') for sj in sorted(post.subjobs): print(' ', sj) if post and post.files: print() print('files:') for fn in sorted(post.files): print(' ', job.filename(fn)) if post and not call(url + '/job_is_current/' + url_quote(job)): print(colour('Job is not current', 'job/info')) print() out = job.output() if show_output: if out: print('output (use --just-output/-O to see only the output):') print(out) if not out.endswith('\n'): print() else: print(job, 'produced no output') print() elif out: print('%s produced %d bytes of output, use --output/-o to see it' % ( job, len(out), )) print()
def call_u(*path): return call(os.path.join(cfg.urd, *map(url_quote, path)), server_name='urd')
def call_s(*path): return call(os.path.join(cfg.url, *map(url_quote, path)))
def main(argv, cfg): prog = argv.pop(0) if '--help' in argv or '-h' in argv: print('usage: %s [method]' % (prog, )) print('gives description and options for method,') print('or lists methods with no method specified.') return methods = call(cfg.url + '/methods') columns = terminal_size().columns if argv: for name in argv: if name in methods: data = methods[name] print('%s.%s:' % ( data.package, name, )) if data.description.text: for line in data.description.text.split('\n'): if line: print(' ', line) else: print() print() if cfg.get('interpreters'): print('Runs on <%s> %s' % ( data.version, data.description.interpreter, )) print() for k in ( 'datasets', 'jobs', ): if data.description.get(k): print('%s:' % (k, )) klen = max(len(k) for k in data.description[k]) template = ' %%-%ds # %%s' % (klen, ) for k, v in data.description[k].items(): if v: print(template % ( k, v[0], )) for cmt in v[1:]: print(template % ( '', cmt, )) else: print(' ', k) if data.description.get('options'): print('options:') klen = max(len(k) for k in data.description.options) vlens = [ len(v[0]) for v in data.description.options.values() if len(v) > 1 ] vlen = max(vlens or [0]) firstlen = klen + vlen + 5 template = ' %%-%ds = %%s' % (klen, ) template_cmt = '%%-%ds # %%s' % (firstlen, ) for k, v in data.description.options.items(): first = template % ( k, v[0], ) if len(v) > 1: afterlen = max(len(cmt) for cmt in v[1:]) + firstlen + 4 if afterlen <= columns: print(template_cmt % ( first, v[1], )) for cmt in v[2:]: print(template_cmt % ( '', cmt, )) else: for cmt in v[1:]: print(' #', cmt) print(first) else: print(first) else: print('Method %r not found' % (name, )) else: by_package = defaultdict(list) for name, data in sorted(methods.items()): by_package[data.package].append(name) by_package.pop('accelerator.test_methods', None) for package, names in sorted(by_package.items()): print('%s:' % (package, )) items = [(name, methods[name].description.text) for name in names] printdesc(items, columns)
def _url_json(self, *path, **kw): url = self.url + os.path.join('/', *path) return call(url, **kw)
def get(count): url ='%s/method2job/%s/%s' % (cfg.url, method, count) if start_from: url += '?start_from=' + url_quote(start_from) return call(url)
def call_u(*path, **kw): url = os.path.join(cfg.urd, *map(url_quote, path)) if kw: url = url + '?' + urlencode(kw) return call(url, server_name='urd')