509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ÝPf8Z  ã               @   sÜ   d dl mZ d dlZd dlZd dlZd dlZd dlmZ ej	dej
ƒZdd„ Zyd dlmZ W n ek
rz   dd	„ ZY nX G d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeZdd„ ZdS )é    )Úabsolute_importN)Úsixz^[a-z_][a-z0-9_]*$c             C   s   t j| ƒ}|std|  ƒ‚dS )Nz!Not a valid Python identifier: %rT)Ú
IDENTIFIERÚmatchÚ
ValueError)ÚsÚm© r	   ú /usr/lib/python3.6/dictconfig.pyÚvalid_ident"   s    
r   )Ú_checkLevelc             C   sN   t | tƒr| }n:t| ƒ| kr>| tjkr2td|  ƒ‚tj|  }ntd|  ƒ‚|S )NzUnknown level: %rz*Level not an integer or a valid string: %r)Ú
isinstanceÚintÚstrÚloggingZ_levelNamesr   Ú	TypeError)ÚlevelÚrvr	   r	   r
   r   .   s    

r   c               @   s,   e Zd ZdZdd„ Zd	dd„Zd
dd„ZdS )ÚConvertingDictz A converting dictionary wrapper.c             C   sJ   t j| |ƒ}| jj|ƒ}||k	rF|| |< t|ƒtttfkrF| |_||_	|S )N)
ÚdictÚ__getitem__ÚconfiguratorÚconvertÚtyper   ÚConvertingListÚConvertingTupleÚparentÚkey)Úselfr   ÚvalueÚresultr	   r	   r
   r   G   s    
zConvertingDict.__getitem__Nc             C   sL   t j| ||ƒ}| jj|ƒ}||k	rH|| |< t|ƒtttfkrH| |_||_	|S )N)
r   Úgetr   r   r   r   r   r   r   r   )r   r   Údefaultr   r    r	   r	   r
   r!   S   s    
zConvertingDict.getc             C   sD   t j| ||ƒ}| jj|ƒ}||k	r@t|ƒtttfkr@| |_||_	|S )N)
r   Úpopr   r   r   r   r   r   r   r   )r   r   r"   r   r    r	   r	   r
   r#   _   s    
zConvertingDict.pop)N)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r!   r#   r	   r	   r	   r
   r   D   s   
r   c               @   s"   e Zd ZdZdd„ Zd	dd„ZdS )
r   zA converting list wrapper.c             C   sJ   t j| |ƒ}| jj|ƒ}||k	rF|| |< t|ƒtttfkrF| |_||_	|S )N)
Úlistr   r   r   r   r   r   r   r   r   )r   r   r   r    r	   r	   r
   r   l   s    
zConvertingList.__getitem__é   c             C   s<   t j| |ƒ}| jj|ƒ}||k	r8t|ƒtttfkr8| |_|S )N)	r(   r#   r   r   r   r   r   r   r   )r   Úidxr   r    r	   r	   r
   r#   x   s    
zConvertingList.popNéÿÿÿÿ)r+   )r$   r%   r&   r'   r   r#   r	   r	   r	   r
   r   j   s   r   c               @   s   e Zd ZdZdd„ ZdS )r   zA converting tuple wrapper.c             C   sB   t j| |ƒ}| jj|ƒ}||k	r>t|ƒtttfkr>| |_||_	|S )N)
Útupler   r   r   r   r   r   r   r   r   )r   r   r   r    r	   r	   r
   r   „   s    
zConvertingTuple.__getitem__N)r$   r%   r&   r'   r   r	   r	   r	   r
   r   ‚   s   r   c               @   sˆ   e Zd ZdZejdƒZejdƒZejdƒZejdƒZ	ejdƒZ
dd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S )ÚBaseConfiguratorzI
    The configurator base class which defines some useful defaults.
    z%^(?P<prefix>[a-z]+)://(?P<suffix>.*)$z^\s*(\w+)\s*z^\.\s*(\w+)\s*z^\[\s*(\w+)\s*\]\s*z^\d+$Úext_convertÚcfg_convert)ZextZcfgc             C   s   t |ƒ| _| | j_d S )N)r   Úconfigr   )r   r0   r	   r	   r
   Ú__init__£   s    
