123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import argparse
- import logging
- import os
- import sys
- from .. import io
- LOG = logging.getLogger()
- def run(result_fn_list_fn, gathered_fn):
- thatdir = os.path.dirname(result_fn_list_fn)
- thisdir = os.path.dirname(gathered_fn)
- result_fn_list = io.deserialize(result_fn_list_fn)
- io.serialize(gathered_fn, result_fn_list)
- gathered_dn = os.path.dirname(gathered_fn)
- gathered = list()
- for result_fn in result_fn_list:
- some_results = io.deserialize(result_fn)
- d = os.path.abspath(os.path.dirname(result_fn))
- def abspath(v):
- if v.startswith('.'):
- return os.path.normpath(os.path.relpath(os.path.join(d, v), gathered_dn))
- else:
- return v # apparently not a path
- # By construction, this is a list of dicts of k:output,
- # where outputs are relative to the location of result_fn.
- some_abs_results = list()
- for one in some_results:
- for v in one.values():
- assert not v.startswith('/'), '{!r} was expected to be relative'.format(v)
- abs_one = {k: abspath(v) for k,v in list(one.items())}
- some_abs_results.append(abs_one)
- gathered.extend(some_abs_results)
- io.serialize(gathered_fn, gathered)
- class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
- pass
- def parse_args(argv):
- description = 'Gather the contents of contents of result-lists into a single gathered-list.'
- epilog = 'results-list is known already, so that is a pseudo output. Its filenames point to the actual, unknown results.'
- # Question: Do we need to know the wildcards for each result?
- parser = argparse.ArgumentParser(
- description=description,
- epilog=epilog,
- formatter_class=HelpF,
- )
- parser.add_argument(
- '--result-fn-list-fn',
- help='Input: Combined list of filenames of results (pseudo output, expected to exist already in our run-dir)')
- parser.add_argument(
- '--gathered-fn',
- help='Output: serialized something-or-other')
- args = parser.parse_args(argv[1:])
- return args
- def main(argv=sys.argv):
- args = parse_args(argv)
- logging.basicConfig(level=logging.INFO)
- run(**vars(args))
- if __name__ == '__main__': # pragma: no cover
- main()
|