3 from __future__ import print_function
4 from __future__ import division
6 from past.utils import old_div
11 import arvados.commands._util as arv_cmd
13 from arvados._version import __version__
16 parser = argparse.ArgumentParser(
17 description='List contents of a manifest',
18 parents=[arv_cmd.retry_opt])
20 parser.add_argument('locator', type=str,
21 help="""Collection UUID or locator""")
22 parser.add_argument('-s', action='store_true',
23 help="""List file sizes, in KiB.""")
24 parser.add_argument('--version', action='version',
25 version="%s %s" % (sys.argv[0], __version__),
26 help='Print version and exit.')
28 return parser.parse_args(args)
30 def size_formatter(coll_file):
31 return "{:>10}".format(old_div((coll_file.size() + 1023), 1024))
33 def name_formatter(coll_file):
34 return "{}/{}".format(coll_file.stream_name(), coll_file.name)
36 def main(args, stdout, stderr, api_client=None):
37 args = parse_args(args)
39 if api_client is None:
40 api_client = arvados.api('v1')
43 cr = arvados.CollectionReader(args.locator, api_client=api_client,
44 num_retries=args.retries)
46 except (arvados.errors.ArgumentError,
47 arvados.errors.NotFoundError) as error:
48 print("arv-ls: error fetching collection: {}".format(error),
54 formatters.append(size_formatter)
55 formatters.append(name_formatter)
57 for f in cr.all_files():
58 print(*(info_func(f) for info_func in formatters), file=stdout)