U
    ee                      @   s8  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ dej_G dd de jZe d	Zeed
see j de_e eZedZee ee ejZej Z ej!Z!ej"Z"G dd dZ#e#eZ$e#eZ%e#eZ&e#eZ'dd Z(dd Z)dd Z*dd Z+dd Z,dd Z-dS )    N)stdoutstderr)log10)defaultdict)StyleForei?B c                       s   e Zd Z fddZ  ZS )LevelDifferentiatingFormatterc                    s   |j dkr,dtjtjtjtj|j |_np|j dkrXdtjtjtjtj|j |_nD|j dkr|dtjtj|j |_n dtjtj	tjtj|j |_t
 |S )N   z{}{}[ERROR]{}{}:      z{}{}[WARNING]{}{}: 
   z{}[INFO]{}:    z{}{}[DEBUG]{}{}:   )levelnoformat	Err_StyleBRIGHTErr_ForeREDRESET	RESET_ALLmsgLIGHTBLACK_EXsuper)selfrecord	__class__ ;/tmp/pip-unpacked-wheel-h4dze4ss/pythonforandroid/logger.pyr      sD    
  
  
   z$LevelDifferentiatingFormatter.format)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s   r   Zp4atouchedTz%(message)sc                   @   s$   e Zd Zdd Zdd Zdd ZdS )colorama_shimc                 C   s   t t| _|| _d| _d S )NF)r   str_dict_real_enabled)r   realr   r   r   __init__5   s    
zcolorama_shim.__init__c                 C   s   | j rt| j|S | j| S N)r&   getattrr%   r$   )r   keyr   r   r   __getattr__:   s    zcolorama_shim.__getattr__c                 C   s
   || _ d S r)   )r&   )r   enabler   r   r   r-   =   s    zcolorama_shim.enableN)r   r   r   r(   r,   r-   r   r   r   r   r"   3   s   r"   c                 C   sl   | dkrdn| dkrdnt  }t| t| | dkr@dn| dkrLdnt }t| t| d S )NneverFalwaysT)r   isatty	Out_Styler-   Out_Forer   r   r   )colorZ
enable_outZ
enable_errr   r   r   setup_colorG   s    


r4   c                  G   s0   t dtjtjgt|  tjtj	g  d S )N )
loggerinfojoinr   r   r   GREENlistr   r   )argsr   r   r   	info_mainU   s    
r<   c                 C   s   t dtjtj| tj d S )Nz{}{}{}{})r7   r   r   r   r   LIGHTBLUE_EXr   )sr   r   r   info_notifyZ   s    r?   c                 C   sn   t | }||kr| S |d tt| }t| tsHt| d| dd}n| d| }d|dt|| dfS )zW make limited length string in form:
      "the string is very lo...(and 15 more)"
       Nignoreerrorsr5   z...(and z more))lenintr   
isinstancer#   r8   )string	max_widthZ
string_lenZvisibleZ	visstringr   r   r   shorten_string_   s    

 rI   c               	   C   s|   zt tjd } W n ttfk
r*   Y nX | dkr8| S z&tdt tdd  d } W n t	k
rr   Y nX | S dS )NCOLUMNS   z	stty sizer   d   )
rE   osenvironKeyError
ValueErrormaxpopenreadsplit	Exception)colsr   r   r   get_console_widthp   s    &rY   c                 O   s~  d|d< d|d< d|d< d|d< | dd}| d	d
}d}dtjkrNd}d}| dd
}| dd
}ttjdkrttjd  t }t| 	d}	|	d }
d
dtjtj|
gt| }tjtjkrtdt||d tj ntd|tj d}zd}|t| d }| ||}|D ]}t|trJ|jddd}tjtjkr|rtt| t  q,|dddddd }|rdtjkrtdjtj|t|||d t  d}ntd
d| g q,|rtd jtjd|d d t  W nZ t j!k
rx } z6|r`td jtjd|d d t  |d
k	sv|sv|rd+d!d"}||jdd#tj"||rt#$|nd
|rt#$|nd
 ||j%dd$t&j' |s|rV|(d%}|d
k	rtd&t&j"t&j)d
d'd( |* D  td)t&j"t&j)t+ | d
| t,d*t&j'| t&j) |rft-d n W 5 d
}~X Y nX |S ),zXRuns the command (which should be an sh.Command instance), while
    logging the output.TZ_iterrM   Z_out_bufsizeZ_err_to_outZ_bgZ	_criticalFZ_tailNZP4A_FULL_DEBUGr   Z_filterZ
_filterout/ z{}->{} runningz{}{}   z           working: zutf-8replacerB   
	CIz{}{}{:<{width}})widthr5   z{}{:>{width}}c                    s   |   } d k	r" fdd|D }d k	r<fdd|D }|dksPt||krntd||d|tj n8td||t||ddd || d  D tj d S )	Nc                    s   g | ]}  |r|qS r   search.0line)re_filter_inr   r   
<listcomp>   s     
 z.shprint.<locals>.printtail.<locals>.<listcomp>c                    s   g | ]}  |s|qS r   rd   rf   )re_filter_outr   r   rj      s     
 r   z{}:
{}	{}{}z	
z!{} (last {} lines of {}):
{}	{}{}c                 S   s   g | ]}|qS r   r   )rg   r>   r   r   r   rj      s     )
splitlinesrD   r7   r   r8   r2   r   )outnameZ	forecolortail_nri   rk   linesr   )ri   rk   r   	printtail   s(          zshprint.<locals>.printtailSTDOUTSTDERRZ_envz{}ENV:{}
{}
c                 s   s   | ]\}}d  ||V  qdS )zexport {}='{}'N)r   )rg   nvr   r   r   	<genexpr>   s    zshprint.<locals>.<genexpr>z{}COMMAND:{}
cd {} && {} {}
z{}ERROR: {} failed!{})r   NN).poprO   rP   rD   r6   handlersremoveHandlerrY   r#   rV   r8   r   r2   r   r1   r   r:   levelloggingDEBUGr7   rI   r   debugrF   bytesdecoder   writeflushr^   rstripshErrorReturnCodeYELLOWrecompiler   r   r   getr   itemsgetcwdwarningexit)commandr;   kwargsZis_criticalro   Z
full_debugZ	filter_inZ
filter_outcolumnsZcommand_pathZcommand_stringrG   Zneed_closing_newlineZmsg_hdrZ	msg_widthoutputrh   r   errrq   envr   r   r   shprint   s    


             


  
     
r   ).r{   rO   r   r   sysr   r   mathr   collectionsr   coloramar   Z
Colo_Styler   Z	Colo_Forer   Ztruncate_cap	Formatterr   	getLoggerr6   hasattrsetLevelINFOr!   StreamHandlerch	formattersetFormatter
addHandlerr7   r}   r   errorr"   r1   r2   r   r   r4   r<   r?   rI   rY   r   r   r   r   r   <module>   s@   




