
    g"                        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e      Z G d d      Zej-                   e              dededefdZdedefdZd ZdedefdZdedede
e   fdZ G d de j<                        Z G d de      Z  G d d e      Z!y)!    N)Enum)AnyDictListOptional)UAConfig)TxtColorz
\033\[.*?mz\033]8;;.+?\033\\+z]8;;\-x*)u   —u   ✘u   ✔c                       e Zd ZdZdZy)ContentAlignmentlrN)__name__
__module____qualname__LEFTRIGHT     8/usr/lib/python3/dist-packages/uaclient/cli/formatter.pyr   r      s    DEr   r   c                   <    e Zd ZdZdZedefd       Zedd       Zy)ProOutputFormatterConfigTcfgc                    t         j                  j                  d uxr* dt         j                  j                  j                         v | _        t         j                  j                         xr t        j                  d      d u | _        y )NzUTF-8NO_COLOR)	sysstdoutencodingupperuse_utf8isattyosgetenv	use_color)clsr   s     r   initzProOutputFormatterConfig.init!   sf     JJt+ 73::..4466 	
 

))+M		*0E0Mr   Nc                     d| _         y )NF)r&   )r'   s    r   disable_colorz&ProOutputFormatterConfig.disable_color*   s	    r   )returnN)	r   r   r   r"   r&   classmethodr   r(   r*   r   r   r   r   r      s>    HI Nx N N  r   r   )r   texturlr+   c                 (    dj                  ||       S )Nz]8;;{url}\{text}]8;;\)r.   r-   )format)r-   r.   s     r   create_linkr1   2   s    4;;$;OOr   c                     t        j                  t        d|       }t        j                  t        d|      }|j	                  t
        d      }t        |      S )N )resubCOLOR_FORMATTING_PATTERNLINK_START_PATTERNreplaceLINK_ENDlen)r-   results     r   real_lenr<   6   sB    VV,b$7FVV&F3F^^Hb)Fv;r   c                  |    t         j                  j                         rt        j                         j
                  S y)Ni  )r   r   r#   r$   get_terminal_sizecolumnsr   r   r   _get_default_lengthr@   @   s,    
zz##%--- r   c                    | }t         j                  st        j                  t        d|       }t         j
                  sNt        j                         D ]  \  }}|j                  ||      } |j                  dd      j                         }t        j                  j                         s1t        j                  t        d|      }|j                  t        d      }|S )Nr3   asciiignore)r   r&   r4   r5   r6   r"   UTF8_ALTERNATIVESitemsr8   encodedecoder   r   r#   r7   r9   )r-   outputcharalternatives       r   process_formatter_configrK   H   s    F#--0"d;#,,!2!8!8!: 	7D+^^D+6F	7w188:::*B7"-Mr   	max_widthc                 (   t        |       |k  r| gS | j                         }g }d}|D ]F  }t        |      t        |      z   |k\  r"|j                  |j                                |}?|d|z   z  }H |r|j                  |j                                |S )Nr3    )r<   splitappendstrip)r-   rL   wordswrapped_linescurrent_linewords         r   	wrap_textrV   [   s    ~"vJJLEML 'L!HTN2i?  !3!3!56LC$J&L' \//12r   c                   H    e Zd Zej                  ddee   defd       Zd Z	y)ProOutputFormatterNline_lengthr+   c                      y Nr   )selfrY   s     r   	to_stringzProOutputFormatter.to_stringq   s    r   c                 "    | j                         S r[   )r]   r\   s    r   __str__zProOutputFormatter.__str__u   s    ~~r   r[   )
