def parse_args()

in src/aws_encryption_sdk_cli/internal/arg_parsing.py [0:0]


def parse_args(raw_args=None):
    # type: (Optional[List[str]]) -> argparse.Namespace
    """Handles argparse to collect the needed input values.

    :param list raw_args: List of arguments
    :returns: parsed arguments
    :rtype: argparse.Namespace
    """
    parser = _build_parser()
    parsed_args = parser.parse_args(args=raw_args)

    try:
        if parsed_args.dummy_redirect is not None:
            raise ParameterParseError(
                'Found invalid argument "{actual}". Did you mean "-{actual}"?'.format(actual=parsed_args.dummy_redirect)
            )

        # We add the 'required_encryption_context_keys' to arg parse, even though it is not
        # meant to be used by customers, so that we can  pass the parsed arguments around internally
        if parsed_args.required_encryption_context_keys is not None:
            raise ParameterParseError("--required-encryption-context-keys cannot be manually provided")

        if parsed_args.overwrite_metadata:
            parsed_args.metadata_output.force_overwrite()

        parsed_args.wrapping_keys = _process_wrapping_key_provider_configs(
            parsed_args.wrapping_keys, parsed_args.action
        )

        # mypy does not appear to understand nargs="+" behavior
        parsed_args.encryption_context, parsed_args.required_encryption_context_keys = _process_encryption_context(
            action=parsed_args.action,
            raw_encryption_context=parsed_args.encryption_context,
            raw_required_encryption_context_keys=parsed_args.required_encryption_context_keys,  # type: ignore
        )

        if parsed_args.caching is not None:
            parsed_args.caching = _process_caching_config(parsed_args.caching)
    except ParameterParseError as error:
        parser.error(*error.args)

    return parsed_args