a
    ©!cr(  ã                   @   sØ  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lZ
d dlZd dlZd dlZd dlZd dlZdZe
jZe
jZe
jZe
jZe
jZdZdZdZdZd	d
„ ZG dd„ deƒZee
je
je
je
je
je
jeeeedœZdd„ Zee
je
jdœZ dd„ Z!dd„ Z"dZ#dd„ Z$G dd„ de
j%j&ƒZ'dd„ Z(dd„ Z)G dd„ deƒZ*G d d!„ d!eƒZ+e	j,j-j.ee	j,j-j/ee	j,j-j0ee	j,j-j1ee	j,j-j2ee	j,j-j3ee	j,j-j4eiZ5G d"d#„ d#e	j,j-ƒZ6e6ƒ Z7e	j,j8 9e7¡ dS )$é    )Úabsolute_import)Úunicode_literalsNéd   é   é   é   é   c                    s   dd„ ‰‡ ‡fdd„}|S )zGMethod decorator turning the method into noop on second or later calls.c                  _   s   d S ©N© )Z_argsZ_kwargsr
   r
   ú//usr/lib/python3.9/site-packages/dnf/logging.pyÚnoop3   s    zonly_once.<locals>.noopc                    s(   ˆ | g|¢R i |¤Ž t | ˆ jˆƒ d S r	   )ÚsetattrÚ__name__)ÚselfÚargsÚkwargs©Úfuncr   r
   r   Ú	swan_song5   s    zonly_once.<locals>.swan_songr
   )r   r   r
   r   r   Ú	only_once1   s    r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_MaxLevelFilterc                 C   s
   || _ d S r	   )Ú	max_level)r   r   r
   r
   r   Ú__init__;   s    z_MaxLevelFilter.__init__c                 C   s   |j | jkrdS dS )Nr   é   )Zlevelnor   )r   Úrecordr
   r
   r   Úfilter>   s    z_MaxLevelFilter.filterN)r   Ú
__module__Ú__qualname__r   r   r
   r
   r
   r   r   :   s   r   )r   r   r   é   r   é   r   é   r   é	   é
   c                 C   s&   d|   krdksn J ‚t  | t¡S ©Nr   r"   )Ú_VERBOSE_VAL_MAPPINGÚgetÚTRACE©Z
cfg_errvalr
   r
   r   Ú_cfg_verbose_val2levelQ   s    r(   )r   r   r   c                 C   s(   d|   krdksn J ‚t  | tj¡S r#   )Ú_ERR_VAL_MAPPINGr%   ÚloggingÚWARNINGr'   r
   r
   r   Ú_cfg_err_val2level^   s    r,   c                 C   s   | d S )Nz.gzr
   )Únamer
   r
   r   Úcompression_namerc   s    r.   i   c              	   C   s€   t | dƒX}t  |d¡,}| t¡}|s*q6| |¡ qW d   ƒ n1 sJ0    Y  W d   ƒ n1 sh0    Y  t | ¡ d S )NÚrbÚwb)ÚopenÚgzipÚreadÚ
CHUNK_SIZEÚwriteÚosÚremove)ÚsourceÚdestZsfZwfÚdatar
   r
   r   Úcompression_rotatorj   s    
Hr;   c                       s&   e Zd Zd	‡ fdd„	Zdd„ Z‡  ZS )
ÚMultiprocessRotatingFileHandlerÚar   NFc                    s.   t t| ƒ ||||||¡ tj dd¡| _d S )Nz	/var/log/T)Úsuperr<   r   ÚdnfÚlockZbuild_log_lockÚrotate_lock)r   ÚfilenameÚmodeÚmaxBytesÚbackupCountÚencodingZdelay©Ú	__class__r
   r   r   v   s    
ÿz(MultiprocessRotatingFileHandler.__init__c              	   C   s´   zh|   |¡rV| j4 t | j¡j}|  ¡  t | j|¡ W d   ƒ n1 sL0    Y  tj	 
| |¡ W d S  tjjtjjfy   t d¡ Y q  ty¬   |  |¡ Y d S 0 q d S )Ng{®Gáz„?)ZshouldRolloverrA   r6   ÚstatZbaseFilenameÚst_modeZ
doRolloverÚchmodr*   ZFileHandlerÚemitr?   Ú
exceptionsZProcessLockErrorZThreadLockErrorÚtimeÚsleepÚ	ExceptionZhandleError)r   r   rC   r
   r
   r   rL   {   s    
,
z$MultiprocessRotatingFileHandler.emit)r=   r   r   NF)r   r   r   r   rL   Ú__classcell__r
   r
   rG   r   r<   u   s   r<   c                 C   sl   t j | ¡s,tj t j | ¡¡ tj | ¡ t| ||d}t	 
dd¡}tj|_| |¡ |rht|_t|_|S )N)rD   rE   z%%(asctime)s %(levelname)s %(message)sz%Y-%m-%dT%H:%M:%S%z)r6   ÚpathÚexistsr?   ÚutilZ
ensure_dirÚdirnameÚtouchr<   r*   Z	FormatterrN   Ú	localtimeZ	converterZsetFormatterr;   Zrotatorr.   Znamer)ÚlogfileÚlog_sizeÚ
log_rotateÚlog_compressÚhandlerZ	formatterr
   r
   r   Ú_create_filehandler   s    ÿ
r]   c                 C   s   |   ttjj¡ d S r	   )ÚlogÚINFOr?   ÚconstZ
LOG_MARKER)Zloggerr
   r
   r   Ú_paint_mark›   s    ra   c                   @   sB   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZdd
