8784: Merge branch 'master' into 8784-dir-listings
[arvados.git] / sdk / python / bin / arv-normalize
1 #!/usr/bin/env python
2
3 import argparse
4 import hashlib
5 import os
6 import re
7 import string
8 import sys
9
10 import arvados
11 from arvados._version import __version__
12
13 parser = argparse.ArgumentParser(
14     description='Read manifest on standard input and put normalized manifest on standard output.')
15
16 parser.add_argument('--extract', type=str,
17                     help="The file to extract from the input manifest")
18 parser.add_argument('--strip', action='store_true',
19                     help="Strip authorization tokens")
20 parser.add_argument('--version', action='version',
21                     version="%s %s" % (sys.argv[0], __version__),
22                     help='Print version and exit.')
23
24 args = parser.parse_args()
25
26 r = sys.stdin.read()
27
28 cr = arvados.CollectionReader(r)
29
30 if args.extract:
31     i = args.extract.rfind('/')
32     if i == -1:
33         stream = '.'
34         fn = args.extract
35     else:
36         stream = args.extract[:i]
37         fn = args.extract[(i+1):]
38     for s in cr.all_streams():
39         if s.name() == stream:
40             if fn in s.files():
41                 sys.stdout.write(s.files()[fn].as_manifest())
42 else:
43     sys.stdout.write(cr.manifest_text(strip=args.strip, normalize=True))