o
    .&ßaÈB  ã                   @   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Zd dl	m
Z
 d dlmZmZ d dlmZ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 e  e¡ZeZG dd„ de ƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$dS )é    N)Úmodel)ÚOrderedDict©Úvalidate_parameters)ÚArgTableArgParser)Úunpack_argumentÚunpack_cli_arg)ÚCustomArgumentÚ!create_argument_model_from_schema)ÚOperationDocumentEventHandler)Ú
CLICommand)Ú	docevents)ÚHelpCommand)ÚSchemaTransformerc                   @   s   e Zd Zdd„ ZdS )Ú	_FromFilec                 O   s8   d| _ |rtjj|Ž | _ d|v r|d | _dS t| _dS )aS  
        ``**kwargs`` can contain a ``root_module`` argument
        that contains the root module where the file contents
        should be searched.  This is an optional argument, and if
        no value is provided, will default to ``awscli``.  This means
        that by default we look for examples in the ``awscli`` module.

        NÚroot_module)ÚfilenameÚosÚpathÚjoinr   Úawscli)ÚselfÚpathsÚkwargs© r   ú@/usr/lib/python3/dist-packages/awscli/customizations/commands.pyÚ__init__   s   	
z_FromFile.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   c                   @   sÎ   e Zd ZdZdZdZdZdZg Zg Z	e
Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZejd%d$„ ƒZd&S )'ÚBasicCommandz—Basic top level command with no subcommands.

    If you want to create a new command, subclass this and
    provide the values documented below.

    Úcommandnamezdescribe the commandÚ c                 C   s   || _ d | _d | _| g| _d S ©N)Ú_sessionÚ
_arg_tableÚ_subcommand_tableÚ_lineage)r   Úsessionr   r   r   r   z   s   zBasicCommand.__init__c                 C   s`  |   ¡ | _|  ¡ | _dd | j¡ }| jj|| j|| jd� t| j	| j
ƒ}| |¡\}}t|ƒ ¡ D ]N\}}d }	| dd¡}
|
| j	v rH| j	|
 }	t| jd| j|	|ƒ}|  |	|¡rz| jjdd| jf |	|d d�}|d urn|}nt|	|ƒ}|  |	j|¡ t|||ƒ q2t|d	ƒrŽ|  ||¡ d S t|d
d ƒd u r§|r¡tdd |¡ ƒ‚|  ||¡S | j
|j ||ƒS )Nz(before-building-argument-table-parser.%sÚ.)Úargument_tableÚargsr(   Ú_ú-Úcustomzprocess-cli-arg.%s.%s)Úcli_argumentÚvalueÚ	operationÚhelpÚ
subcommandzUnknown options: %sú,)Ú_build_subcommand_tabler&   Ú_build_arg_tabler%   r   Úlineage_namesr$   Úemitr   Ú	arg_tableÚsubcommand_tableÚparse_known_argsÚvarsÚitemsÚreplacer   ÚnameÚ_should_allow_plugins_overrideÚemit_first_non_none_responser   Ú_validate_value_against_schemaÚargument_modelÚsetattrÚhasattrÚ_display_helpÚgetattrÚ
ValueErrorÚ	_run_mainr3   )r   r+   Úparsed_globalsÚeventÚparserÚparsed_argsÚ	remainingÚkeyr0   r/   ÚxformedÚoverrider   r   r   Ú__call__€   sX   


ÿÿ

û
ý
ÿ
ÿzBasicCommand.__call__c                 C   s   t ||ƒ d S r#   r   )r   r   r0   r   r   r   rB   À   ó   z+BasicCommand._validate_value_against_schemac                 C   s   |r|j d ur|d urdS dS )NTF)rC   )r   Úparamr0   r   r   r   r@   Ã   s   z+BasicCommand._should_allow_plugins_overridec                 C   s   t dƒ‚)NrI   )ÚNotImplementedError)r   rM   rJ   r   r   r   rI   É   s   	zBasicCommand._run_mainc                 C   sZ   t ƒ }| jD ]}|d }|d }|| jƒ||< q| jjd| j || j| d� |  |¡ |S )Nr?   Úcommand_classzbuilding-command-table.%s)Úcommand_tabler(   Úcommand_object)r   ÚSUBCOMMANDSr$   r8   ÚNAMEÚ_add_lineage)r   r:   r3   Úsubcommand_nameÚsubcommand_classr   r   r   r5   Ô   s   
ý
z$BasicCommand._build_subcommand_tablec                 C   s   |   ¡ }|||ƒ d S r#   )Úcreate_help_command)r   rM   rJ   Úhelp_commandr   r   r   rF   á   s   zBasicCommand._display_helpc                 C   s&   i }| j r	|  ¡ }t| j| || jd�S )N)rW   r9   )rY   Úcreate_help_command_tableÚ	BasicHelpr$   r9   )r   Úcommand_help_tabler   r   r   r^   å   s   
ÿz BasicCommand.create_help_commandc                 C   s4   i }| j D ]}|d | jƒ||d < q|  |¡ |S )zj
        Create the command table into a form that can be handled by the
        BasicDocHandler.
        rV   r?   )rY   r$   r[   )r   ÚcommandsÚcommandr   r   r   r`   ì   s
   