zBaseConfigurator.__init__c       	      C   sÄ   |j dƒ}|jdƒ}y`| j|ƒ}xP|D ]H}|d| 7 }yt||ƒ}W q& tk
rl   | j|ƒ t||ƒ}Y q&X q&W |S  tk
r¾   tjƒ dd… \}}td||f ƒ}|| |_	|_
|‚Y nX dS )z`
        Resolve strings to objects using standard import and attribute
        syntax.
        Ú.r   r)   NzCannot resolve %r: %s)Úsplitr#   ÚimporterÚgetattrÚAttributeErrorÚImportErrorÚsysÚexc_infor   Ú	__cause__Ú__traceback__)	r   r   ÚnameZusedÚfoundZfragÚeÚtbÚvr	   r	   r
   Úresolve§   s"    




zBaseConfigurator.resolvec             C   s
   | j |ƒS )z*Default converter for the ext:// protocol.)rA   )r   r   r	   r	   r
   r.   ¾   s    zBaseConfigurator.ext_convertc             C   s  |}| j j|ƒ}|dkr&td| ƒ‚nØ||jƒ d… }| j|jƒ d  }x´|rü| jj|ƒ}|rp||jƒ d  }nd| jj|ƒ}|rÔ|jƒ d }| jj|ƒs¢|| }n2yt	|ƒ}|| }W n t
k
rÒ   || }Y nX |rê||jƒ d… }qJtd||f ƒ‚qJW |S )z*Default converter for the cfg:// protocol.NzUnable to convert %rr   zUnable to convert %r at %r)ÚWORD_PATTERNr   r   Úendr0   ÚgroupsÚDOT_PATTERNÚINDEX_PATTERNÚDIGIT_PATTERNr   r   )r   r   Úrestr   Údr*   Únr	   r	   r
   r/   Â   s2    
zBaseConfigurator.cfg_convertc             C   sÎ   t |tƒ r&t |tƒr&t|ƒ}| |_n¤t |tƒ rLt |tƒrLt|ƒ}| |_n~t |tƒ rrt |tƒrrt|ƒ}| |_nXt |tj	ƒrÊ| j
j|ƒ}|rÊ|jƒ }|d }| jj|dƒ}|rÊ|d }t| |ƒ}||ƒ}|S )zé
        Convert values to an appropriate type. dicts, lists and tuples are
        replaced by their converting alternatives. Strings are checked to
        see if they have a conversion format and are converted if they do.
        ÚprefixNÚsuffix)r   r   r   r   r   r(   r   r,   r   Zstring_typesÚCONVERT_PATTERNr   Ú	groupdictÚvalue_convertersr!   r5   )r   r   r   rI   rK   Z	converterrL   r	   r	   r
   r   ä   s*    

zBaseConfigurator.convertc                sŽ   ˆ j dƒ}t|dƒ r8ttdƒr8t|ƒtjkr8| j|ƒ}ˆ j ddƒ}t‡ fdd„ˆ D ƒƒ}|f |Ž}|rŠx |jƒ D ]\}}t|||ƒ qrW |S )z1Configure an object with a user-supplied factory.z()Ú__call__Ú	ClassTyper2   Nc             3   s"   | ]}t |ƒr|ˆ | fV  qd S )N)r   )Ú.0Úk)r0   r	   r
   ú	<genexpr>  s    z4BaseConfigurator.configure_custom.<locals>.<genexpr>)	r#   ÚhasattrÚtypesr   rQ   rA   r   ÚitemsÚsetattr)r   r0   ÚcZpropsÚkwargsr    r<   r   r	   )r0   r
   Úconfigure_custom   s    
$

z!BaseConfigurator.configure_customc             C   s   t |tƒrt|ƒ}|S )z0Utility function which converts lists to tuples.)r   r(   r,   )r   r   r	   r	   r
   Úas_tuple  s    
zBaseConfigurator.as_tupleN)r$   r%   r&   r'   ÚreÚcompilerM   rB   rE   rF   rG   rO   Ú
__import__r4   r1   rA   r.   r/   r   r[   r\   r	   r	   r	   r
   r-   �   s    




"r-   c               @   s^   e Zd Z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d„Zddd„ZdS )ÚDictConfiguratorz]
    Configure logging using a dictionary-like object to describe the
    configuration.
    c             C   sØ  | j }d|krtdƒ‚|d dkr2td|d  ƒ‚|jddƒ}i }tjƒ  �z||�rÄ|jd|ƒ}tjdd	… dk�rxŽ|D ]†}|tjkr–td| ƒ‚qzy4tj| }|| }|jddƒ}|rÈ|j	t
