20422: Do GET when cache slot is empty instead of raising an error
[arvados.git] / sdk / python / bin / arv-normalize
1 #!/usr/bin/env python3
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: Apache-2.0
5
6 import argparse
7 import hashlib
8 import os
9 import re
10 import string
11 import sys
12
13 import arvados
14 from arvados._version import __version__
15
16 parser = argparse.ArgumentParser(
17     description='Read manifest on standard input and put normalized manifest on standard output.')
18
19 parser.add_argument('--extract', type=str,
20                     help="The file to extract from the input manifest")
21 parser.add_argument('--strip', action='store_true',
22                     help="Strip authorization tokens")
23 parser.add_argument('--version', action='version',
24                     version="%s %s" % (sys.argv[0], __version__),
25                     help='Print version and exit.')
26
27 args = parser.parse_args()
28
29 r = sys.stdin.read()
30
31 cr = arvados.CollectionReader(r)
32
33 if args.extract:
34     i = args.extract.rfind('/')
35     if i == -1:
36         stream = '.'
37         fn = args.extract
38     else:
39         stream = args.extract[:i]
40         fn = args.extract[(i+1):]
41     for s in cr.all_streams():
42         if s.name() == stream:
43             if fn in s.files():
44                 sys.stdout.write(s.files()[fn].as_manifest())
45 else:
46     sys.stdout.write(cr.manifest_text(strip=args.strip, normalize=True))