def argument_preprocessor(args): """ Run verb and build_type plugin preprocessors on arguments. The preprocessors take in raw arguments and return potentially trimmed arguments and extra options to be added to the argparse NameSpace object. :param list args: list of arguments as str's :returns: tuple of left over arguments and dictionary of extra options :raises: SystemError if underlying assumptions are not met """ extras = {} # Extract make arguments args, make_flags = extract_argument_group(args, '--make-flags') # For each available build_type plugin, let it run the preprocessor for build_type in yield_supported_build_types(): build_type_impl = build_type.load()() args, tmp_extras = build_type_impl.argument_preprocessor(args) extras.update(tmp_extras) args = combine_make_flags(make_flags, args, extras) return args, extras
def prepare_arguments(parser, args): """Add parameters to argparse for the build verb and available plugins. After adding the generic verb arguments, this function loads all available build_type plugins and then allows the plugins to add additional arguments to the parser in a new :py:class:`argparse.ArgumentGroup` for that build_type. :param parser: ArgumentParser object to which arguments are added :type parser: :py:class:`argparse.ArgumentParser` :param list args: list of arguments as str's :returns: modified version of the original parser given :rtype: :py:class:`argparse.ArgumentParser` """ # Add verb arguments parser.add_argument('-C', '--directory', default=os.curdir, help="The base path of the workspace (default '%s')" % os.curdir) parser.add_argument( 'basepath', nargs='?', type=argparse_existing_dir, default=os.path.join(os.curdir, 'src'), help="Base path to the packages (default 'CWD/src')", ) build_pkg_add_arguments(parser) parser.add_argument( '--isolated', action='store_true', default=False, help='Use separate subfolders in the install space for each package', ) parser.add_argument( '--start-with', help='Start with a particular package', ) parser.add_argument( '--end-with', help='End with a particular package', ) parser.add_argument( '--only-package', '--only', help= 'Only process a particular package, implies --start-with <pkg> and --end-with <pkg>' ) # Allow all available build_type's to provide additional arguments for build_type in yield_supported_build_types(): build_type_impl = build_type.load()() group = parser.add_argument_group("'{0}' build_type options".format( build_type_impl.build_type)) call_prepare_arguments(build_type_impl.prepare_arguments, group, args) return parser
def prepare_arguments(parser, args): """Add parameters to argparse for the build verb and available plugins. After adding the generic verb arguments, this function loads all available build_type plugins and then allows the plugins to add additional arguments to the parser in a new :py:class:`argparse.ArgumentGroup` for that build_type. :param parser: ArgumentParser object to which arguments are added :type parser: :py:class:`argparse.ArgumentParser` :param list args: list of arguments as str's :returns: modified version of the original parser given :rtype: :py:class:`argparse.ArgumentParser` """ # Add verb arguments parser.add_argument( '-C', '--directory', default=os.curdir, help="The base path of the workspace (default '%s')" % os.curdir ) parser.add_argument( 'basepath', nargs='?', type=argparse_existing_dir, default=os.path.join(os.curdir, 'src'), help="Base path to the packages (default 'CWD/src')", ) build_pkg_add_arguments(parser) parser.add_argument( '--isolated', action='store_true', default=False, help='Use separate subfolders in the install space for each package', ) parser.add_argument( '--start-with', help='Start with a particular package', ) parser.add_argument( '--end-with', help='End with a particular package', ) parser.add_argument( '--only-package', '--only', help='Only process a particular package, implies --start-with <pkg> and --end-with <pkg>' ) # Allow all available build_type's to provide additional arguments for build_type in yield_supported_build_types(): build_type_impl = build_type.load()() group = parser.add_argument_group("'{0}' build_type options" .format(build_type_impl.build_type)) call_prepare_arguments(build_type_impl.prepare_arguments, group, args) return parser