r   r   r   abcabstractmethodr   intstrr]   r`   r   r   r   rX   rX   p   s1    Xc] c   r   rX   c            	           e Zd ZdZ	 	 	 ddeee      deeee         deee      fdZe	dede
d	efd
       Ze	dede
d	efd       Zd	ee
   fdZddee
   d	efdZd	e
fdZde
d	eee      fdZdee   d	efdZy)Tablez  Nheadersrows	alignmentc                    ||ng | _         ||ng | _        | j                         | _        ||n&t        j
                  gt        | j                        z  | _        t        | j                        t        | j                        k7  r-t        dj                  t        | j                                    | j                  d   | _
        y )Nz&'alignment' list should have length {})rg   rh   _get_column_sizescolumn_sizesr   r   r:   ri   
ValueErrorr0   last_column_size)r\   rg   rh   ri   s       r   __init__zTable.__init__|   s     #*"5w2 ,D"	 224 $ "''(3t/@/@+AA 	
 t~~#d&7&7"888??))* 
 !% 1 1" 5r   stringtotal_lengthr+   c                 <    t        |       }||k\  r| S | d||z
  z  z   S NrN   r<   rq   rr   
str_lengths      r   ljustzTable.ljust   s.    f%
%M|j8999r   c                 <    t        |       }||k\  r| S d||z
  z  | z   S rt   ru   rv   s      r   rjustzTable.rjust   s.    f%
%MlZ/0699r   c                 2   | j                   s| j                  st        d      | j                  r't        d | j                  D              rt        d      g }| j                   r|j	                  | j                          | j                  r|j                  | j                         t        |d         t        fd|D              st        d      g }t        t        |d               D ]%  |j	                  t        fd|D                     ' |S )Nz:Empty table not supported. Please provide headers or rows.c              3   8   K   | ]  }t        |      d k(    yw)r   Nr:   ).0items     r   	<genexpr>z*Table._get_column_sizes.<locals>.<genexpr>   s     BSY!^Bs   z=Empty row not supported. Please provide content for each row.r   c              3   :   K   | ]  }t        |      k(    y wr[   r}   )r~   r   expected_lengths     r   r   z*Table._get_column_sizes.<locals>.<genexpr>   s     HD3t9/Hs   zQMixed lengths in table content. Please provide headers / rows of the same length.c              3   L   K   | ]  }t        t        |                 y wr[   )r<   rd   )r~   r   is     r   r   z*Table._get_column_sizes.<locals>.<genexpr>   s     CtHSa\*Cs   !$)
rg   rh   rn   anyrP   extendr:   allrangemax)r\   all_contentrm   r   r   s      @@r   rl   zTable._get_column_sizes   s    ||DIIL  99B		BBO  <<t||,99tyy)k!n-HKHHD 
 s;q>*+ 	AC{CC	
 r   rY   c                 r   |
t               }| j                  }| j                         |kD  r| j                  |      }d}| j                  rC|t
        j                  | j                  | j                        z   t
        j                  z   dz   z  }|D ]  }|| j                  |      z  }|dz  } t        |      S )Nr3   
)
r@   rh   _get_line_lengthwrap_last_columnrg   r	   BOLD	_fill_rowENDCrK   )r\   rY   rh   rH   rows        r   r]   zTable.to_string   s    -/Kyy  "[0((5D<<.../--  F  	CdnnS))FdNF	 (//r   c                     t        | j                        t        | j                        dz
  t        | j                        z  z   S )N   )sumrm   r:   	SEPARATORr_   s    r   r   zTable._get_line_length   s@    4$$%T->->)?!)CsNNH
 )
 
 	
r   
max_lengthc                    |t        | j                  d d       t        | j                        dz
  t        | j                        z  z   z
  | _        g }| j
                  D ]  }t        |d         | j                  k  r|j                  |       0t        |d   | j                        }|j                  |d d |d   gz          |dd  D ]3  }dgt        | j                        dz
  z  |gz   }|j                  |       5  |S )Nrk   r   r   rN   )r   rm   r:   r   ro   rh   rP   rV   )r\   r   new_rowsr   wrapped_last_column
extra_linenew_rows          r   r   zTable.wrap_last_column   s    *!!#2&'4$$%)S-@@A!
 99 
	-C3r7|t444$&/B9N9N&O#CR,?,B+C CD"5ab"9 -J"es4+<+<'='AB"F G OOG,	-
	- r   r   c                 f   d}t        t        |      dz
        D ]  }| j                  |   t        j                  k(  r3|| j                  ||   | j                  |         | j                  z   z  }V| j                  |   t        j                  k(  sw|| j                  ||   | j                  |         | j                  z   z  } | j                  d   t        j                  k(  r
||d   z  }|S | j                  d   t        j                  k(  r"|| j                  |d   | j                        z  }|S )Nr3   r   rk   )r   r:   ri   r   r   rx   rm   r   r   rz   ro   )r\   r   rH   r   s       r   r   zTable._fill_row   s"   s3x!|$ 	A~~a $4$9$99JJs1vt'8'8';<t~~M "&6&<&<<JJs1vt'8'8';<t~~M	 >>"!1!6!66c"gF  ^^B#3#9#99djjR$*?*?@@Fr   )NNNr[   )r   r   r   r   r   r   rd   r   rp   staticmethodrc   rx   rz   rl   r]   r   r   r   r   r   r   rf   rf   y   s   I (,*.6:	6$s)$6 tDI'6 D!123	6, :c : : : : :c : : : :49 @0Xc] 0c 0*
# 

3 4S	? &T#Y 3 r   rf   c                   T    e Zd ZdZdZ	 	 d
dee   deee      fdZ	ddee
   defd	Zy)Block   rN   Ntitlecontentc                 4    || _         ||| _        y g | _        y r[   )r   r   )r\   r   r   s      r   rp   zBlock.__init__  s    
 
")"5w2r   rY   r+   c                 
   |
t               }|| j                  z  }d}| j                  rE|t        j                  t        j
                  z   | j                  z   t        j                  z   dz   z  }| j                  D ]|  }t        |t              r|j                  |      }n'dj                  t        t        |      |            dz   }|t        j                  || j                   | j                  z        z  }~ t#        |      S )Nr3   r   )rY   )r@   INDENT_SIZEr   r	   r   DISABLEGREYr   r   
isinstancerX   r]   joinrV   rd   textwrapindentINDENT_CHARrK   )r\   rY   rH   r   item_strs        r   r]   zBlock.to_string  s    -/Kt'''::&&'** --  	F LL 	D$ 23>>k>B99Ys4y+%FG$Nhoo$**T-=-== F	 (//r   )NNr[   )r   r   r   r   r   r   rd   r   r   rp   rc   r]   r   r   r   r   r      sO    KK  $'+>}> $s)$>0Xc] 0c 0r   r   )"ra   r$   r4   r   r   enumr   typingr   r   r   r   uaclient.configr   uaclient.messagesr	   r6   r7   r9   rD   r   r   r(   rd   r1   rc   r<   r@   rK   rV   ABCrX   rf   r   r   r   r   <module>r      s   
 	 	 
   , , $ &( *  t  &   (*  -Pc P P P3 3 3 3 &C C DI *   C CL'0 '0r   