Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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')
Ejemplo n.º 3
0
 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')
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
 def call_u(*path):
     return call(os.path.join(cfg.urd, *map(url_quote, path)),
                 server_name='urd')
Ejemplo n.º 7
0
 def call_s(*path):
     return call(os.path.join(cfg.url, *map(url_quote, path)))
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
 def _url_json(self, *path, **kw):
     url = self.url + os.path.join('/', *path)
     return call(url, **kw)
Ejemplo n.º 10
0
	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)
Ejemplo n.º 11
0
	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')