z&BasicCommand.create_help_command_tablec                 C   sf   t ƒ }| jjd| j | jd� | jD ]}d|v r#t| d¡ƒ}||d< tdi |¤Ž}|||d < q|S )Nzbuilding-arg-table.%s)r9   ÚschemarC   r?   r   )r   r$   r8   rZ   Ú	ARG_TABLEr
   Úpopr	   )r   r9   Úarg_datarC   Úcustom_argumentr   r   r   r6   ÷   s   ÿ
ÿzBasicCommand._build_arg_tablec                 C   s$   |D ]}|| }| j |g |_ qd S r#   )Úlineage)r   rW   rd   Úcommand_objr   r   r   r[     s   þzBasicCommand._add_lineagec                 C   ó   | j d u r
|  ¡ | _ | j S r#   )r%   r6   ©r   r   r   r   r9     ó   

zBasicCommand.arg_tablec                 C   rl   r#   )r&   r5   rm   r   r   r   r:     rn   zBasicCommand.subcommand_tablec                 K   s   | |ƒ|| j < d S r#   ©rZ   )ÚclsrW   r(   r   r   r   r   Úadd_command  s   zBasicCommand.add_commandc                 C   ó   | j S r#   ro   rm   r   r   r   r?     ó   zBasicCommand.namec                 C   rr   r#   ©r'   rm   r   r   r   rj   !  rs   zBasicCommand.lineagec                 C   s
   || _ d S r#   rt   )r   r0   r   r   r   rj   %  ó   
N)r   r   r   Ú__doc__rZ   ÚDESCRIPTIONÚSYNOPSISÚEXAMPLESrf   rY   r   Ú	FROM_FILEr   rR   rB   r@   rI   r5   rF   r^   r`   r6   r[   Úpropertyr9   r:   Úclassmethodrq   r?   rj   Úsetterr   r   r   r   r    *   s@    
	@




r    c                       sl   e Zd Z	d‡ fdd„	Zedd„ ƒZedd„ ƒZedd	„ ƒZed
d„ ƒZedd„ ƒZ	dd„ Z
dd„ Z‡  ZS )ra   Nc                    sD   t t| ƒ ||||¡ |d u rt}|| _|j| _|j| _|j	| _
d S r#   )Úsuperra   r   ÚBasicDocHandlerÚEventHandlerClassrw   Ú_descriptionrx   Ú	_synopsisry   Ú	_examples)r   r(   rX   rW   r9   Úevent_handler_class©Ú	__class__r   r   r   ,  s   ÿzBasicHelp.__init__c                 C   s   | j jS r#   )ÚobjrZ   rm   r   r   r   r?   <  s   zBasicHelp.namec                 C   ó
   |   d¡S )Nr�   ©Ú_get_doc_contentsrm   r   r   r   Údescription@  ru   zBasicHelp.descriptionc                 C   rˆ   )Nr‚   r‰   rm   r   r   r   ÚsynopsisD  ru   zBasicHelp.synopsisc                 C   rˆ   )Nrƒ   r‰   rm   r   r   r   ÚexamplesH  ru   zBasicHelp.examplesc                 C   s   d  | jj¡S )Nr)   )r   r‡   r7   rm   r   r   r   Úevent_classL  s   zBasicHelp.event_classc                 C   sœ   t | |ƒ}t|tjƒrL|jd ur|j}n
tj | j|d ¡}|j	}tj tj 
tj |j¡¡d|¡}t|ƒ�}| ¡ W  d   ƒ S 1 sEw   Y  d S |S )Nz.rstr�   )rG   Ú
isinstancer    rz   r   r   r   r   r?   r   ÚabspathÚdirnameÚ__file__Ú_openÚread)r   Ú	attr_namer0   Útrailing_pathr   Údoc_pathÚfr   r   r   rŠ   P  s   

þ
$ÿzBasicHelp._get_doc_contentsc                 C   s6   |   | ¡}t | j| ¡ | j | j ¡ ¡ | ¡  d S r#   )	r€   r   Úgenerate_eventsr(   ÚrendererÚrenderÚdocÚgetvalueÚ
unregister)r   r+   rJ   Úinstancer   r   r   rR   `  s   
zBasicHelp.__call__r#   )r   r   r   r   r{   r?   r‹   rŒ   r�   rŽ   rŠ   rR   Ú__classcell__r   r   r…   r   ra   *  s    ÿ




