o
    2&ßa<  ã                   @   sÌ   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ dddœZdd„ Z	dd
d„Z
		ddd„Z		d dd„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S )!é    N)Úis_a_tty)ÚsixTF)Ú	autoresetÚstripc                 C   s   t  | ¡} tdd„ | D ƒƒS )Nc                 s   s&   � | ]}t  |¡d v rdndV  qdS )ÚWFAé   é   N)ÚunicodedataÚeast_asian_width)Ú.0Úchar© r   ú./usr/lib/python3/dist-packages/awscli/table.pyÚ	<genexpr>'   s   € ÿz"get_text_length.<locals>.<genexpr>)r   Ú	text_typeÚsum)Útextr   r   r   Úget_text_length   s   
ÿr   éP   c                 C   st   zddl m} ddlm} W n ty   |  Y S w zt d|tj|dƒ¡dd… \}}W |S  t	y9   |  Y S w )Nr   )Ú
TIOCGWINSZ)ÚioctlÚhhhhz        r   )
Útermiosr   Úfcntlr   ÚImportErrorÚstructÚunpackÚsysÚstdoutÚ	Exception)Údefault_widthr   r   ÚheightÚwidthr   r   r   Údetermine_terminal_width+   s    ÿÿ
ÿýÿr#   ú|c           
      C   s„   |du rt | ƒ}g }|d |d  d }| |d|  |  ¡ t |ƒ| | }|t |ƒ | }| d| ¡ | |¡ d |¡}	|	S )a  Center text with specified edge chars.

    You can pass in the length of the text as an arg, otherwise it is computed
    automatically for you.  This can allow you to center a string not based
    on it's literal length (useful if you're using ANSI codes).
    Nr   r   ú Ú )r   ÚappendÚjoin)
r   ÚlengthÚ	left_edgeÚ
right_edgeÚtext_lengthÚoutputÚ
char_startÚlength_so_farÚright_side_spacesÚfinalr   r   r   Úcenter_text;   s   	

r2   r   c           
      C   s²   |du rt | ƒ}|| t |ƒ t |ƒ }|| dkr|}nd}g }d}	| |¡ |	t|ƒ7 }	| d| ¡ |	|7 }	| | ¡ |	|7 }	| d||	 t|ƒ  ¡ | |¡ d |¡S )zLeft align text.Nr   r%   r&   )r   r'   Úlenr(   )
r   r)   r*   r+   r,   Úleft_paddingÚcomputed_lengthÚpaddingr-   r/   r   r   r   Ú
align_leftQ   s,   ÿÿÿ



