o
    .&ßa«  ã                   @   sŒ   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ dd	„ Zd
d„ ZG dd„ deƒZG dd„ de	ƒZdS )é    N)Ú
xform_name)ÚStubber)ÚArgumentGenerator)ÚCLIOperationCaller)ÚOverrideRequiredArgsArgument)Újson_encoderc                 C   s   |   dt¡ d S )Nzbuilding-argument-table)ÚregisterÚadd_generate_skeleton)Úcli© r   úK/usr/lib/python3/dist-packages/awscli/customizations/generatecliskeleton.pyÚregister_generate_cli_skeleton   s   r   c                 K   s$   d|vrt | |ƒ}| |¡ d S d S )NÚoutfile)ÚGenerateCliSkeletonArgumentÚadd_to_arg_table)ÚsessionÚoperation_modelÚargument_tableÚkwargsÚgenerate_cli_skeleton_argumentr   r   r   r	      s   ÿýr	   c                       sT   e Zd ZdZddddddgdœZ‡ fdd	„Z‡ fd
d„Z‡ fdd„Zdd„ Z‡  Z	S )r   zøThis argument writes a generated JSON skeleton to stdout

    The argument, if present in the command line, will prevent the intended
    command from taking place. Instead, it will generate a JSON skeleton and
    print it to standard output.
    zgenerate-cli-skeletonaJ  Prints a JSON skeleton to standard output without sending an API request. If provided with no value or the value ``input``, prints a sample input JSON that can be used as an argument for ``--cli-input-json``. If provided with the value ``output``, it validates the command inputs and returns a sample output JSON for that command.ú?ÚinputÚoutput)ÚnameÚ	help_textÚnargsÚconstÚchoicesc                    s   t t| ƒ |¡ || _d S )N)Úsuperr   Ú__init__Ú_operation_model)Úselfr   r   ©Ú	__class__r   r   r   <   s   
z$GenerateCliSkeletonArgument.__init__c                    s"   | j  d| j¡ tt| ƒ ¡  d S )Nzcalling-command.*)Ú_sessionr   Úgenerate_json_skeletonr   r   Ú_register_argument_action)r!   r"   r   r   r&   @   s   ÿz5GenerateCliSkeletonArgument._register_argument_actionc                    sl   d| j  }||v r4| |¡}z||d  dkrW d S W n	 ty$   Y nw tt| ƒj||fi |¤Ž d S d S )Nz--é   r   )r   ÚindexÚ
IndexErrorr   r   Úoverride_required_args)r!   r   Úargsr   Úarg_nameÚarg_locationr"   r   r   r*   E   s    

ÿÿ
ÿ
ÿõz2GenerateCliSkeletonArgument.override_required_argsc                 K   s”   t |dd ƒrH|jdk}| j}|r"|jj}|j}t| jƒ ||||¡S t	ƒ }	|j
}
|
d u r/i }n|	 |
¡}tj tj|dtd�¡ tj d¡ dS d S )NÚgenerate_cli_skeletonr   é   )ÚindentÚdefaultÚ
r   )Úgetattrr.   r    Úservice_modelÚservice_namer   ÚStubbedCLIOperationCallerr$   Úinvoker   Úinput_shapeÚgenerate_skeletonÚsysÚstdoutÚwriteÚjsonÚdumpsr   )r!   Úcall_parametersÚparsed_argsÚparsed_globalsr   Ú
for_outputr   r5   Úoperation_nameÚargument_generatorÚoperation_input_shapeÚskeletonr   r   r   r%   U   s.   

þÿÿåz2GenerateCliSkeletonArgument.generate_json_skeleton)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚARG_DATAr   r&   r*   r%   Ú__classcell__r   r   r"   r   r   &   s    ôr   c                   @   s   e Zd ZdZdd„ ZdS )r6   z­A stubbed CLIOperationCaller

    It generates a fake response and uses the response and provided parameters
    to make a stubbed client call for an operation command.
    c           
      C   s‚   t |ƒ}|jj |¡}i }|jrtdd�}| |j¡}t|ƒ�}	|	 ||¡ t	||ƒdi |¤ŽW  d   ƒ S 1 s:w   Y  d S )NT)Úuse_member_namesr   )
r   Úmetar4   r   Úoutput_shaper   r9   r   Úadd_responser3   )
r!   ÚclientrC   Ú
parametersrA   Úmethod_namer   Úfake_responserD   Ústubberr   r   r   Ú_make_client_call{   s   ÿ
ÿ
$þz+StubbedCLIOperationCaller._make_client_callN)rG   rH   rI   rJ   rV   r   r   r   r   r6   u   s    r6   )r=   r:   Úbotocorer   Úbotocore.stubr   Úbotocore.utilsr   Úawscli.clidriverr   Úawscli.customizations.argumentsr   Úawscli.utilsr   r   r	   r   r6   r   r   r   r   Ú<module>   s   	O