def parse_args()

in critter/stack.py [0:0]


    def parse_args(self, args):
        parser = argparse.ArgumentParser(description=f"critter {__version__} - AWS Config Rule Integration TesTER")

        parser.add_argument(
            "template",
            metavar="TEMPLATE",
            help="CloudFormation template(s) to test already deployed Config rule",
        )

        parser.add_argument(
            "--log-level",
            dest="log_level",
            help="Specify log level - 'debug' will include boto3 debug logs",
            default="info",
            choices=["debug", "info", "warning"],
        )

        # TODO: this might make more sense in a test stack output
        parser.add_argument(
            self.TRIGGER_RULE_EVALUATION_ARG,
            help=(
                "Trigger Config rule evaluation after CloudFormation stack deployment. Useful for "
                "periodic evaluation rules. Also ensures the rule evaluation occured after stack deployment."
            ),
            dest="trigger_rule_evaluation",
            action="store_true",
        )
        parser.set_defaults(trigger_rule_evaluation=False)

        # TODO: --stack-name-prefix argument

        parser.add_argument(
            "--stack-name",
            metavar="STACK-NAME",
            help="CloudFormation stack name (default is generated from TEMPLATE file name)",
        )

        parser.add_argument(
            "--stack-tags",
            metavar='\'[{"Key": "TagKey", "Value": "TagValue"}, ...]\'',
            type=json.loads,
            default="[]",
            help="Tags to associate with the CloudFormation stack formatted as a JSON string",
        )

        parser.add_argument(
            "--capabilities",
            default=[],
            metavar="CAPABILITY",
            nargs="+",
            help="CloudFormation capabilities needed to deploy the stack (i.e. CAPABILITY_IAM, CAPABILITY_NAMED_IAM)",
        )

        parser.add_argument(
            self.DELETE_STACK_ARG,
            help=(
                "Test outcome that should trigger CloudFormation stack delete "
                f"(default: {self.DELETE_STACK_DEFAULT})"
            ),
            default=self.DELETE_STACK_DEFAULT,
            choices=self.DELETE_STACK_CHOICES,
        )
        parsed_args = parser.parse_args(args)

        logger.setLevel(parsed_args.log_level.upper())

        self.template_file = parsed_args.template
        template_filename = os.path.splitext(os.path.basename(self.template_file))[0]
        with open(self.template_file) as f:
            self.template_body = f.read()

        if parsed_args.stack_name:
            self.stack_name = parsed_args.stack_name
        else:
            self.stack_name = "Critter-" + template_filename.replace("_", "-")

        if parsed_args.delete_stack not in self.DELETE_STACK_CHOICES:
            raise Exception(
                f"Error - delete_stack must be one of {self.DELETE_STACK_CHOICES}, "
                f"received '{parsed_args.delete_stack}'"
            )
        self.delete_stack = parsed_args.delete_stack

        if parsed_args.stack_tags:
            self.stack_tags = parsed_args.stack_tags
        else:
            self.stack_tags = [
                {"Key": "ConfigRuleTesting", "Value": "True"},
                {"Key": "Critter", "Value": "True"},
            ]

        self.cfn_capabilities = parsed_args.capabilities
        # TODO: default trigger_rule_evaluation to True if rule detected as periodic evaluation only
        #       or if stack already exists
        self.trigger_rule_evaluation = parsed_args.trigger_rule_evaluation