Source code for snakemake.common.argparse

import argparse

import configargparse


[docs] class ArgumentParser(configargparse.ArgumentParser): def add_argument( self, *args, parse_func=None, **kwargs, ): if parse_func is not None: register_parser_action(parse_func, kwargs) super().add_argument(*args, **kwargs) def add_argument_group(self, *args, **kwargs): group = ArgumentGroup(self, *args, **kwargs) self._action_groups.append(group) return group
[docs] class ArgumentGroup(argparse._ArgumentGroup): def add_argument( self, *args, parse_func=None, **kwargs, ): if parse_func is not None: register_parser_action(parse_func, kwargs) super().add_argument(*args, **kwargs)
[docs] def register_parser_action(parse_func, kwargs): if "action" in kwargs: raise ValueError( "Cannot specify action if parser argument is provided to add_argument." ) class ParserAction(argparse._StoreAction): def __init__(self, *args, **kwargs): if "parser" in kwargs: del kwargs["parse_func"] super().__init__(*args, **kwargs) def __call__( self, parser, namespace, values, option_string=None, ): parsed = parse_func(values) setattr(namespace, self.dest, parsed) kwargs["action"] = ParserAction