o
    øsßaÜ  ã                   @   s�   d dl Z d dlZd dlmZ d dlmZ dZdZde ZG dd„ de j	ƒZ
G d	d
„ d
e jƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    N)Úsix)Úget_close_matchesa  Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.htmlzbTo see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
zQ%s

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
c                       sD   e Zd ZdZ‡ fdd„Zd
dd„Zedd„ ƒZejd	d„ ƒZ‡  Z	S )ÚCommandActionzÀCustom action for CLI command arguments

    Allows the choices for the argument to be mutable. The choices
    are dynamically retrieved from the keys of the referenced command
    table
    c                    s*   || _ tt| ƒj||fd| ji|¤Ž d S )NÚchoices)Úcommand_tableÚsuperr   Ú__init__r   )ÚselfÚoption_stringsÚdestr   Úkwargs©Ú	__class__© ú2/usr/lib/python3/dist-packages/awscli/argparser.pyr   1   s   
ÿÿ
ÿzCommandAction.__init__Nc                 C   s   t || j|ƒ d S ©N)Úsetattrr   )r	   ÚparserÚ	namespaceÚvaluesÚoption_stringr   r   r   Ú__call__7   s   zCommandAction.__call__c                 C   s   t | j ¡ ƒS r   )Úlistr   Úkeys)r	   r   r   r   r   :   s   zCommandAction.choicesc                 C   s   d S r   r   )r	   Úvalr   r   r   r   >   s   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úpropertyr   ÚsetterÚ__classcell__r   r   r   r   r   *   s    

r   c                       s0   e Zd ZejZdZdd„ Zd‡ fdd„	Z‡  Z	S )ÚCLIArgParseré   c           
      C   sÐ   |j durd||j vrfdg}tt|j ƒƒdd| j… D ] }g }|j ||| j … D ]	}| d| ¡ q(| d |¡¡ qt||j dd�}|r[d| g}|D ]	}	| d|	 ¡ qL| |¡ t 	|d	 |¡¡‚dS dS )
z¿
        It's probably not a great idea to override a "hidden" method
        but the default behavior is pretty ugly and there doesn't
        seem to be any other way to change it.
        Nz#Invalid choice, valid choices are:
z%-40sz | gš™™™™™é?)Úcutoffz'

Invalid choice: %r, maybe you meant:
z  * %sÚ
)
r   ÚrangeÚlenÚChoicesPerLineÚappendÚjoinr   ÚextendÚargparseÚArgumentError)
r	   ÚactionÚvalueÚmsgÚiÚcurrentÚchoiceÚpossibleÚextraÚwordr   r   r   Ú_check_valueN   s   

ózCLIArgParser._check_valueNc           
         sº   t t| ƒ ||¡\}}ttjddƒ}|d u rd}t|ƒ ¡ D ]:\}}t|t	j
ƒr2t||| |¡ƒ qt|tƒrXg }|D ]}	t|	t	j
ƒrL| |	 |¡¡ q;| |	¡ q;t|||ƒ q||fS )NÚencodingzutf-8)r   r"   Úparse_known_argsÚgetattrÚsysÚstdinÚvarsÚitemsÚ
isinstancer   Úbinary_typer   Údecoder   r)   )
r	   Úargsr   ÚparsedÚ	remainingÚterminal_encodingÚargr/   ÚencodedÚvr   r   r   r9   d   s    
€zCLIArgParser.parse_known_argsr   )
r   r   r   r,   ÚRawTextHelpFormatterÚ	Formatterr(   r7   r9   r!   r   r   r   r   r"   G   s
    r"   c                       s6   e Zd ZejZ	d‡ fdd„	Zdd„ Zdd„ Z‡  Z	S )	ÚMainArgParserNc                    s0   t t| ƒj| jdd|t|d� |  |||¡ d S )NFÚresolve)Úformatter_classÚadd_helpÚconflict_handlerÚdescriptionÚusageÚprog)r   rK   r   rJ   ÚUSAGEÚ_build)r	   r   Úversion_stringrP   Úargument_tablerR   r   r   r   r   }   s   
úzMainArgParser.__init__c                 C   s"   d}t |ƒD ]}|d| 7 }q|S )NÚ z* %s
)Úsorted)r	   r   Úhelp_strr3   r   r   r   Ú_create_choice_helpˆ   s   z!MainArgParser._create_choice_helpc                 C   sB   |D ]}|| }|  | ¡ q| jdd|dd� | jdt|d� d S )Nz	--versionÚversionz Display the version of this tool)r.   r[   ÚhelpÚcommand©r.   r   ©Úadd_to_parserÚadd_argumentr   )r	   r   rU   rV   Úargument_nameÚargumentr   r   r   rT   Ž   s   þ
ÿzMainArgParser._buildr   )
r   r   r   r,   rI   rJ   r   rZ   rT   r!   r   r   r   r   rK   z   s    ÿrK   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚServiceArgParserc                    s.   t t| ƒjtjddtd� |  |¡ || _d S )NFrL   )rM   rN   rO   rQ   )r   rd   r   r,   rI   rS   rT   Ú_service_name)r	   Úoperations_tableÚservice_namer   r   r   r   ›   s   
ü

zServiceArgParser.__init__c                 C   s   | j dt|d� d S )NÚ	operationr^   )ra   r   )r	   rf   r   r   r   rT   ¤   s   
ÿzServiceArgParser._build)r   r   r   r   rT   r!   r   r   r   r   rd   ™   s    	rd   c                       s8   e Zd ZdZd	‡ fdd„	Zdd„ Zd	‡ fdd„	Z‡  ZS )
ÚArgTableArgParserz*CLI arg parser based on an argument table.Nc                    s6   t t| ƒj| jdtdd� |d u ri }|  ||¡ d S )NFrL   )rM   rN   rQ   rO   )r   ri   r   rJ   rS   rT   )r	   rV   r   r   r   r   r   ¬   s   
üzArgTableArgParser.__init__c                 C   s:   |D ]}|| }|  | ¡ q|r| jdt|dd� d S d S )NÚ
subcommandú?)r.   r   Únargsr_   )r	   rV   r   Úarg_namerc   r   r   r   rT   ¹   s   
ÿÿzArgTableArgParser._buildc                    s@   t |ƒdkr|d dkrt ¡ }d|_|g fS tt| ƒ ||¡S )Né   r   r\   )r'   r,   Ú	Namespacer\   r   ri   r9   )r	   rB   r   r   r   r   r9   Á   s   
ÿz"ArgTableArgParser.parse_known_argsr   )r   r   r   r   r   rT   r9   r!   r   r   r   r   ri   ©   s
    ri   )r,   r;   Úawscli.compatr   Údifflibr   ÚAWS_CLI_V2_MESSAGEÚ
HELP_BLURBrS   ÚActionr   ÚArgumentParserr"   rK   rd   ri   r   r   r   r   Ú<module>   s"   ÿ	ÿýÿ3