o
    2&ßaû+  ã                   @   sÒ   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ e  e¡Zd	d
„ 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G dd„ deƒZdd„ ZdS )é    N)Újson)Úset_value_from_jmespath)ÚPageIterator)Ú
MultiTableÚStylerÚColorizedStyler)Útext)Úcompat)Újson_encoderc                 C   s
   t | tƒS ©N)Ú
isinstancer   )Úresponse© r   ú2/usr/lib/python3/dist-packages/awscli/formatter.pyÚis_response_paginated   ó   
r   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	Formatterc                 C   s
   || _ d S r   )Ú_args)ÚselfÚargsr   r   r   Ú__init__"   r   zFormatter.__init__c                 C   sF   d|vrd|v r!d|d v r|d d }t  d|¡ |d= d S d S d S )NÚErrorsÚResponseMetadataÚ	RequestIdzRequestId: %s)ÚLOGÚdebug)r   Úresponse_dataÚ
request_idr   r   r   Ú_remove_request_id%   s   
ûzFormatter._remove_request_idc                 C   s   t  ¡ S r   )r	   Úget_stdout_text_writer©r   r   r   r   Ú_get_default_stream1   s   zFormatter._get_default_streamc                 C   s$   z|  ¡  W d S  ty   Y d S w r   )ÚflushÚIOError)r   Ústreamr   r   r   Ú_flush_stream4   s
   ÿzFormatter._flush_streamN)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r%   r   r   r   r   r   !   s
    r   c                   @   s   e Zd Zddd„ZdS )ÚFullyBufferedFormatterNc              
   C   s°   |d u r|   ¡ }t|ƒr| ¡ }n|}|  |¡ | jjd ur%| jj |¡}z,z	|  |||¡ W n tyA } zW Y d }~nd }~ww W |  	|¡ d S W |  	|¡ d S |  	|¡ w r   )
r!   r   Úbuild_full_resultr   r   ÚqueryÚsearchÚ_format_responser#   r%   )r   Úcommand_namer   r$   r   Úer   r   r   Ú__call__<   s$   

€ýÿüzFullyBufferedFormatter.__call__r   )r&   r'   r(   r0   r   r   r   r   r)   ;   s    r)   c                   @   s   e Zd Zdd„ ZdS )ÚJSONFormatterc                 C   s.   |i krt j||dtdd� | d¡ d S d S )Né   F)ÚindentÚdefaultÚensure_asciiÚ
)r   Údumpr
   Úwrite©r   r.   r   r$   r   r   r   r-   Y   s   ÿýzJSONFormatter._format_responseN)r&   r'   r(   r-   r   r   r   r   r1   W   s    r1   c                       s\   e Zd ZdZd‡ fdd„	Zdd„ Zddd	„Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Z‡  ZS )ÚTableFormatterzÞPretty print a table from a given response.

    The table formatter is able to take any generic response
    and generate a pretty printed table.  It does this without
    using the output definition from the model.

    Nc                    s‚   t t| ƒ |¡ |jdkrtddd�| _d S |jdkr(tƒ }tdd|d�| _d S |jdkr:tƒ }tdd|d�| _d S td|j ƒ‚)	NÚautoFú|)Úinitial_sectionÚcolumn_separatorÚoff)r=   r>   ÚstylerÚonzUnknown color option: %s)	Úsuperr:   r   Úcolorr   Útabler   r   Ú
ValueError)r   r   rD   r@   ©Ú	__class__r   r   r   l   s    
ÿ
ÿ
ÿzTableFormatter.__init__c                 C   s8   |   ||¡rz	| j |¡ W d S  ty   Y d S w d S r   )Ú_build_tablerD   Úrenderr#   r9   r   r   r   r-   |   s   üýzTableFormatter._format_responser   c                    s¸   |sdS |d urˆ j j||d� t|tƒrOt|d tƒr$ˆ  |||¡ n+|D ](}ˆ  |¡r5ˆ j  |g¡ q&t‡ fdd„|D ƒƒrGˆ j  |¡ q&ˆ j	d |d� q&t|tƒrZˆ  
||¡ dS )NF©Úindent_levelr   c                 3   s   � | ]}ˆ   |¡V  qd S r   )Ú_scalar_type)Ú.0Úelr    r   r   Ú	<genexpr>’   s   € z.TableFormatter._build_table.<locals>.<genexpr>)ÚtitleÚcurrentT)rD   Únew_sectionr   ÚlistÚdictÚ_build_sub_table_from_listrL   Úadd_rowÚallrH   Ú_build_sub_table_from_dict)r   rP   rQ   rK   Úitemr   r    r   rH   †   s    