ra   c                       st   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Zdd„ Z‡ fd	d
„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Z‡  ZS )r   c                    s   t t| ƒ |¡ |j| _d S r#   )r~   r   r   rœ   )r   r_   r…   r   r   r   m  s   zBasicDocHandler.__init__c                 K   s6   | j j d¡ | j  |j¡ | j j ¡  |  |¡ d S )NÚDescription)rœ   ÚstyleÚh2Úwriter‹   Únew_paragraphÚ_add_top_level_args_reference©r   r_   r   r   r   r   Údoc_descriptionq  s   zBasicDocHandler.doc_descriptionc                    sP   |j stt| ƒjdd|i|¤Ž d S | jj d¡ | jj ¡  | j |j ¡ d S )Nr_   ÚSynopsisr   )	rŒ   r~   r   Údoc_synopsis_startrœ   r¢   r£   Ústart_codeblockÚwritelnr§   r…   r   r   rª   w  s   ÿ
ÿz"BasicDocHandler.doc_synopsis_startc                 K   sÎ   |j sd|j}|j| }|j r|j }n?|j| jv r6|j| jv r d S d dd„ | j|j D ƒ¡}| j |j¡ n|jdkrAd|j	 }n|j
dkrLd|j	 }nd|j	 }|js[|js[d	| }| d| ¡ d S 	 d S )
Nz | c                 S   s   g | ]}|j ‘qS r   )Úcli_name)Ú.0Úar   r   r   Ú
<listcomp>‹  s    z7BasicDocHandler.doc_synopsis_option.<locals>.<listcomp>Úbooleanz%sú+z%s <value> [<value>...]z
%s <value>z[%s])rŒ   rœ   r9   Ú
group_nameÚ_arg_groupsÚ_documented_arg_groupsr   ÚappendÚcli_type_namer­   ÚnargsÚrequiredÚpositional_argr¬   )r   Úarg_namer_   r   rœ   ÚargumentÚ
option_strr   r   r   Údoc_synopsis_option€  s.   

ÿÿ


z#BasicDocHandler.doc_synopsis_optionc                    s4   |j stt| ƒjdd|i|¤Ž d S | jj ¡  d S )Nr_   r   )rŒ   r~   r   Údoc_synopsis_endrœ   r¢   Úend_codeblockr§   r…   r   r   r¿   �  s   ÿ
ÿz BasicDocHandler.doc_synopsis_endc                 K   s*   |j r| jj d¡ | j |j ¡ d S d S )NÚExamples)r�   rœ   r¢   r£   r¤   r§   r   r   r   Údoc_examples¤  s   þzBasicDocHandler.doc_examplesc                 K   s*   |j r|j}|j d¡ |j ¡  d S d S )NzAvailable Commands)rW   rœ   r¢   r£   Útoctree)r   r_   r   rœ   r   r   r   Údoc_subitems_start©  s
   ýz"BasicDocHandler.doc_subitems_startc                 K   s    |j r|j}|j |¡ d S d S r#   )rW   rœ   r¢   Útocitem)r   Úcommand_namer_   r   rœ   r   r   r   Údoc_subitem¯  s   þzBasicDocHandler.doc_subitemc                 K   ó   d S r#   r   r§   r   r   r   Údoc_subitems_end´  ó   z BasicDocHandler.doc_subitems_endc                 K   rÈ   r#   r   )r   r_   Ú
event_namer   r   r   r   Ú
doc_output·  rÊ   zBasicDocHandler.doc_outputc                 K   s   |   |¡ d S r#   )r¦   r§   r   r   r   Údoc_options_endº  rS   zBasicDocHandler.doc_options_end)r   r   r   r   r¨   rª   r¾   r¿   rÂ   rÄ   rÇ   rÉ   rÌ   rÍ   r    r   r   r…   r   r   k  s    	r   )%Úloggingr   Úbotocorer   Úbotocore.compatr   Úbotocore.validater   r   Úawscli.argparserr   Úawscli.argprocessr   r   Úawscli.argumentsr	   r
   Úawscli.clidocsr   Úawscli.clidriverr   Úawscli.bcdocr   Úawscli.helpr   Úawscli.schemar   Ú	getLoggerr   ÚLOGÚopenr“   Úobjectr   r    ra   r   r   r   r   r   Ú<module>   s,    
  A