o
    !dC                     @   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   Busr/lib/python3.10/site-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 )'BasicCommandzBasic top level command with no subcommands.

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

    Z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   sb  |   | _|  | _dd| j }| jj|| j|| j|d t| j	| j
}||\}}t| D ]N\}}d }	|dd}
|
| j	v rI| j	|
 }	t| jd| j|	|}| |	|r{| jjdd| jf |	|d d}|d uro|}nt|	|}| |	j| t||| q3t|d	r| || d S t|d
d d u r|rtdd| | ||S | j
|j ||S )Nz(before-building-argument-table-parser.%s.)Zargument_tableargsr'   parsed_globals_-Zcustomzprocess-cli-arg.%s.%s)cli_argumentvalueZ	operationhelp
subcommandzUnknown options: %s,)_build_subcommand_tabler%   _build_arg_tabler$   r   lineage_namesr#   emitr   	arg_tablesubcommand_tableZparse_known_argsvarsitemsreplacer   name_should_allow_plugins_overrideZemit_first_non_none_responser   _validate_value_against_schemaargument_modelsetattrhasattr_display_helpgetattr
ValueError	_run_mainr0   )r   r)   r*   eventparserparsed_args	remainingkeyr.   r-   Zxformedoverrider   r   r   __call__   sX   







zBasicCommand.__call__c                 C   s   t || d S r"   r   )r   r   r.   r   r   r   r=      s   z+BasicCommand._validate_value_against_schemac                 C   s   |r|j d ur|d urdS dS )NTF)r>   )r   paramr.   r   r   r   r<      s   z+BasicCommand._should_allow_plugins_overridec                 C   s   t d)NrD   )NotImplementedError)r   rG   r*   r   r   r   rD      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#   r5   NAME_add_lineage)r   r7   r0   Zsubcommand_nameZsubcommand_classr   r   r   r2      s   

z$BasicCommand._build_subcommand_tablec                 C   s   |   }||| d S r"   )create_help_command)r   rG   r*   help_commandr   r   r   rA      s   zBasicCommand._display_helpc                 C   s&   i }| j r	|  }t| j| || jdS )N)rO   r6   )rQ   create_help_command_table	BasicHelpr#   r6   )r   Zcommand_help_tabler   r   r   rT      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.
        rN   r;   )rQ   r#   rS   )r   commandscommandr   r   r   rV      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)r6   Zschemar>   r;   r   )r   r#   r5   rR   	ARG_TABLEr
   popr	   )r   r6   Zarg_datar>   Zcustom_argumentr   r   r   r3      s   
zBasicCommand._build_arg_tablec                 C   s$   |D ]}|| }| j |g |_ qd S r"   )lineage)r   rO   rY   command_objr   r   r   rS     s   zBasicCommand._add_lineagec                 C      | j d u r
|  | _ | j S r"   )r$   r3   r   r   r   r   r6        

zBasicCommand.arg_tablec                 C   r^   r"   )r%   r2   r_   r   r   r   r7     r`   zBasicCommand.subcommand_tablec                 K   s   | ||| j < d S r"   rR   )clsrO   r'   r   r   r   r   add_command  s   zBasicCommand.add_commandc                 C      | j S r"   ra   r_   r   r   r   r;        zBasicCommand.namec                 C   rd   r"   r&   r_   r   r   r   r\   !  re   zBasicCommand.lineagec                 C   s
   || _ d S r"   rf   )r   r.   r   r   r   r\   %     
N)r   r   r   __doc__rR   DESCRIPTIONSYNOPSISEXAMPLESrZ   rQ   r   	FROM_FILEr   rK   r=   r<   rD   r2   rA   rT   rV   r3   rS   propertyr6   r7   classmethodrc   r;   r\   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 )rW   Nc                    sD   t t| |||| |d u rt}|| _|j| _|j| _|j	| _
d S r"   )superrW   r   BasicDocHandlerEventHandlerClassri   _descriptionrj   	_synopsisrk   	_examples)r   r'   rP   rO   r6   Zevent_handler_class	__class__r   r   r   ,  s   zBasicHelp.__init__c                 C   s   | j jS r"   )objrR   r_   r   r   r   r;   <  s   zBasicHelp.namec                 C   
   |  dS )Nrs   _get_doc_contentsr_   r   r   r   description@  rg   zBasicHelp.descriptionc                 C   ry   )Nrt   rz   r_   r   r   r   synopsisD  rg   zBasicHelp.synopsisc                 C   ry   )Nru   rz   r_   r   r   r   examplesH  rg   zBasicHelp.examplesc                 C   s   d | jjS )Nr(   )r   rx   r4   r_   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~   )rB   
isinstancer    rl   r   r   r   r   r;   r   abspathdirname__file___openread)r   	attr_namer.   Ztrailing_pathr   Zdoc_pathfr   r   r   r{   P  s   


$zBasicHelp._get_doc_contentsc                 C   s6   |  | }t| j|  | j| j  |  d S r"   )	rr   r   Zgenerate_eventsr'   Zrendererrenderdocgetvalue
unregister)r   r)   r*   instancer   r   r   rK   `  s   
zBasicHelp.__call__r"   )r   r   r   r   rm   r;   r|   r}   r~   r   r{   rK   __classcell__r   r   rv   r   rW   *  s    




rW   c                       sx   e Zd Z fddZdd Z fddZdd Z fd	d
Z fddZdd Z	dd Z
dd Zdd Zdd Z  ZS )rq   c                    s   t t| | |j| _d S r"   )rp   rq   r   r   )r   rU   rv   r   r   r   m  s   zBasicDocHandler.__init__c                 K   s,   | j jd | j |j | j j  d S )NDescription)r   styleh2writer|   Znew_paragraphr   rU   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 )NrU   ZSynopsisr   )	r}   rp   rq   doc_synopsis_startr   r   r   Zstart_codeblockwritelnr   rv   r   r   r   v  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>Zbooleanz%s+z%s <value> [<value>...]z
%s <value>z[%s])r}   r   r6   Z
group_nameZ_arg_groupsZ_documented_arg_groupsr   appendZcli_type_namer   nargsrequiredZpositional_argr   )r   Zarg_namerU   r   r   ZargumentZ
option_strr   r   r   doc_synopsis_option  s.   




z#BasicDocHandler.doc_synopsis_optionc                    s:   |j s|jstt| jdd|i| d S | jj  d S )NrU   r   )r}   rO   rp   rq   doc_synopsis_endr   r   Zend_codeblockr   rv   r   r   r     s   
z BasicDocHandler.doc_synopsis_endc                    s"   |j st j|fi | d S d S r"   )rO   rp   doc_global_optionr   rv   r   r   r     s   z!BasicDocHandler.doc_global_optionc                 K   s*   |j r| jjd | j|j  d S d S )NZ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)rO   r   r   r   Ztoctree)r   rU   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"   )rO   r   r   Ztocitem)r   command_namerU   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   rU   Z
event_namer   r   r   r   
doc_output  r   zBasicDocHandler.doc_output)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv   r   rq   k  s    	rq   )%loggingr   Zbotocorer   Zbotocore.compatr   Zbotocore.validater   r   Zawscli.argparserr   Zawscli.argprocessr   r   Zawscli.argumentsr	   r
   Zawscli.clidocsr   Zawscli.clidriverr   Zawscli.bcdocr   Zawscli.helpr   Zawscli.schemar   	getLoggerr   ZLOGopenr   objectr   r    rW   rq   r   r   r   r   <module>   s,    
  A