3
NZH                 @   sp   d dl Z ddlmZ ddlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
dd ZdZG dd	 d	eZdS )
    N   )_thread)binary_typec             C   s   | S )N )sr   r   /usr/share/hplip/base/logger.py	printable%   s    r   infoc               @   sV  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZeeeeeeeeee
e
eed	Zd
ZdZdZdZdZdZi Zded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded < d!ed"< d#ed$< d%ed&< d'eed(d)fd*d+Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Ze eeZ!dzd?d@Z"dAdB Z#dCdD Z$dEdF Z%e%Z&dGdH Z'e'Z(dIdJ Z)e)Z*dKdL Z+dMZ,d{dOdPZ-d|dQdRZ.e.Z/dSdT Z0e0Z1dUdV Z2e2Z3dWdX Z4dYdZ Z5d[d\ Z6d]d^ Z7d_d` Z8dadb Z9dcdd Z:dedf Z;dgdh Z<didj Z=dkdl Z>dmefdndoZ?efdpdqZ@drds ZAedtdufdvdwZBdxdy ZCd)S )}Loggerc   (         
         r   )ZnoneZfatafatalZerroerrorwarnr	   debugdbgdebug2dbg2debug3dbg3r   z[0mresetz[01mboldz[36;06mZtealz[36;01mZ	turquoisez[35;01mfusciaz[35;06mpurplez[34;01mbluez[34;06mZdarkbluez[32;01mgreenz[32;06m	darkgreenz[33;01myellowz[33;06mZbrownz[31;01mredz[31;06mZdarkred FNc             C   sF   || _ || _d | _|| _tj | _|| _tj	 | _
d| _| j| d S )NT)_where	_log_file_log_file_fZ_log_datetimer   allocate_lock_lockmoduleosgetpidpidfmt	set_level)selfr*   levelwhereZlog_datetimelog_filer   r   r   __init__i   s    

zLogger.__init__c             C   s   t |trN|j }|ttjj kr:tjj|tj| _	dS | j
d|  dS nNt |trtj|  kontjkn  r||| _	qtj| _	| j
d|  dS ndS d S )NTzInvalid logging level: %sFzInvalid logging level: %d)
isinstancestrlowerlistr
   logging_levelskeysgetLOG_LEVEL_INFO_levelr   intLOG_LEVEL_DEBUG3LOG_LEVEL_FATALLOG_LEVEL_ERROR)r0   r1   r   r   r   r/   w   s    

zLogger.set_levelc             C   s   || _ tj | _d S )N)r*   r+   r,   r-   )r0   r*   r   r   r   
set_module   s    zLogger.set_modulec             C   s
   d| _ d S )NF)r.   )r0   r   r   r   no_formatting   s    zLogger.no_formattingc             C   sF   || _ yt| j d| _W n( tk
r@   d | _ d | _tj| _Y nX d S )Nw)r&   openr'   IOErrorr
   LOG_TO_SCREENr%   )r0   r3   r   r   r   set_logfile   s    zLogger.set_logfilec             C   s   | j S )N)r&   )r0   r   r   r   get_logfile   s    zLogger.get_logfilec             C   s
   || _ d S )N)r%   )r0   r2   r   r   r   	set_where   s    zLogger.set_wherec             C   s   | j S )N)r%   )r0   r   r   r   	get_where   s    zLogger.get_wherec             C   s   | j S )N)r=   )r0   r   r   r   	get_level   s    zLogger.get_levelc             C   s   | j tjkS )N)r=   r
   r?   )r0   r   r   r   is_debug   s    zLogger.is_debugTc             C   s   | j |kr| jtjtjfkrzp| jj  |tjkr:tj	}ntj
}y|j| W n$ tk
rr   |j|jd Y nX |r|jd |j  W d | jj  X d S )Nzutf-8
)r=   r%   r
   LOG_TO_CONSOLELOG_TO_CONSOLE_AND_FILEr)   acquireLOG_LEVEL_WARNsysstderrstdoutwriteUnicodeEncodeErrorencodeflushrelease)r0   messager1   newlineoutr   r   r   log   s    



z
Logger.logc          
   C   sJ   | j d k	rFz.| jj  | j j|jdd | j jd W d | jj  X d S )Nr$   rN   )r'   r)   rQ   rV   replacerZ   )r0   r[   r   r   r   log_to_file   s    

