U
    hàŽi©;  ã                   @   s:  d dl Z d dlZd dlZd dlZd dlZdejj_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mZ dddd	d
d ddddddddddddddddœZddddgdœddgddd œddgdd!d œd"œd#d$d%d&œd#d$d'd&œd(œd$d)d*d+d,œid-œZd.d/„ ZG d0d1„ d1eƒZd2d3„ ZG d4d5„ d5ƒZdS )6é    Né   )Ú
dictConfig)Ú
fileConfig)Úutilé   é
   é	   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   )ÚauthZauthprivZcronÚdaemonÚftpZkernZlprZmailÚnewsZsecurityÚsyslogÚuserZuucpZlocal0Zlocal1Zlocal2Zlocal3Zlocal4Zlocal5Zlocal6Zlocal7FÚINFOÚconsole)ÚlevelÚhandlersÚerror_consoleTúgunicorn.error)r    r!   Ú	propagateÚqualnameúgunicorn.access)r#   r&   zlogging.StreamHandlerZgenericzext://sys.stdout)ÚclassÚ	formatterÚstreamzext://sys.stderr)r   r"   ú5%(asctime)s [%(process)d] [%(levelname)s] %(message)sú[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)ÚformatÚdatefmtr'   )ÚversionÚdisable_existing_loggersÚrootÚloggersr!   Z
formattersc                  C   s$   t j} t| jj ¡ ƒ}dd„ |D ƒS )z get list of all loggers c                 S   s   g | ]}t  |¡‘qS © )ÚloggingÚ	getLogger)Ú.0Únamer2   r2   úO/var/www/html/IITS/school/venv/lib/python3.8/site-packages/gunicorn/glogging.pyÚ
<listcomp>\   s     zloggers.<locals>.<listcomp>)r3   r0   ÚlistÚmanagerÚ
loggerDictÚkeys)r0   Úexistingr2   r2   r7   r1   X   s    r1   c                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )Ú	SafeAtomsc                 C   sD   t  | ¡ | ¡ D ],\}}t|tƒr6| dd¡| |< q|| |< qd S )Nú"z\")ÚdictÚ__init__ÚitemsÚ
isinstanceÚstrÚreplace)ÚselfÚatomsÚkeyÚvaluer2   r2   r7   rA   a   s
    

zSafeAtoms.__init__c                    sF   |  d¡r*| ¡ }|| kr&tƒ  |¡S dS || kr>tƒ  |¡S dS d S )Nú{ú-)Ú
startswithÚlowerÚsuperÚ__getitem__)rF   ÚkÚkl©Ú	__class__r2   r7   rO   i   s    
zSafeAtoms.__getitem__)Ú__name__Ú
__module__Ú__qualname__rA   rO   Ú__classcell__r2   r2   rR   r7   r>   _   s   r>   c                 C   sP  |   d¡rRd }|  dd¡}t|ƒdkr@|d } |d dkr@tj}||  d¡d fS |   d¡rr|  d¡d } tj}n(|   d¡r’|  d¡d } tj}ntd	ƒ‚d
| krÆd| krÆ|  d¡d dd …  ¡ }n2d| krâ|  d¡d  ¡ }n| dkrðd}n|  ¡ }|  d¡d } d| k�r@|  dd¡d }| ¡ �s6td| ƒ‚t	|ƒ}nd}|||ffS )Nzunix://ú#r   r   r   Zdgramzudp://ztcp://zinvalid syslog addressú[ú]ú:Ú Z	localhostéÿÿÿÿz%r is not a valid port number.i  )
rL   ÚsplitÚlenÚsocketÚ
SOCK_DGRAMÚSOCK_STREAMÚRuntimeErrorrM   ÚisdigitÚint)ÚaddrÚ	sock_typeÚpartsÚsocktypeÚhostÚportr2   r2   r7   Úparse_syslog_addressv   s<    





