Source code for aviary.interface.cmd_entry_points

import argparse
import os
import sys

import aviary
from aviary.interface.methods_for_level1 import _exec_level1, _setup_level1_parser
from aviary.utils.fortran_to_aviary import _exec_F2A, _setup_F2A_parser
from aviary.utils.engine_deck_conversion import _exec_EDC, _setup_EDC_parser, EDC_description
from aviary.utils.aero_table_conversion import _exec_ATC, _setup_ATC_parser
from aviary.utils.propeller_map_conversion import _exec_PMC, _setup_PMC_parser
from aviary.visualization.dashboard import _dashboard_setup_parser, _dashboard_cmd
from aviary.interface.graphical_input import _exec_flight_profile, _setup_flight_profile_parser
from aviary.interface.download_models import _exec_hangar, _setup_hangar_parser
from aviary.interface.plot_drag_polar import _exec_plot_drag_polar, _setup_plot_drag_polar_parser


def _load_and_exec(script_name, user_args):
    """
    Load and exec the given script as __main__.

    Parameters
    ----------
    script_name : str
        The name of the script to load and exec.
    user_args : list of str
        Args to be passed to the user script.
    """

    sys.path.insert(0, os.path.dirname(script_name))

    sys.argv[:] = [script_name] + user_args

    with open(script_name, 'rb') as fp:
        code = compile(fp.read(), script_name, 'exec')

    globals_dict = {
        '__file__': script_name,
        '__name__': '__main__',
        '__package__': None,
        '__cached__': None,
    }

    exec(code, globals_dict)  # nosec: private, internal use only


_command_map = {
    'fortran_to_aviary': (_setup_F2A_parser, _exec_F2A,
                          "Converts legacy Fortran input decks to Aviary csv based decks"),
    'run_mission': (_setup_level1_parser, _exec_level1,
                    "Runs Aviary using a provided input deck"),
    'draw_mission': (_setup_flight_profile_parser, _exec_flight_profile,
                     "Allows users to draw a mission profile for use in Aviary."),
    'dashboard': (_dashboard_setup_parser, _dashboard_cmd,
                  "Run the Dashboard tool"),
    'hangar': (_setup_hangar_parser, _exec_hangar,
               "Allows users that pip installed Aviary to download models from the Aviary hangar"),
    'convert_engine': (_setup_EDC_parser, _exec_EDC, EDC_description),
    'convert_aero_table': (_setup_ATC_parser, _exec_ATC,
                           'Converts FLOPS- or GASP-formatted aero data files into Aviary csv format.'),
    'convert_prop_table': (_setup_PMC_parser, _exec_PMC,
                           'Converts GASP-formatted propeller map file into Aviary csv format.'),
    'plot_drag_polar': (_setup_plot_drag_polar_parser, _exec_plot_drag_polar, 'Plot a Drag Polar Graph using a provided polar data csv input'),
}


[docs] def aviary_cmd(): """ Run an 'aviary' sub-command or list help info for 'aviary' command or sub-commands. """ # pre-parse sys.argv to split between before and after '--' if '--' in sys.argv: idx = sys.argv.index('--') sys_args = sys.argv[:idx] user_args = sys.argv[idx + 1:] sys.argv[:] = sys_args else: user_args = [] parser = argparse.ArgumentParser(description='aviary Command Line Tools', # epilog='Use -h after any sub-command for sub-command help, ' # 'for example, "openmdao tree -h" for help on the "tree" ' # 'command. If using a tool on a script that takes its own ' # 'command line arguments, place those arguments after a "--". ' # 'For example: ' # '"openmdao n2 -o foo.html myscript.py -- -x --myarg=bar"' ) # Adding the --version argument parser.add_argument('--version', action='store_true', help='show version and exit') subs = parser.add_subparsers(title='Tools', metavar='', dest="subparser_name") for p, (parser_setup_func, executor, help_str) in sorted(_command_map.items()): subp = subs.add_parser(p, help=help_str) parser_setup_func(subp) subp.set_defaults(executor=executor) args = [a for a in sys.argv[1:] if not a.startswith('-')] # '--version', '--dependency_versions')] cmdargs = [a for a in sys.argv[1:] if a not in ('-h',)] if len(args) == 1 and len(user_args) == 0: if args[0] not in ('draw_mission', 'run_mission', 'plot_drag_polar'): parser.parse_args([args[0], '-h']) if not set(args).intersection(subs.choices) and len(args) == 1 and os.path.isfile(cmdargs[0]): _load_and_exec(args[0], user_args) else: options, unknown = parser.parse_known_args() # Check if --version was passed if options.version: print(f"Aviary version: {aviary.__version__}") return if unknown: msg = 'unrecognized arguments: ' + ', '.join(unknown) try: sub = subs.choices[options.subparser_name] except KeyError: parser.error(msg) else: print(sub.format_usage(), file=sys.stderr) print(msg, file=sys.stderr) parser.exit(2) if hasattr(options, 'executor'): options.executor(options, user_args) else: os.system('aviary -h')
if __name__ == '__main__': aviary_cmd()