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   t  | t¡S r	   )Ú_VERBOSE_VAL_MAPPINGÚgetÚTRACE©Z
cfg_errvalr
   r
   r   Ú_cfg_verbose_val2levelQ   s    r'   )r   r   r   c                 C   s   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shouldRolloverr@   r5   ÚstatZbaseFilenameÚst_modeZ
doRolloverÚchmodr)   ZFileHandlerÚemitr>   Ú
exceptionsZProcessLockErrorZThreadLockErrorÚtimeÚsleepÚ	ExceptionZhandleError)r   r   rB   r
   r
   r   rK   {   s    
,
z$MultiprocessRotatingFileHandler.emit)r<   r   r   NF)r   r   r   r   rK   Ú__classcell__r
   r
   rF   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)rC   rD   z%%(asctime)s %(levelname)s %(message)sz%Y-%m-%dT%H:%M:%S%z)r5   ÚpathÚexistsr>   ÚutilZ
ensure_dirÚdirnameÚtouchr;   r)   Z	FormatterrM   Ú	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    r`   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addLevelNamerb   rc   r%   rd   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*   Ú
addHandlerre   Ústderrrf   )r   Ú
logger_dnfrk   rm   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)   rh   ri   r%   r5   rQ   Újoinr>   r_   ZLOGr\   rl   ZLOG_LIBREPOÚlibdnfZrepoZ
LibrepoLogrd   Z	propagaterc   ZLOG_RPM)r   Úlogfile_levelÚlogdirrX   rY   rZ   rn   rW   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 )Nrp   rr   r>   )
ro   ry   r)   rh   rl   rf   re   ri   r*   r`   )r   Zverbose_levelZerror_levelru   rv   rX   rY   rZ   rw   rx   rn   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logfilelevelrv   rX   rY   rZ   ry   rz   )
r   ZconfZfile_loggers_onlyZverbose_level_rZerror_level_rZlogfile_level_rrv   rX   rY   rZ   r
   r
   r   Ú_setup_from_dnf_confñ   s    


ÿzLogging._setup_from_dnf_confN)F)	r   r   r   r   r   ro   ry   rz   r{   r
   r
   r
   r   ra   Ÿ   s   	


ra   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTimerc                 C   s   || _ t ¡ | _d S r	   )ÚwhatrM   Ú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>   )rM   r~   r}   r)   rh   r]   rb   )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>   rq   )r=   r‚   r   r)   rh   Ú_dnf_loggerÚ_librepo_loggerrg   rF   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)	Úlenrt   ÚutilsÚLoggerZLOG_SOURCE_LIBREPOr„   r]   Ú_LIBDNF_TO_DNF_LOGLEVEL_MAPPINGrƒ   )r   r7   r   ÚlevelÚmessagerM   Úpidr
   r
   r   r4     s    
zLibdnfLoggerCB.write)r   r   r   r   r4   rP   r
   r
   rF   r   r‚     s   r‚   ):Z
__future__r   r   Zdnf.exceptionsr>   Z	dnf.constZdnf.lockZdnf.utilZlibdnf.report   r)   Zlogging.handlersr5   rj   rM   Úwarningsr1   ZSUPERCRITICALZCRITICALZERRORr*   r^   ÚDEBUGrb   rc   r%   rd   r   Úobjectr   r#   r'   r(   r+   r-   r3   r:   ÚhandlersZRotatingFileHandlerr;   r\   r`   ra   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






ù