rl   c                   @   sÒ   e Zd ZejejejejejdœZ	ejZ
dZdZdZdZeZdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd+d%d&„Z d'd(„ Z!d)d*„ Z"d$S ),ÚLogger)ÚcriticalÚerrorÚwarningÚinfoÚdebugr*   r+   z%(message)sz[%(process)d] %(message)sc                 C   sX   t  d¡| _d| j_t  d¡| _d| j_g | _g | _d | _t 	¡ | _
|| _|  |¡ d S )Nr#   Fr&   )r3   r4   Ú	error_logr$   Ú
access_logZerror_handlersZaccess_handlersÚlogfileÚ	threadingÚLockÚlockÚcfgÚsetup)rF   ry   r2   r2   r7   rA   ·   s    
zLogger.__init__c                 C   sl  | j  |j ¡ tj¡| _| j | j¡ | j tj¡ | j	j
rž|jdkržtjtjfD ]}| ¡  qRt|jdƒ| _t | j ¡ tj ¡ ¡ t | j ¡ tj ¡ ¡ |  | j|jt | j| j¡¡ |jd k	ræ| j| j|jt | j¡tjd� |j�r|  | j|| jd¡ |j�s|  | j|| jd¡ |j�r‚t  !¡ }| "|j¡ zt#|ƒ W n8 t$t%t&t'fk
�r~ } zt(t)|ƒƒ‚W 5 d }~X Y nX næ|j*�rt  !¡ }tj+ ,|j*¡�rhz&t- .t|j*ƒ¡}| "|¡ t#|ƒ W n< t-j/t$t%t&t'fk
�r } zt(t)|ƒƒ‚W 5 d }~X Y nX n`|j0�rhtj+ ,|j0¡�rVt  !¡ }|j0|d< tj+ 1|j0¡|d< t2|j0|dd	� nd
}t(||j0 ƒ‚d S )NrK   úa+)Úfmtr)   ro   ÚaccessÚ__file__ÚhereF)Údefaultsr/   z Error: log config '%s' not found)3Ú
LOG_LEVELSÚgetÚloglevelrM   r3   r   rs   ÚsetLevelrt   ry   Úcapture_outputÚerrorlogÚsysÚstdoutÚstderrÚflushÚopenru   ÚosÚdup2ÚfilenoÚ_set_handlerÚ	FormatterÚ	error_fmtr-   Ú	accesslogÚ
access_fmtr   Ú_set_syslog_handlerÚ
syslog_fmtÚ!disable_redirect_access_to_syslogÚlogconfig_dictÚCONFIG_DEFAULTSÚcopyÚupdater   ÚAttributeErrorÚImportErrorÚ
ValueErrorÚ	TypeErrorrc   rD   Úlogconfig_jsonÚpathÚexistsÚjsonÚloadZJSONDecodeErrorÚ	logconfigÚdirnamer   )rF   ry   r)   ÚconfigÚexcZconfig_jsonr€   Úmsgr2   r2   r7   rz   Ã   sŒ    
ÿ
 
 þ   ÿ   ÿü 
û 
ÿzLogger.setupc                 O   s   | j j|f|ž|Ž d S ©N)rs   rn   ©rF   r¨   ÚargsÚkwargsr2   r2   r7   rn     s    zLogger.criticalc                 O   s   | j j|f|ž|Ž d S r©   )rs   ro   rª   r2   r2   r7   ro     s    zLogger.errorc                 O   s   | j j|f|ž|Ž d S r©   )rs   rp   rª   r2   r2   r7   rp     s    zLogger.warningc                 O   s   | j j|f|ž|Ž d S r©   )rs   rq   rª   r2   r2   r7   rq     s    zLogger.infoc                 O   s   | j j|f|ž|Ž d S r©   )rs   rr   rª   r2   r2   r7   rr     s    zLogger.debugc                 O   s   | j j|f|ž|Ž d S r©   )rs   Ú	exceptionrª   r2   r2   r7   r­     s    zLogger.exceptionc                 O   s8   t |tƒr| j | ¡ tj¡}| jj||f|ž|Ž d S r©   )	rC   rD   r�   r‚   rM   r3   r   rs   Úlog)rF   Zlvlr¨   r«   r¬   r2   r2   r7   r®     s    
z
Logger.logc           
      C   s†  |j }t|tƒr | dd¡d }| dd¡d|  |¡p8d|  ¡ d|d |d |d	 f || d¡| d
¡| d¡| d	¡t|ddƒdk	r’t|jƒp”dt|ddƒ| dd¡| dd¡|j	|j	d |j
 |j	d t|j
d ƒ d|j	|j
f dt ¡  dœ}t|dƒ�r|j}n|}t|dƒ�r$| ¡ }| dd„ |D ƒ¡ |j}t|dƒ�rR| ¡ }| dd„ |D ƒ¡ | ¡ }	| dd„ |	D ƒ¡ |S )z( Gets atoms for log formatting.
        Nr   r   ZREMOTE_ADDRrK   z%s %s %sZREQUEST_METHODZRAW_URIZSERVER_PROTOCOLZ	PATH_INFOZQUERY_STRINGÚsentZHTTP_REFERERZHTTP_USER_AGENTi@B iè  z%d.%06dz<%s>)ÚhÚlÚuÚtÚrÚsÚmÚUÚqÚHÚbÚBÚfÚaÚTÚDÚMÚLÚpÚheadersrB   c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}i©rM   ©r5   rP   Úvr2   r2   r7   Ú
<dictcomp>I  s     
 z Logger.atoms.<locals>.<dictcomp>c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}orÄ   rÅ   r2   r2   r7   rÇ   P  s     
 c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}erÄ   rÅ   r2   r2   r7   rÇ   T  s     
 )ÚstatusrC   rD   r^   r‚   Ú	_get_userÚnowÚgetattrr¯   ÚsecondsÚmicrosecondsre   rŒ   ÚgetpidÚhasattrrÃ   rB   rš   )
rF   ÚrespÚreqÚenvironÚrequest_timerÈ   rG   Zreq_headersZresp_headersZenviron_variablesr2   r2   r7   rG   "  sN    

þ



ëzLogger.atomsc                 C   sˆ   | j js4| j js4| j js4| j js4| j jr0| j jr4dS |  |  ||||¡¡}z| j	 
| j j|¡ W n" tk
r‚   |  t ¡ ¡ Y nX dS )z\ See http://httpd.apache.org/docs/2.0/logs.html#combined
        for format details
        N)ry   r’   r¤   r—   rŸ   r   r–   Úatoms_wrapper_classrG   rt   rq   Úaccess_log_formatÚ	Exceptionro   Ú	tracebackÚ
format_exc)rF   rÐ   rÑ   rÒ   rÓ   Z
safe_atomsr2   r2   r7   r}   X  s"    ÿÿþþÿzLogger.accessc                 C   s
   t  d¡S )z) return date in Apache Common Log Format z[%d/%b/%Y:%H:%M:%S %z])ÚtimeÚstrftime)rF   r2   r2   r7   rÊ   n  s    z
Logger.nowc              
   C   sì   | j jr”| j jdkr”tjtjfD ]}| ¡  q | j�Z | jd k	rJ| j 	¡  t
| j jdƒ| _t | j ¡ tj ¡ ¡ t | j ¡ tj ¡ ¡ W 5 Q R X tƒ D ]L}|jD ]@}t|tjƒr¤| ¡  z|jrÖ| 	¡  | ¡ |_W 5 | ¡  X q¤qšd S )NrK   r{   )ry   r…   r†   r‡   rˆ   r‰   rŠ   rx   ru   Úcloser‹   rŒ   r�   rŽ   r1   r!   rC   r3   ÚFileHandlerÚacquireÚreleaser)   Ú_open)rF   r)   r®   Úhandlerr2   r2   r7   Úreopen_filesr  s$    


"

zLogger.reopen_filesc              
   C   sV   t ƒ D ]J}|jD ]>}t|tjƒr| ¡  z|jr@t 	|j 
¡ ¡ W 5 | ¡  X qqd S r©   )r1   r!   rC   r3   rÜ   rÝ   rÞ   r)   r   Úclose_on_execrŽ   )rF   r®   rà   r2   r2   r7   râ   ‰  s    

zLogger.close_on_execc                 C   s$   |j D ]}t|ddƒr|  S qd S )NÚ	_gunicornF)r!   rË   )rF   r®   r°   r2   r2   r7   Ú_get_gunicorn_handler”  s    
zLogger._get_gunicorn_handlerNc                 C   sš   |   |¡}|r|j |¡ |d k	r–|dkr6t |¡}nFt |¡ t |¡}zt 	|j
| jj| jj¡ W n tk
rz   Y nX | |¡ d|_| |¡ d S )NrK   T)rä   r!   Úremover3   ÚStreamHandlerr   Úcheck_is_writablerÜ   rŒ   ÚchownÚbaseFilenamery   r   ÚgroupÚOSErrorÚsetFormatterrã   Ú
addHandler)rF   r®   Úoutputr|   r)   r°   r2   r2   r7   r�   ™  s    



zLogger._set_handlerc           
      C   s    |j p|j dd¡}d||f }t d||f ¡}zt|j ¡  }W n tk
r`   t	dƒ‚Y nX t
|jƒ\}}tjj|||d�}	|	 |¡ d|	_| |	¡ d S )Nr[   Ú.zgunicorn.%s.%sz%s: %szunknown facility name)ÚaddressÚfacilityri   T)Úsyslog_prefixÚ	proc_namerE   r3   r�   ÚSYSLOG_FACILITIESÚsyslog_facilityrM   ÚKeyErrorrc   rl   Úsyslog_addrr!   ZSysLogHandlerrì   rã   rí   )
rF   r®   ry   r|   r6   Úprefixrñ   ri   rf   r°   r2   r2   r7   r”   ±  s     ÿ
zLogger._set_syslog_handlerc              
   C   s¦   d }|  d¡}|r¢| ¡  d¡r¢| dd¡}t|ƒdkr¢z2t |d  ¡  d¡¡}| dd¡d  	d	¡}W n6 t
