Source code for thenamelisttool.entrypoints.tntstack

"""
TNT Stack - A namelist's pack updater.
"""

import argparse
import os
import yaml

import thenamelisttool as tnt
from thenamelisttool.namadapter import NO_SORTING, FIRST_ORDER_SORTING, SECOND_ORDER_SORTING

_tmpl = 'tmpl_directives.tntstack.yaml'


[docs]def main(): """Run the tntstack CLI.""" parser = argparse.ArgumentParser(description="TNT Stack - A namelist's pack updater.", epilog='End of help for: %(prog)s') parser.add_argument('-v', action='store_true', dest='verbose', help='verbose mode.', default=False) sorting = parser.add_mutually_exclusive_group() sorting.add_argument('-S', action='store_const', const=FIRST_ORDER_SORTING + 1, dest='first_order_sorting', help='first order sorting: sort all keys within blocks.') sorting.add_argument('-0', action='store_const', const=NO_SORTING + 1, dest='no_sorting', help='no sorting at all (the default is second_order_sorting, \ i.e. sort only within indexes or attributes of the \ same key within blocks).') directive = parser.add_mutually_exclusive_group(required=True) directive.add_argument('-d', dest='directive', type=str, help='the file in which update directives are stored. \ Activate option -D instead of -d to generate a template.') directive.add_argument('-D', dest='generate_directive_template', action='store_true', help="generates a directive template written in '{}'.".format(_tmpl)) args = parser.parse_args() if args.generate_directive_template: tnt.config.write_directives_template(_tmpl, tplname='tntstack-directive.tpl.yaml') print("Template of directives written in: " + os.path.abspath(_tmpl)) else: # Find the basedir dirpath = os.path.realpath(args.directive) basedir = os.path.dirname(dirpath) with open(args.directive) as fhyaml: directive = tnt.config.TntStackDirective(basedir, ** yaml.load(fhyaml)) with tnt.util.set_verbose(args.verbose, args.directive): tnt.util.process_tnt_stack(directive, sorting=(args.first_order_sorting or args.no_sorting or SECOND_ORDER_SORTING + 1) - 1)