r7   c                 C   sv   t | ƒD ]4\}}t|jƒdkr8|jr8|j}tƒ }|j|_|j|_t||jd ƒD ]\}}| ||g¡ q(|| |< qd S )Nr   r   )	Ú	enumerater3   ÚrowsÚheadersÚSectionÚtitleÚindent_levelÚzipÚadd_row)ÚsectionsÚiÚsectionr:   Únew_sectionÚheaderÚelementr   r   r   Úconvert_to_vertical_tablek   s   €ørF   c                   @   s*   e Zd Z		d	dd„Zdd„ Zdd„ ZdS )
ÚIndentedStreamr$   c                 C   s   || _ || _|| _|| _d S ©N)Ú_streamÚ_indent_levelÚ_left_indent_charÚ_right_indent_char)ÚselfÚstreamr=   Úleft_indent_charÚright_indent_charr   r   r   Ú__init__‚   s   
zIndentedStream.__init__c                 C   sf   | j  | j| j ¡ | d¡r+| j  |d d… ¡ | j  | j| j ¡ | j  d¡ d S | j  |¡ d S )NÚ
éÿÿÿÿ)rI   ÚwriterK   rJ   ÚendswithrL   ©rM   r   r   r   r   rT   ‰   s   
zIndentedStream.writec                 C   s   t | j|ƒS rH   )ÚgetattrrI   )rM   Úattrr   r   r   Ú__getattr__’   s   zIndentedStream.__getattr__N)r$   r$   )Ú__name__Ú
__module__Ú__qualname__rQ   rT   rY   r   r   r   r   rG   �   s    
ÿ	rG   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚStylerc                 C   ó   |S rH   r   rV   r   r   r   Ústyle_title—   ó   zStyler.style_titlec                 C   r^   rH   r   rV   r   r   r   Ústyle_header_columnš   r`   zStyler.style_header_columnc                 C   r^   rH   r   rV   r   r   r   Ústyle_row_element�   r`   zStyler.style_row_elementc                 C   r^   rH   r   rV   r   r   r   Ústyle_indentation_char    r`   zStyler.style_indentation_charN)rZ   r[   r\   r_   ra   rb   rc   r   r   r   r   r]   –   s
    r]   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚColorizedStylerc                 C   s   t jdi t¤Ž d S )Nr   )ÚcoloramaÚinitÚCOLORAMA_KWARGS©rM   r   r   r   rQ   ¥   s   zColorizedStyler.__init__c                 C   r^   rH   r   rV   r   r   r   r_   ¨   ó   zColorizedStyler.style_titlec                 C   r^   rH   r   rV   r   r   r   ra   ­   ri   z#ColorizedStyler.style_header_columnc                 C   ó   t jjt jj | t jj S rH   )re   ÚStyleÚBRIGHTÚForeÚBLUEÚ	RESET_ALLrV   r   r   r   rb   ±   ó
   ÿÿz!ColorizedStyler.style_row_elementc                 C   rj   rH   )re   rk   ÚDIMrm   ÚYELLOWro   rV   r   r   r   rc   µ   rp   z&ColorizedStyler.style_indentation_charN)rZ   r[   r\   rQ   r_   ra   rb   rc   r   r   r   r   rd   ¤   s    rd   c                   @   s~   e Zd Z			ddd„Zdd„ Z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dd„ Zdd„ Zdd„ ZdS )!Ú
MultiTableNTr$   c                 C   sv   || _ |rtƒ | _| jg| _nd | _g | _|d u r&tƒ r!tƒ | _ntƒ | _n|| _d| _|| _	|d u r9t
ƒ | _d S d S )Nr   )Ú_auto_reformatr;   Ú_current_sectionÚ	_sectionsr   rd   Ú_stylerr]   Ú_rendering_indexÚ_column_separatorr#   Ú_terminal_width)rM   Úterminal_widthÚinitial_sectionÚcolumn_separatorÚterminalÚstylerÚauto_reformatr   r   r   rQ   »   s    

ÿzMultiTable.__init__c                 C   ó   | j  |¡ d S rH   )ru   Ú	add_title©rM   r<   r   r   r   r‚   Ò   ó   zMultiTable.add_titlec                 C   r�   rH   )ru   Ú
add_header©rM   r:   r   r   r   Úadd_row_headerÕ   r„   zMultiTable.add_row_headerc                 C   r�   rH   )ru   r?   )rM   Úrow_elementsr   r   r   r?   Ø   r„   zMultiTable.add_rowr   c                 C   s.   t ƒ | _| j | j¡ | j |¡ || j_d S rH   )r;   ru   rv   r'   r‚   r=   )rM   r<   r=   r   r   r   rC   Û   s   zMultiTable.new_sectionc                 C   sX   |   ¡ }|  |¡}|rt| jƒ |   ¡ }| d| d ¡ | jD ]	}|  |||¡ q d S )Nú-rR   )Ú_calculate_max_widthÚ_determine_conversion_neededrF   rv   rT   Ú_render_section)rM   rN   Ú	max_widthÚshould_convert_tablerB   r   r   r   Úrenderá   s   


ÿzMultiTable.renderc                 C   s   || j kr| jS d S rH   )rz   rt   ©rM   r�   r   r   r   r‹   ë   s   
ÿz'MultiTable._determine_conversion_neededc                 C   s   t dd„ | jD ƒƒ}|S )Nc                 s   s"   � | ]}|j d d|jd�V  qdS )é   T)r6   Úwith_borderÚouter_paddingN)Útotal_widthr=   )r   Úsr   r   r   r   ò   s   € þÿz2MultiTable._calculate_max_width.<locals>.<genexpr>)Úmaxrv   r�   r   r   r   rŠ   ñ   s   þzMultiTable._calculate_max_widthc                 C   s\   t ||j| j d¡| j d¡ƒ}||jd 8 }|  |||¡ |  |||¡ |  |||¡ d S )Nr$   r   )rG   r=   rw   rc   Ú_render_titleÚ_render_column_titlesÚ_render_rows)rM   rB   r�   rN   r   r   r   rŒ   ÷   s   

þzMultiTable._render_sectionc              	   C   sj   |j r/| j |j ¡}| t||ddt|j ƒƒd ¡ |js1|js3| dd|d   d ¡ d S d S d S d S )Nr$   rR   ú+%s+r‰   r   )r<   rw   r_   rT   r2   r   r:   r9   )rM   rB   r�   rN   r<   r   r   r   r—      s   ÿÿûzMultiTable._render_titlec              	   C   s˜   |j sd S |jd|d�}d}d}d}t||j ƒD ]$\}}	| j |	¡}
|r)d}d}nd}|t|
||dt|	ƒd�7 }||7 }q|  ||¡ | |d	 ¡ d S ©
Nr‘   )r6   r�   r&   r   Tr$   F)r   r)   r*   r+   r,   rR   )	r:   Úcalculate_column_widthsr>   rw   ra   r2   r   Ú_write_line_breakrT   )rM   rB   r�   rN   ÚwidthsÚcurrentr/   Úfirstr"   rD   Ústylized_headerr*   r   r   r   r˜     s*   ÿþ
z MultiTable._render_column_titlesc                 C   sf   g }d}|D ]}|r|  dd|d   ¡ d}q|  dd|d   ¡ q|  d¡ | d	 |¡¡ d S )
NTrš   r‰   r   Fz%s+r   rR   r&   )r'   rT   r(   )rM   rN   rž   Úpartsr    r"   r   r   r   r�   &  s   
zMultiTable._write_line_breakc              
   C   s¸   |j sd S |jd|d�}|sd S |  ||¡ |j D ]:}d}d}d}t||ƒD ]%\}	}
|r1d}d}nd}| j |
¡}|t||	|| jt|
ƒd�7 }||	7 }q&| 	|d	 ¡ q|  ||¡ d S r›   )
r9   rœ   r�   r>   rw   rb   r7   ry   r   rT   )rM   rB   r�   rN   rž   ÚrowrŸ   r/   r    r"   rE   r*   Ústylizedr   r   r   r™   4  s4   ÿ
ý
zMultiTable._render_rows)NTr$   NNT)r   )rZ   r[   r\   rQ   r‚   r‡   r?   rC   r�   r‹   rŠ   rŒ   r—   r˜   r�   r™   r   r   r   r   rs   º   s"    
þ

	rs   c                   @   s`   e Zd Zdd„ Zdd„ Zddd„Zdd