d„ZdS )ÚLoggingc                 C   sP   d  | _ | _t td¡ t td¡ t td¡ t td¡ t d¡ dt_	d S )NÚDDEBUGÚSUBDEBUGr&   ÚALLTF)
Ústdout_handlerÚstderr_handlerr*   ZaddLevelNamerc   rd   r&   re   ZcaptureWarningsZraiseExceptions©r   r
   r
   r   r       s    
zLogging.__init__c                 C   st   t  d¡}| t¡ t  tj¡}| t¡ | t	t j
ƒ¡ | |¡ || _t  tj¡}| t
¡ | |¡ || _d S )Nr?   )r*   Ú	getLoggerÚsetLevelr&   ZStreamHandlerÚsysÚstdoutr_   Z	addFilterr   r+   Ú
addHandlerrf   Ústderrrg   )r   Ú
logger_dnfrl   rn   r
   r
   r   Ú	_presetup©   s    





zLogging._presetupc                 C   sö   t  d¡}| t¡ tj |tjj	¡}t
||||ƒ}| |¡ | |¡ t  d¡}	|	 |¡ t  d¡}
|
 t¡ tj |tjj¡}t
||||ƒ}|
 |¡ tjj ||tk¡ t  d¡}d|_| t¡ tj |tjj¡}t
||||ƒ}| |¡ d S )Nr?   úpy.warningsÚlibrepoúdnf.rpmF)r*   ri   rj   r&   r6   rR   Újoinr?   r`   ZLOGr]   rm   ZLOG_LIBREPOÚlibdnfZrepoZ
LibrepoLogre   Z	propagaterd   ZLOG_RPM)r   Úlogfile_levelÚlogdirrY   rZ   r[   ro   rX   r\   Úlogger_warningsZlogger_librepoÚ
logger_rpmr
   r
   r   Ú_setup_file_loggers»   s(    










zLogging._setup_file_loggersc                 C   s    |   ¡  |  |||||¡ t d¡}| | j¡ t d¡}	|	 | j¡ |	 | j¡ t d¡}
| j t¡ | j t¡ t	|
ƒ t	|	ƒ | j |¡ | j |¡ d S )Nrq   rs   r?   )
rp   rz   r*   ri   rm   rg   rf   rj   r+   ra   )r   Zverbose_levelZerror_levelrv   rw   rY   rZ   r[   rx   ry   ro   r
   r
   r   Ú_setupÙ   s    


zLogging._setupFc           
   	   C   sf   t |jƒ}t|jƒ}t |jƒ}|j}|j}|j}|j}	|rL|  	|||||	¡S |  
|||||||	¡S d S r	   )r(   Z
debuglevelr,   Z
errorlevelZlogfilelevelrw   rY   rZ   r[   rz   r{   )
r   ZconfZfile_loggers_onlyZverbose_level_rZerror_level_rZlogfile_level_rrw   rY   rZ   r[   r
   r
   r   Ú_setup_from_dnf_confñ   s    


ÿzLogging._setup_from_dnf_confN)F)	r   r   r   r   r   rp   rz   r{   r|   r
   r
   r
   r   rb   Ÿ   s   	


rb   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTimerc                 C   s   || _ t ¡ | _d S r	   )ÚwhatrN   Ústart)r   r~   r
   r
   r   r     s    zTimer.__init__c                 C   s6   t   ¡ | j }d| j|d f }t d¡ t|¡ d S )Nztimer: %s: %d msiè  r?   )rN   r   r~   r*   ri   r^   rc   )r   ÚdiffÚmsgr
   r
   r   Ú__call__  s    zTimer.__call__N)r   r   r   r   r‚   r
   r
   r
   r   r}      s   r}   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚLibdnfLoggerCBc                    s*   t t| ƒ ¡  t d¡| _t d¡| _d S )Nr?   rr   )r>   rƒ   r   r*   ri   Ú_dnf_loggerÚ_librepo_loggerrh   rG   r
   r   r     s    zLibdnfLoggerCB.__init__c                 G   sf   t |ƒdkr|\}}nt |ƒdkr.|\}}}}|tjjjkrP| j t| |¡ n| j t| |¡ dS )zoLog message.

        source -- integer, defines origin (libdnf, librepo, ...) of message, 0 - unknown
        r   r   N)	Úlenru   ÚutilsÚLoggerZLOG_SOURCE_LIBREPOr…   r^   Ú_LIBDNF_TO_DNF_LOGLEVEL_MAPPINGr„   )r   r8   r   ÚlevelÚmessagerN   Úpidr
   r
   r   r5     s    
zLibdnfLoggerCB.write)r   r   r   r   r5   rQ   r
   r
   rG   r   rƒ     s   rƒ   ):Z
__future__r   r   Zdnf.exceptionsr?   Z	dnf.constZdnf.lockZdnf.utilZlibdnf.reporu   r*   Zlogging.handlersr6   rk   rN   Úwarningsr2   ZSUPERCRITICALZCRITICALZERRORr+   r_   ÚDEBUGrc   rd   r&   re   r   Úobjectr   r$   r(   r)   r,   r.   r4   r;   ÚhandlersZRotatingFileHandlerr<   r]   ra   rb   r}   r‡   rˆ   ZLevel_CRITICALZLevel_ERRORZLevel_WARNINGZLevel_NOTICEZ
Level_INFOZLevel_DEBUGZLevel_TRACEr‰   rƒ   ZlibdnfLoggerCBZLogZ	setLoggerr
   r
   r
   r   Ú<module>   s|   	
õýa






ù