zLogger.log_to_filec          
   C   s6   z$| j j  tjjd| j|f  W d | j j  X d S )Nz%s: %s
)r)   rQ   rS   rT   rV   r*   rZ   )r0   r[   r   r   r   rT      s    
zLogger.stderrc             C   s^   | j tjkrZd| j| j|f }| j| j|dtj | jd k	rZ| jtj	tj
fkrZ| j| d S )Nz%s[%d]: debug: %sr   )r=   r
   LOG_LEVEL_DEBUGr*   r-   r^   colorr&   r%   LOG_TO_FILErP   ra   )r0   r[   txtr   r   r   r      s    
zLogger.debugc             C   s^   | j tjkrZd| j| j|f }| j| j|dtj | jd k	rZ| jtj	tj
fkrZ| j| d S )Nz%s[%d]: debug2: %sr   )r=   r
   LOG_LEVEL_DEBUG2r*   r-   r^   rc   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   r      s    
zLogger.debug2c             C   s^   | j tjkrZd| j| j|f }| j| j|dtj | jd k	rZ| jtj	tj
fkrZ| j| d S )Nz%s[%d]: debug3: %sr   )r=   r
   r?   r*   r-   r^   rc   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   r      s    
zLogger.debug3c             C   s   | j tjkrd| j| j|f }| j| j|dtj | j| j|dtj | jd k	r| jtj	tj
fkr| j|| j| j|f  | j| d S )Nz%s[%d]: debug: %s:r   )r=   r
   rb   r*   r-   r^   rc   r&   r%   rd   rP   ra   )r0   titleblockliner   r   r   debug_block   s    
zLogger.debug_blockza !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     c             C   s  | j tjkr|rt|trNy|jd}W n" ttfk
rL   |jd}Y nX d|d|  }}x|rdjd| djdd |D d|d dt	|   d	jd
d |D g}| j
| jd| j| j|f dtj ||7 }||||  }qbW n$| j
| jd| j| jdf dtj d S )Nzutf-8zlatin-1r    z%04x: c             S   s   g | ]}d t | qS )z%02x)ord).0dr   r   r   
<listcomp>  s    z#Logger.log_data.<locals>.<listcomp>r   r$   c             S   s   g | ]}d |f|t jk qS ).)r
   r   )rn   ir   r   r   rp     s    z%s[%d]: debug: %sr   z0000: (no data))r=   r
   rb   r5   r   decodeUnicodeDecodeErrorrW   joinlenr^   rc   r*   r-   )r0   datawidthindexri   re   r   r   r   log_data  s"    
.zLogger.log_datac             C   sR   | j tjkrN| j|tj | jd k	rN| jtjtjfkrN| jd| j	| j
|f  d S )Nz%s[%d]: info: :%s)r=   r
   r<   r^   r&   r%   rd   rP   ra   r*   r-   )r0   r[   r   r   r   r	   '  s
    
zLogger.infoc             C   sp   | j tjkrld| }| j| j|dtj tjtjd| j| j|f  | j	d k	rl| j
tjtjfkrl| j| d S )Nzwarning: %sr   z
%s[%d]: %s)r=   r
   rR   r^   rc   syslogZLOG_WARNINGr*   r-   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   r   2  s    
zLogger.warnc             C   sT   | j tjkrPd| }| j| j|dtj | jd k	rP| jtjtjfkrP| j	| d S )Nznote: %sr    )
r=   r
   rR   r^   rc   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   note@  s    
zLogger.notec             C   sp   | j tjkrld| }| j| j|dtj tjtjd| j| j|f  | j	d k	rl| j
tjtjfkrl| j| d S )Nz	error: %sr#   z
%s[%d]: %s)r=   r
   rA   r^   rc   r{   	LOG_ALERTr*   r-   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   r   L  s    
zLogger.errorc             C   sr   | j tjkrnd| j }| j| j|dtj tjtjd| j| j	|f  | j
d k	rn| jtjtjfkrn| j| d S )Nzfatal error: :%sr#   z
%s[%d]: %s)r=   r
   r@   r*   r^   rc   rb   r{   r}   r-   r&   r%   rd   rP   ra   )r0   r[   re   r   r   r   r   X  s    

zLogger.fatalc             C   sX   t j \}}}d}tj|tj|| }|ddj|d d |d f  }| j| d S )NzTraceback (innermost last):
z%-20s %sr$   r   r~   )rS   exc_info	traceback	format_tbformat_exception_onlyru   r   )r0   typvaluetbZbodyZlstr   r   r   	exceptiond  s
    "zLogger.exceptionc             C   s*   | j r&djtjj|d|tjd gS |S )Nr$   r   r   )r.   ru   r
   codesr;   )r0   textrc   r   r   r   rc   l  s     zLogger.colorc             C   s   | j |dS )Nr   )rc   )r0   r   r   r   r   r   r  s    zLogger.boldc             C   s   | j |dS )Nr#   )rc   )r0   r   r   r   r   r#   v  s    z
