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