o
    ÙKÕiû"  ã                   @   s:  d dl Z 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m	Z	m
Z
mZ d dlmZ d dlmZ dZdZdZd	d
ddœZG dd„ deƒZG dd„ dƒZejeƒ d� dededefdd„Zdedefdd„Zdd„ Zdedefdd„Zdedede
e fdd„ZG d d!„ d!e jƒZG d"d#„ d#eƒZ G d$d%„ d%eƒZ!dS )&é    N)ÚEnum)ÚAnyÚDictÚListÚOptional)ÚUAConfig)ÚTxtColorz
\033\[.*?mz\033]8;;.+?\033\\+z]8;;\ú-ÚxÚ*)u   â€”u   âœ˜u   âœ”c                   @   s   e Zd ZdZdZdS )ÚContentAlignmentÚlÚrN)Ú__name__Ú
__module__Ú__qualname__ÚLEFTÚRIGHT© r   r   ú8/usr/lib/python3/dist-packages/uaclient/cli/formatter.pyr      s    r   c                   @   s4   e Zd ZdZdZedefdd„ƒZed	dd„ƒZdS )
ÚProOutputFormatterConfigTÚcfgc                 C   s<   t jjd uodt jj ¡ v | _t j ¡ ot d¡d u | _d S )NzUTF-8ÚNO_COLOR)	ÚsysÚstdoutÚencodingÚupperÚuse_utf8ÚisattyÚosÚgetenvÚ	use_color)Úclsr   r   r   r   Úinit!   s   þzProOutputFormatterConfig.initÚreturnNc                 C   s
   d| _ d S )NF)r!   )r"   r   r   r   Údisable_color*   s   
z&ProOutputFormatterConfig.disable_color)r$   N)	r   r   r   r   r!   Úclassmethodr   r#   r%   r   r   r   r   r      s    r   )r   ÚtextÚurlr$   c                 C   s   dj || d�S )Nz]8;;{url}\{text}]8;;\)r(   r'   )Úformat)r'   r(   r   r   r   Úcreate_link2   s   r*   c                 C   s0   t  td| ¡}t  td|¡}| td¡}t|ƒS )NÚ )ÚreÚsubÚCOLOR_FORMATTING_PATTERNÚLINK_START_PATTERNÚreplaceÚLINK_ENDÚlen)r'   Úresultr   r   r   Úreal_len6   s   r4   c                   C   s   t j ¡ r
t ¡ jS dS )Niç  )r   r   r   r   Úget_terminal_sizeÚcolumnsr   r   r   r   Ú_get_default_length@   s   

r7   c                 C   st   | }t jst td| ¡}t js&t ¡ D ]
\}}| ||¡}q| 	dd¡ 
¡ }tj ¡ s8t td|¡}| td¡}|S )Nr+   ÚasciiÚignore)r   r!   r,   r-   r.   r   ÚUTF8_ALTERNATIVESÚitemsr0   ÚencodeÚdecoder   r   r   r/   r1   )r'   ÚoutputÚcharÚalternativer   r   r   Úprocess_formatter_configH   s   
rA   Ú	max_widthc                 C   sv   t | ƒ|kr	| gS |  ¡ }g }d}|D ]}t |ƒt |ƒ |kr)| | ¡ ¡ |}q|d| 7 }q|r9| | ¡ ¡ |S )Nr+   ú )r4   ÚsplitÚappendÚstrip)r'   rB   ÚwordsÚwrapped_linesÚcurrent_lineÚwordr   r   r   Ú	wrap_text[   s   rK   c                   @   s2   e Zd Zejddee defdd„ƒZdd„ Z	dS )	ÚProOutputFormatterNÚline_lengthr$   c                 C   s   d S ©Nr   )ÚselfrM   r   r   r   Ú	to_stringq   s   zProOutputFormatter.to_stringc                 C   s   |   ¡ S rN   )rP   ©rO   r   r   r   Ú__str__u   s   zProOutputFormatter.__str__rN   )
r   r   r   ÚabcÚabstractmethodr   ÚintÚstrrP   rR   r   r   r   r   rL   p   s    rL   c                	   @   sæ   e Zd ZdZ			ddeee  deeee   deee  fdd„Ze	ded	e
d
efdd„ƒZe	ded	e
d
efdd„ƒZd
ee
 fdd„Zddee
 d
