11308: Eliminate old_div().
[arvados.git] / sdk / python / arvados / commands / ls.py
1 #!/usr/bin/env python
2
3 from __future__ import print_function
4 from __future__ import division
5
6 import argparse
7 import sys
8
9 import arvados
10 import arvados.commands._util as arv_cmd
11
12 from arvados._version import __version__
13
14 def parse_args(args):
15     parser = argparse.ArgumentParser(
16         description='List contents of a manifest',
17         parents=[arv_cmd.retry_opt])
18
19     parser.add_argument('locator', type=str,
20                         help="""Collection UUID or locator""")
21     parser.add_argument('-s', action='store_true',
22                         help="""List file sizes, in KiB.""")
23     parser.add_argument('--version', action='version',
24                         version="%s %s" % (sys.argv[0], __version__),
25                         help='Print version and exit.')
26
27     return parser.parse_args(args)
28
29 def size_formatter(coll_file):
30     return "{:>10}".format((coll_file.size() + 1023) // 1024)
31
32 def name_formatter(coll_file):
33     return "{}/{}".format(coll_file.stream_name(), coll_file.name)
34
35 def main(args, stdout, stderr, api_client=None):
36     args = parse_args(args)
37
38     if api_client is None:
39         api_client = arvados.api('v1')
40
41     try:
42         cr = arvados.CollectionReader(args.locator, api_client=api_client,
43                                       num_retries=args.retries)
44         cr.normalize()
45     except (arvados.errors.ArgumentError,
46             arvados.errors.NotFoundError) as error:
47         print("arv-ls: error fetching collection: {}".format(error),
48               file=stderr)
49         return 1
50
51     formatters = []
52     if args.s:
53         formatters.append(size_formatter)
54     formatters.append(name_formatter)
55
56     for f in cr.all_files():
57         print(*(info_func(f) for info_func in formatters), file=stdout)
58
59     return 0