zTableFormatter._build_tablec                    sˆ   |   ˆ ¡\}}t|ƒdkr| j |d ˆ |d  g¡ n|r1| j |¡ | j ‡ fdd„|D ƒ¡ |D ]}| j|ˆ | |d d� q3d S )Né   r   c                    s   g | ]}ˆ | ‘qS r   r   )rM   Úk©rQ   r   r   Ú
<listcomp>§   s    z=TableFormatter._build_sub_table_from_dict.<locals>.<listcomp>rJ   )Ú_group_scalar_keysÚlenrD   rV   Úadd_row_headerrH   )r   rQ   rK   ÚheadersÚmoreÚ	remainingr   r\   r   rX   �   s   ÿÿz)TableFormatter._build_sub_table_from_dictc                    s˜   |   |¡\}}| j |¡ d}|D ]8‰ |s%|r%| jj||d� | j |¡ d}| j ‡ fdd„|D ƒ¡ |D ]}|ˆ v rH| j|ˆ | |d d� q6qd S )NTrJ   Fc                    s   g | ]}ˆ   |d ¡‘qS )Ú )Úget)rM   Úheader©Úelementr   r   r]   ¸   s    z=TableFormatter._build_sub_table_from_list.<locals>.<listcomp>rZ   )Ú_group_scalar_keys_from_listrD   r`   rR   rV   rH   )r   rQ   rK   rP   ra   rb   Úfirstrc   r   rg   r   rU   ¬   s&   ÿÿ€û÷z)TableFormatter._build_sub_table_from_listc                 C   s   t |ttfƒ S r   )r   rS   rT   )r   rh   r   r   r   rL   Á   s   zTableFormatter._scalar_typec                 C   sX   t ƒ }t ƒ }|D ]}|  |¡\}}| |¡ | |¡ qtt|ƒƒ}tt|ƒƒ}||fS r   )Úsetr^   ÚupdaterS   Úsorted)r   Úlist_of_dictsra   rb   rY   Úcurrent_headersÚcurrent_morer   r   r   ri   Ä   s   
z+TableFormatter._group_scalar_keys_from_listc                 C   sN   g }g }|D ]}|   || ¡r| |¡ q| |¡ q| ¡  | ¡  ||fS r   )rL   ÚappendÚsort)r   rQ   rb   ra   rh   r   r   r   r^   Ò   s   z!TableFormatter._group_scalar_keysr   )r   )r&   r'   r(   Ú__doc__r   r-   rH   rX   rU   rL   ri   r^   Ú__classcell__r   r   rF   r   r:   d   s    

r:   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚTextFormatterNc           
   	   C   sÔ   |d u r|   ¡ }z[t|ƒrI|j}t|ƒD ]%\}}|dkri }n|j}|D ]}| |¡}	t||j|	ƒ q$|  ||¡ q|j	rH|  dd|j	ii|¡ n|  
|¡ |  ||¡ W |  |¡ d S W |  |¡ d S |  |¡ w )Nr   Ú	NextToken)r!   r   Úresult_keysÚ	enumerateÚnon_aggregate_partr,   r   Ú
expressionr-   Úresume_tokenr   r%   )
r   r.   r   r$   rw   ÚiÚpagerQ   Ú
result_keyÚdatar   r   r   r0   ä   s8   
ýþ€
€ zTextFormatter.__call__c                 C   s.   | j jd ur| j j}| |¡}t ||¡ d S r   )r   r+   r,   r   Úformat_text)r   r   r$   rz   r   r   r   r-     s   
zTextFormatter._format_responser   )r&   r'   r(   r0   r-   r   r   r   r   ru   â   s    
"ru   c                 C   s<   | dkrt |ƒS | dkrt|ƒS | dkrt|ƒS td|  ƒ‚)Nr   r   rD   zUnknown output type: %s)r1   ru   r:   rE   )Úformat_typer   r   r   r   Úget_formatter  s   r‚   )ÚloggingÚbotocore.compatr   Úbotocore.utilsr   Úbotocore.paginater   Úawscli.tabler   r   r   Úawsclir   r	   Úawscli.utilsr
   Ú	getLoggerr&   r   r   Úobjectr   r)   r1   r:   ru   r‚   r   r   r   r   Ú<module>   s    
~+