Logger.redc             C   s   | j |dS )Nr    )rc   )r0   r   r   r   r   r    z  s    zLogger.greenc             C   s   | j |dS )Nr   )rc   )r0   r   r   r   r   r   ~  s    zLogger.purplec             C   s   | j |dS )Nr"   )rc   )r0   r   r   r   r   r"     s    zLogger.yellowc             C   s   | j |dS )Nr!   )rc   )r0   r   r   r   r   r!     s    zLogger.darkgreenc             C   s   | j |dS )Nr   )rc   )r0   r   r   r   r   r     s    zLogger.blued   c             C   s|  |j  rxd}d}x t|D ]}|d }|d }qW ytjd|d }tjd|d }	tjd|}
| j|| |d t|| }x|
D ]}|
j|d t|
kr|t|	 }|t| d |kr| jd	|d | jdt|| d  |d t|| d }n| jd|d |d }| j||d |t| }qW | j|	d	 |d W n, tk
rv   | j|| d	 |d Y nX d S )
Nr$   r   rl   r   z(\<\W{0,1}\w+) ?z([?|\]\]]*\>)z(\S*?\=".*?")FrN   )striprangerefindallr^   rv   ry   
IndexError)r0   indent_levelri   rx   r1   startZnumber_charslZ
elem_startZelem_finishedZattrsattrr   r   r   _pprint_line  s4    

zLogger._pprint_linec             C   s0   |j  r,| jd| |d | j|d |d d S )Nrl   FrN   )r   r^   )r0   r   ri   r1   r   r   r   _pprint_elem_content  s    zLogger._pprint_elem_contentc             C   s   |j d}|j dd }||| }|jd}||jdk r@d}|dkob|j d| ||j d k }|j ddk}|j ddk}|r|j ddk}	|	r|j d	}|dkr|td	 }n|r|j d
td
 }|p|}
|
p|}|||dk|fS )N<>r   /"z<!z<?z	<![CDATA[z]]>z?>r~   r~   r~   r~   r~   r~   r~   )findrfindrv   )r0   rw   	start_posend_posZretvalZstopperZsingleZignore_exclZignore_questionZcdataignore	no_indentr   r   r   _get_next_elem  s.    

$
zLogger._get_next_elem   P   c             C   s   |}d}| j |\}}}	}
x|dkr|dkr| j||d| j |d ||d }|	rf|
 rf|| }| j||d||  ||d ||| d }|	 r|
 r|| }|sP q| j |\}}}	}
qW dS )zQPretty print xml.
        Use indent to select indentation level. Default is 4   r   r   N)r1   )rx   r1   r~   r~   )r   r   r   r   )r0   xmlr1   indentrx   rw   r   r   r   Zis_stopr   r   r   r   r     s"    

z
Logger.xmlc             C   s   | j tj| d S )N)r	   pprintZpformat)r0   rw   r   r   r   r   "  s    zLogger.pprint)T)rk   )r$   )D__name__
__module____qualname__ZLOG_LEVEL_NONEr@   rA   rR   r<   r?   ZLOG_LEVEL_DBG3rf   ZLOG_LEVEL_DBG2rb   ZLOG_LEVEL_DBGr9   ZLOG_TO_DEV_NULLrO   rG   rd   rP   ZLOG_TO_BOTHr   r4   r/   rB   rC   rH   rI   rJ   rK   rL   rM   propertyr1   r^   ra   rT   r   r   r   r   r   r   rj   r   rz   r	   Zinformationr   Zwarningr|   Znoticer   r   r   rc   r   r#   r    r   r"   r!   r   r   r   r   r   r   r   r   r   r   r
   +   s   


	

	#,"r
   )rS   Zsixext.movesr   Zsixextr   r{   r   stringr+   r   r   r   ZDEFAULT_LOG_LEVELobjectr
   r   r   r   r   <module>   s   