efdd„Zd
e
fdd„Zde
d
eee  fdd„Zdee d
efdd„ZdS )ÚTablez  NÚheadersÚrowsÚ	alignmentc                 C   s†   |d ur|ng | _ |d ur|ng | _|  ¡ | _|d ur|ntjgt| jƒ | _t| jƒt| jƒkr;td 	t| jƒ¡ƒ‚| jd | _
d S )Nz&'alignment' list should have length {}éÿÿÿÿ)rX   rY   Ú_get_column_sizesÚcolumn_sizesr   r   r2   rZ   Ú
ValueErrorr)   Úlast_column_size)rO   rX   rY   rZ   r   r   r   Ú__init__|   s   
ÿýÿÿzTable.__init__ÚstringÚtotal_lengthr$   c                 C   s$   t | ƒ}||kr
| S | d||   S ©NrC   ©r4   ©ra   rb   Ú
str_lengthr   r   r   Úljust’   ó   zTable.ljustc                 C   s$   t | ƒ}||kr
| S d||  |  S rc   rd   re   r   r   r   Úrjust™   rh   zTable.rjustc                    sÂ   | j s
| js
tdƒ‚| jrtdd„ | jD ƒƒrtdƒ‚g }| j r&| | j ¡ | jr/| | j¡ t|d ƒ‰ t‡ fdd„|D ƒƒsDtdƒ‚g }tt|d ƒƒD ]‰| t	‡fdd„|D ƒƒ¡ qN|S )	Nz:Empty table not supported. Please provide headers or rows.c                 s   s   � | ]	}t |ƒd kV  qdS )r   N©r2   ©Ú.0Úitemr   r   r   Ú	<genexpr>¦   ó   € z*Table._get_column_sizes.<locals>.<genexpr>z=Empty row not supported. Please provide content for each row.r   c                 3   s   � | ]	}t |ƒˆ kV  qd S rN   rj   rk   )Úexpected_lengthr   r   rn   ²   ro   zQMixed lengths in table content. Please provide headers / rows of the same length.c                 3   s    � | ]}t t|ˆ  ƒƒV  qd S rN   )r4   rV   rk   )Úir   r   rn   »   s   € )
rX   rY   r^   ÚanyrE   Úextendr2   ÚallÚrangeÚmax)rO   Úall_contentr]   r   )rp   rq   r   r\       s0   ÿÿÿÿzTable._get_column_sizesrM   c                 C   s|   |d u rt ƒ }| j}|  ¡ |kr|  |¡}d}| jr*|tj|  | j¡ tj d 7 }|D ]}||  |¡7 }|d7 }q,t	|ƒS )Nr+   Ú
)
r7   rY   Ú_get_line_lengthÚwrap_last_columnrX   r   ÚBOLDÚ	_fill_rowÚENDCrA   )rO   rM   rY   r>   Úrowr   r   r   rP   À   s(   

ÿþýÿ
zTable.to_stringc                 C   s"   t | jƒt| jƒd t| jƒ  S )Né   )Úsumr]   r2   Ú	SEPARATORrQ   r   r   r   ry   Õ   s   ÿzTable._get_line_lengthÚ
max_lengthc                 C   sÄ   |t | jd d… ƒt| jƒd t| jƒ   | _g }| jD ]B}t|d ƒ| jkr.| |¡ qt|d | jƒ}| |d d… |d g ¡ |dd … D ]}dgt| jƒd  |g }| |¡ qJq|S )Nr[   r   r   rC   )r€   r]   r2   r�   r_   rY   rE   rK   )rO   r‚   Únew_rowsr~   Úwrapped_last_columnÚ
extra_lineÚnew_rowr   r   r   rz   Ú   s$   ÿÿ
ÿüzTable.wrap_last_columnr~   c                 C   sÆ   d}t t|ƒd ƒD ]3}| j| tjkr%||  || | j| ¡| j 7 }q
| j| tjkr=||  	|| | j| ¡| j 7 }q
| jd tjkrN||d 7 }|S | jd tjkra||  	|d | j
¡7 }|S )Nr+   r   r[   )ru   r2   rZ   r   r   rg   r]   r�   r   ri   r_   )rO   r~   r>   rq   r   r   r   r|   í   s"   ÿÿ€þzTable._fill_row)NNNrN   )r   r   r   r�   r   r   rV   r   r`   ÚstaticmethodrU   rg   ri   r\   rP   ry   rz   r|   r   r   r   r   rW   y   s*    ü
þý

ü rW   c                   @   sP   e Zd ZdZdZ		ddee deee  fdd„Z	ddee
 d	efd
d„ZdS )ÚBlocké   rC   NÚtitleÚcontentc                 C   s"   || _ |d ur|| _d S g | _d S rN   )rŠ   r‹   )rO   rŠ   r‹   r   r   r   r`     s   zBlock.__init__rM   r$   c                 C   sž   |d u rt ƒ }|| j8 }d}| jr!|tjtj | j tj d 7 }| jD ]&}t|t	ƒr2|j
|d�}nd tt|ƒ|ƒ¡d }|t || j| j ¡7 }q$t|ƒS )Nr+   rx   )rM   )r7   ÚINDENT_SIZErŠ   r   r{   ÚDISABLEGREYr}   r‹   Ú
isinstancerL   rP   ÚjoinrK   rV   ÚtextwrapÚindentÚINDENT_CHARrA   )rO   rM   r>   rm   Úitem_strr   r   r   rP     s0   
ÿþýüÿ

ÿzBlock.to_string)NNrN   )r   r   r   rŒ   r’   r   rV   r   r   r`   rU   rP   r   r   r   r   rˆ   ÿ   s    ýþ

ýrˆ   )"rS   r   r,   r   r�   Úenumr   Útypingr   r   r   r   Úuaclient.configr   Úuaclient.messagesr   r.   r/   r1   r:   r   r   r#   rV   r*   rU   r4   r7   rA   rK   ÚABCrL   rW   rˆ   r   r   r   r   Ú<module>   s8    ý
	 