tjtfk
r  } z|  d
|¡ W 5 d }~X Y nX |S )NZHTTP_AUTHORIZATIONZbasicú r   r   zutf-8ó   :r   zUTF-8zCouldn't get username: %s)r‚   rM   rL   r^   r_   Úbase64Ú	b64decodeÚstripÚencodeÚdecoderž   ÚbinasciiÚErrorÚUnicodeDecodeErrorrr   )rF   rÒ   r   Z	http_authr   r§   r2   r2   r7   rÉ   Ë  s    
zLogger._get_user)N)#rT   rU   rV   r3   ÚCRITICALÚERRORÚWARNINGr   ÚDEBUGr�   rƒ   r‘   r-   r“   r•   r>   rÔ   rA   rz   rn   ro   rp   rq   rr   r­   r®   rG   r}   rÊ   rá   râ   rä   r�   r”   rÉ   r2   r2   r2   r7   rm   ¤   s<   ûH6
rm   )rû   r   r¢   rÙ   r3   rm   r:   ÚemittedNoHandlerWarningZlogging.configr   r   rŒ   r`   r‡   rv   r×   Úgunicornr   rô   r˜   r1   r@   r>   rl   r2   r2   r2   r7   Ú<module>   sŠ   
ë
üüøýýúýÿá).