o
    !d<                     @   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)Z	autoresetstripc                 C   s   t | } tdd | D S )Nc                 s   s&    | ]}t |d v rdndV  qdS )ZWFA      N)unicodedataeast_asian_width).0char r   0usr/lib/python3.10/site-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)ioctlZhhhhz        r   )
Ztermiosr   fcntlr   ImportErrorstructunpacksysstdout	Exception)Z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outputZ
char_startlength_so_farZright_side_spacesfinalr   r   r   center_text;   s   	

r+   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'   Zleft_paddingZcomputed_lengthpaddingr(   r)   r   r   r   
align_leftQ   s,   



r.   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   )		enumerater,   rowsheadersSectiontitleindent_levelzipadd_row)sectionsisectionr1   new_sectionheaderelementr   r   r   convert_to_vertical_tablek   s   r=   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streamr4   Zleft_indent_charZ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
)r@   writerB   rA   endswithrC   rD   r   r   r   r   rI      s   
zIndentedStream.writec                 C   s   t | j|S r?   )getattrr@   )rD   attrr   r   r   __getattr__   s   zIndentedStream.__getattr__N)r   r   )__name__
__module____qualname__rF   rI   rN   r   r   r   r   r>      s    
	r>   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Stylerc                 C      |S r?   r   rK   r   r   r   style_title      zStyler.style_titlec                 C   rS   r?   r   rK   r   r   r   style_header_column   rU   zStyler.style_header_columnc                 C   rS   r?   r   rK   r   r   r   style_row_element   rU   zStyler.style_row_elementc                 C   rS   r?   r   rK   r   r   r   style_indentation_char   rU   zStyler.style_indentation_charN)rO   rP   rQ   rT   rV   rW   rX   r   r   r   r   rR      s
    rR   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rD   r   r   r   rF      s   zColorizedStyler.__init__c                 C   rS   r?   r   rK   r   r   r   rT         zColorizedStyler.style_titlec                 C   rS   r?   r   rK   r   r   r   rV      r^   z#ColorizedStyler.style_header_columnc                 C      t jjt jj | t jj S r?   )rZ   StyleZBRIGHTForeZBLUE	RESET_ALLrK   r   r   r   rW      
   z!ColorizedStyler.style_row_elementc                 C   r_   r?   )rZ   r`   ZDIMra   ZYELLOWrb   rK   r   r   r   rX      rc   z&ColorizedStyler.style_indentation_charN)rO   rP   rQ   rF   rT   rV   rW   rX   r   r   r   r   rY      s    rY   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_reformatr2   _current_section	_sectionsr   rY   _stylerrR   Z_rendering_index_column_separatorr   _terminal_width)rD   Zterminal_widthZinitial_sectionZcolumn_separatorZterminalZstylerZauto_reformatr   r   r   rF      s    

zMultiTable.__init__c                 C      | j | d S r?   )rf   	add_titlerD   r3   r   r   r   rl         zMultiTable.add_titlec                 C   rk   r?   )rf   
add_headerrD   r1   r   r   r   add_row_header   rn   zMultiTable.add_row_headerc                 C   rk   r?   )rf   r6   )rD   Zrow_elementsr   r   r   r6      rn   zMultiTable.add_rowr   c                 C   s.   t  | _| j| j | j| || j_d S r?   )r2   rf   rg   r"   rl   r4   )rD   r3   r4   r   r   r   r:      s   zMultiTable.new_sectionc                 C   sX   |   }| |}|rt| j |   }|d| d  | jD ]	}| ||| q d S )N-rG   )_calculate_max_width_determine_conversion_neededr=   rg   rI   _render_section)rD   rE   	max_widthZshould_convert_tabler9   r   r   r   render   s   


zMultiTable.renderc                 C   s   || j kr| jS d S r?   )rj   re   rD   rv   r   r   r   rt      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)r-   with_borderouter_paddingN)total_widthr4   )r	   sr   r   r   r      s    z2MultiTable._calculate_max_width.<locals>.<genexpr>)maxrg   rx   r   r   r   rs      s   zMultiTable._calculate_max_widthc                 C   s\   t ||j| jd| jd}||jd 8 }| ||| | ||| | ||| d S )Nr   r   )r>   r4   rh   rX   _render_title_render_column_titles_render_rows)rD   r9   rv   rE   r   r   r   ru      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   rG   +%s+rr   r   )r3   rh   rT   rI   r+   r   r1   r0   )rD   r9   rv   rE   r3   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 
Nry   )r-   rv   r!   r   Tr   F)r   r$   r%   r&   r'   rG   )	r1   calculate_column_widthsr5   rh   rV   r+   r   _write_line_breakrI   )rD   r9   rv   rE   widthscurrentr)   firstr   r;   Z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   rr   r   Fz%s+r   rG   r!   )r"   rI   r#   )rD   rE   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   )
r0   r   r   r5   rh   rW   r.   ri   r   rI   )rD   r9   rv   rE   r   rowr   r)   r   r   r<   r%   Zstylizedr   r   r   r   4  s4   

zMultiTable._render_rows)NTr   NNT)r   )rO   rP   rQ   rF   rl   rq   r6   r:   rw   rt   rs   ru   r   r   r   r   r   r   r   r   rd      s"    


	rd   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 )r2   c                 C   s(   d| _ g | _g | _d| _d | _g | _d S )Nr!   r   )r3   r1   r0   r4   	_num_cols_max_widthsr]   r   r   r   rF   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))r3   r1   r4   r,   r0   r]   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)r-   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   ranger,   reversed)rD   r-   rv   Zunscaled_widthsZscaledZoff_byZ
iter_orderr8   r   )r-   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   r3   )rD   r-   rz   r{   totalZborder_paddingr   r   r   r   r|   |  s   zSection.total_widthc                 C   s
   || _ d S r?   )r3   rm   r   r   r   rl     s   
zSection.add_titlec                 C   s.   |  | | jd u rt|| _| || _d S r?   )_update_max_widthsr   r,   _format_headersr1   rp   r   r   r   ro     s   


zSection.add_headerc                 C   rS   r?   r   rp   r   r   r   r     rU   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   r,   
ValueError_format_rowr0   r"   r   rD   r   r   r   r   r6     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   r/   r~   r   )rD   r   r8   r   r   r   r   r     s
   zSection._update_max_widths)r   N)r   Fr   )rO   rP   rQ   rF   r   r   r|   rl   ro   r   r6   r   r   r   r   r   r   r2   R  s    


r2   )r   )r   r   r   N)r   r   Nr   )r   r   r   rZ   Zawscli.utilsr   Zawscli.compatr   r\   r   r   r+   r.   r=   objectr>   rR   rY   rd   r2   r   r   r   r   <module>   s0   


 