|ƒƒ W qz tk
� rþ }	 ztd||	f ƒ‚W Y dd}	~	X qzX qzW |jd|ƒ}
xZ|
D ]R}y| j||
| dƒ W n4 tk
�rd }	 ztd||	f ƒ‚W Y dd}	~	X nX �qW |jddƒ}|�rÆy| j|dƒ W n0 tk
�r¾ }	 ztd|	 ƒ‚W Y dd}	~	X nX �n|jddƒ}tjjƒ  tjdd…= |jd|ƒ}xZ|D ]R}y| j|| ƒ||< W n4 tk
�rF }	 ztd||	f ƒ‚W Y dd}	~	X nX �qøW |jd|ƒ}xZ|D ]R}y| j|| ƒ||< W n4 tk
�r® }	 ztd||	f ƒ‚W Y dd}	~	X nX �q`W |jd|ƒ}xht|ƒD ]\}y | j|| ƒ}||_|||< W n4 tk
�r$ }	 ztd||	f ƒ‚W Y dd}	~	X nX �qÌW tj}t|jjƒ}|jƒ  g }|jd|ƒ}
xÔ|
D ]Ì}||k�rÜ|j|ƒ}|d }t|ƒ}t|ƒ}|d }x<||k �rÐ|| d|… |k�rÐ|j|| ƒ |d }�q–W |j|ƒ y| j||
| ƒ W n4 tk
�r$ }	 ztd||	f ƒ‚W Y dd}	~	X nX �q\W xF|D ]>}|jj| }||k�rbtj|_g |_ d|_!n|�r2d|_"�q2W |jddƒ}|�rÆy| j|ƒ W n0 tk
�rÄ }	 ztd|	 ƒ‚W Y dd}	~	X nX W dtj#ƒ  X dS )zDo the configuration.Úversionz$dictionary doesn't specify a versionr)   zUnsupported version: %sÚincrementalFÚhandlersNé   é   zNo handler found with name %rr   z"Unable to configure handler %r: %sÚloggersTz!Unable to configure logger %r: %sÚrootz#Unable to configure root logger: %sZdisable_existing_loggersÚ
formattersz$Unable to configure formatter %r: %sÚfiltersz!Unable to configure filter %r: %sr2   )rd   re   )$r0   r   r#   r   Z_acquireLockr!   r8   Úversion_infoZ	_handlersÚsetLevelr   ÚStandardErrorÚconfigure_loggerÚconfigure_rootÚclearZ_handlerListÚconfigure_formatterÚconfigure_filterÚsortedÚconfigure_handlerr<   rg   r(   ZmanagerZ
loggerDictÚsortÚindexÚlenÚappendÚremoveZNOTSETr   rc   Ú	propagateZdisabledZ_releaseLock)r   r0   rb   Z
EMPTY_DICTrc   r<   ZhandlerZhandler_configr   r>   rf   rg   Zdisable_existingrh   ri   ZexistingZchild_loggersÚiZprefixedZpflenZnum_existingÚlogÚloggerr	   r	   r
   Ú	configure  sÐ    



"
$

$
$$



$

zDictConfigurator.configurec             C   sš   d|krr|d }y| j |ƒ}W q– tk
rn } z4dt|ƒkr>‚ |jdƒ|d< ||d< | j |ƒ}W Y dd}~X q–X n$|jddƒ}|jddƒ}tj||ƒ}|S )z(Configure a formatter from a dictionary.z()z'format'ÚformatÚfmtNZdatefmt)r[   r   r   r#   r!   r   Z	Formatter)r   r0   Úfactoryr    Úter   Zdfmtr	   r	   r
   rp   ­  s    z$DictConfigurator.configure_formatterc             C   s.   d|kr| j |ƒ}n|jddƒ}tj|ƒ}|S )z%Configure a filter from a dictionary.z()r<   Ú )r[   r!   r   ÚFilter)r   r0   r    r<   r	   r	   r
   rq   Ã  s
    
z!DictConfigurator.configure_filterc             C   s^   xX|D ]P}y|j | jd | ƒ W q tk
rT } ztd||f ƒ‚W Y dd}~X qX qW dS )z/Add filters to a filterer from a list of names.ri   zUnable to add filter %r: %sN)Z	addFilterr0   rl   r   )r   Zfiltererri   Úfr>   r	   r	   r
   Úadd_filtersÌ  s
    
zDictConfigurator.add_filtersc          -      s@  ˆ j ddƒ}|rVy| jd | }W n2 tk
rT } ztd||f ƒ‚W Y dd}~X nX ˆ j ddƒ}ˆ j ddƒ}dˆ kr´ˆ j dƒ}t|dƒ r®ttd	ƒr®t|ƒtjkr®| j|ƒ}|}nÜ| jˆ j d
ƒƒ}t	|t
jjƒoØdˆ k�r2y| jd ˆ d  ˆ d< W n8 tk
�r. } ztdˆ d |f ƒ‚W Y dd}~X nX nZt	|t
jjƒ�r`dˆ k�r`| jˆ d ƒˆ d< n,t	|t
jjƒ�rŒdˆ k�rŒ| jˆ d ƒˆ d< |}t‡ fdd„ˆ D ƒƒ}	y|f |	Ž}
W nL tk
�r  } z.dt|ƒk�rØ‚ |	j dƒ|	d< |f |	Ž}
W Y dd}~X nX |�r|
j|ƒ |dk	�r*|
jt|ƒƒ |�r<| j|
|ƒ |
S )z&Configure a handler from a dictionary.Ú	formatterNrh   zUnable to set formatter %r: %sr   ri   z()rP   rQ   ÚclassÚtargetrc   z#Unable to set target handler %r: %sZmailhostZaddressc             3   s"   | ]}t |ƒr|ˆ | fV  qd S )N)r   )rR   rS   )r0   r	   r
   rT   õ  s    z5DictConfigurator.configure_handler.<locals>.<genexpr>z'stream'ÚstreamZstrm)r#   r0   rl   r   rU   rV   r   rQ   rA   Ú
issubclassr   rc   ZMemoryHandlerZSMTPHandlerr\   ZSysLogHandlerr   r   r   ZsetFormatterrk   r   r…   )r   r0   r†   r>   r   ri   rY   r€   ÚklassrZ   r    r�   r	   )r0   r
   rs   Ô  sX    
$

$



z"DictConfigurator.configure_handlerc             C   s^   xX|D ]P}y|j | jd | ƒ W q tk
rT } ztd||f ƒ‚W Y dd}~X qX qW dS )z.Add handlers to a logger from a list of names.rc   zUnable to add handler %r: %sN)Z
addHandlerr0   rl   r   )r   r|   rc   Úhr>   r	   r	   r
   Úadd_handlers	  s
    
zDictConfigurator.add_handlersFc             C   s„   |j ddƒ}|dk	r"|jt|ƒƒ |s€x |jdd… D ]}|j|ƒ q6W |j ddƒ}|rd| j||ƒ |j ddƒ}|r€| j||ƒ dS )zU
        Perform configuration which is common to root and non-root loggers.
        r   Nrc   ri   )r!   rk   r   rc   ZremoveHandlerr�   r…   )r   r|   r0   rb   r   rŒ   rc   ri   r	   r	   r
   Úcommon_logger_config  s    z%DictConfigurator.common_logger_configc             C   s6   t j|ƒ}| j|||ƒ |jddƒ}|dk	r2||_dS )z.Configure a non-root logger from a dictionary.ry   N)r   Ú	getLoggerrŽ   r!   ry   )r   r<   r0   rb   r|   ry   r	   r	   r
   rm   #  s
    
z!DictConfigurator.configure_loggerc             C   s   t jƒ }| j|||ƒ dS )z*Configure a root logger from a dictionary.N)r   r�   rŽ   )r   r0   rb   rg   r	   r	   r
   rn   +  s    zDictConfigurator.configure_rootN)F)F)F)r$   r%   r&   r'   r}   rp   rq   r…   rs   r�   rŽ   rm   rn   r	   r	   r	   r
   r`     s    	5

r`   c             C   s   t | ƒjƒ  dS )z%Configure logging using a dictionary.N)ÚdictConfigClassr}   )r0   r	   r	   r
   Ú
dictConfig3  s    r‘   )Z
__future__r   Zlogging.handlersr   r]   r8   rV   Zpip._vendorr   r^   ÚIr   r   r   r7   r   r   r(   r   r,   r   Úobjectr-   r`   r�   r‘   r	   r	   r	   r
   Ú<module>   s*   	&   