o
    !d+                     @   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   4usr/lib/python3.10/site-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 )NZErrorsZResponseMetadataZ	RequestIdzRequestId: %s)LOGdebug)r   response_dataZ
request_idr   r   r   _remove_request_id%   s   
zFormatter._remove_request_idc                 C   s   t  S r   )r	   Z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   Z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#   r*   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   r+   W   s    r+   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 )TableFormatterzPretty 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)r7   r8   styleronzUnknown color option: %s)	superr4   r   Zcolorr   tabler   r   
ValueError)r   r   r=   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_tabler=   renderr   r3   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)r=   new_sectionr   listdict_build_sub_table_from_listrE   add_rowallrA   _build_sub_table_from_dict)r   rI   rJ   rD   itemr   r   r   rA      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   )rF   krJ   r   r   
<listcomp>   s    z=TableFormatter._build_sub_table_from_dict.<locals>.<listcomp>rC   )_group_scalar_keyslenr=   rO   add_row_headerrA   )r   rJ   rD   headersmore	remainingr   rU   r   rQ      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 )NTrC   Fc                    s   g | ]}  |d qS ) )get)rF   headerelementr   r   rV      s    z=TableFormatter._build_sub_table_from_list.<locals>.<listcomp>rS   )_group_scalar_keys_from_listr=   rY   rK   rO   rA   )r   rJ   rD   rI   rZ   r[   firstr\   r   r`   r   rN      s&   z)TableFormatter._build_sub_table_from_listc                 C   s   t |ttf S r   )r   rL   rM   )r   ra   r   r   r   rE      s   zTableFormatter._scalar_typec                 C   sX   t  }t  }|D ]}| |\}}|| || qtt|}tt|}||fS r   )setrW   updaterL   sorted)r   Zlist_of_dictsrZ   r[   rR   Zcurrent_headersZcurrent_morer   r   r   rb      s   
z+TableFormatter._group_scalar_keys_from_listc                 C   sN   g }g }|D ]}|  || r|| q|| q|  |  ||fS r   )rE   appendsort)r   rJ   r[   rZ   ra   r   r   r   rW      s   z!TableFormatter._group_scalar_keysr   )r   )r!   r"   r#   __doc__r   r'   rA   rQ   rN   rE   rb   rW   __classcell__r   r   r?   r   r4   d   s    

r4   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   Z	NextToken)r   r   result_keys	enumerateZnon_aggregate_partr&   r   
expressionr'   Zresume_tokenr   r    )
r   r(   r   r   rl   iZpagerJ   Z
result_keydatar   r   r   r*      s8   

 zTextFormatter.__call__c                 C   s.   | j jd ur| j j}||}t|| d S r   )r   r%   r&   r   Zformat_text)r   r   r   rn   r   r   r   r'     s   
zTextFormatter._format_responser   )r!   r"   r#   r*   r'   r   r   r   r   rk      s    
"rk   c                 C   s<   | dkrt |S | dkrt|S | dkrt|S td|  )Nr   r   r=   zUnknown output type: %s)r+   rk   r4   r>   )Zformat_typer   r   r   r   get_formatter  s   rq   )loggingZbotocore.compatr   Zbotocore.utilsr   Zbotocore.paginater   Zawscli.tabler   r   r   awsclir   r	   Zawscli.utilsr
   	getLoggerr!   r   r   objectr   r$   r+   r4   rk   rq   r   r   r   r   <module>   s    
~+