d„Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r;   c                 C   s(   d| _ g | _g | _d| _d | _g | _d S )Nr&   r   )r<   r:   r9   r=   Ú	_num_colsÚ_max_widthsrh   r   r   r   rQ   S  s   
zSection.__init__c                 C   s   d| j | j| jt| jƒf S )Nz;Section(title=%s, headers=%s, indent_level=%s, num_rows=%s))r<   r:   r=   r3   r9   rh   r   r   r   Ú__repr__[  s   ÿzSection.__repr__r   Nc                    sÖ   ‡ fdd„| j D ƒ}|d u r|S |s|S |tt|ƒƒ ‰‡fdd„|D ƒ}t|ƒ| }|dkritt|ƒƒ}|dk r=t|ƒ}|D ]%}|dkrR||  d8  < |d8 }n||  d7  < |d7 }|dkrd nq?|dks/|S )Nc                    s   g | ]}|ˆ  ‘qS r   r   ©r   Úw)r6   r   r   Ú
<listcomp>a  ó    z3Section.calculate_column_widths.<locals>.<listcomp>c                    s   g | ]
}t tˆ | ƒƒ‘qS r   )ÚintÚroundr¨   )Úscale_factorr   r   rª   i  s    r   r   )r¦   Úfloatr   Úranger3   Úreversed)rM   r6   r�   Úunscaled_widthsÚscaledÚoff_byÚ
iter_orderrA   r   )r6   r®   r   rœ   _  s.   
ÿõzSection.calculate_column_widthsFc                 C   sV   d}d}|   ¡ D ]}||| 7 }q|r||7 }||| 7 }tt| jƒ| | | |ƒS )Nr   r   )rœ   r–   r   r<   )rM   r6   r’   r“   ÚtotalÚborder_paddingr©   r   r   r   r”   |  s   ÿÿzSection.total_widthc                 C   s
   || _ d S rH   )r<   rƒ   r   r   r   r‚   ˆ  s   
zSection.add_titlec                 C   s.   |   |¡ | jd u rt|ƒ| _|  |¡| _d S rH   )Ú_update_max_widthsr¥   r3   Ú_format_headersr:   r†   r   r   r   r…   ‹  s   


zSection.add_headerc                 C   r^   rH   r   r†   r   r   r   r¹   ‘  r`   zSection._format_headersc                 C   s\   | j d u r
t|ƒ| _ t|ƒ| j krtd| j t|ƒf ƒ‚|  |¡}| j |¡ |  |¡ d S )Nz.Row should have %s elements, instead it has %s)r¥   r3   Ú
ValueErrorÚ_format_rowr9   r'   r¸   ©rM   r£   r   r   r   r?   ”  s   

ÿ
zSection.add_rowc                 C   s   dd„ |D ƒS )Nc                 S   s   g | ]}t  |¡‘qS r   )r   r   )r   Úrr   r   r   rª   Ÿ  s    z'Section._format_row.<locals>.<listcomp>r   r¼   r   r   r   r»   ž  s   zSection._format_rowc                 C   sJ   | j sdd„ |D ƒ| _ d S t|ƒD ]\}}tt|ƒ| j | ƒ| j |< qd S )Nc                 S   s   g | ]}t |ƒ‘qS r   )r   )r   Úelr   r   r   rª   £  r«   z.Section._update_max_widths.<locals>.<listcomp>)r¦   r8   r–   r   )rM   r£   rA   r¾   r   r   r   r¸   ¡  s
   ÿzSection._update_max_widths)r   N)r   Fr   )rZ   r[   r\   rQ   r§   rœ   r”   r‚   r…   r¹   r?   r»   r¸   r   r   r   r   r;   R  s    


r;   )r   )r   r$   r$   N)r$   r$   Nr   )r   r   r	   re   Úawscli.utilsr   Úawscli.compatr   rg   r   r#   r2   r7   rF   ÚobjectrG   r]   rd   rs   r;   r   r   r   r   Ú<module>   s0   þ

ÿ
ÿ 