3
LY8Z                 @   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	   h/private/var/folders/7d/20zwc49s3kn54d3vgq8bd4640000gn/T/pip-build-an2lx5zf/pip/pip/compat/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)extcfgc             C   s   t || _| | j_d S )N)r   configr   )r   r2   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   nameusedfoundfragetbvr	   r	   r
   resolve   s"    




zBaseConfigurator.resolvec             C   s
   | j |S )z*Default converter for the ext:// protocol.)rE   )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   endr2   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|}| |_nt |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   string_typesCONVERT_PATTERNr   	groupdictvalue_convertersr!   r7   )r   r   r   rM   rO   	converterrP   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 |}|rx |j D ]\}}t||| qrW |S )z1Configure an object with a user-supplied factory.z()__call__	ClassTyper4   Nc             3   s"   | ]}t |r| | fV  qd S )N)r   ).0k)r2   r	   r
   	<genexpr>  s    z4BaseConfigurator.configure_custom.<locals>.<genexpr>)	r#   hasattrtypesr   rW   rE   r   itemssetattr)r   r2   cpropskwargsr    r>   r   r	   )r2   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compilerR   rF   rI   rJ   rK   rT   
__import__r6   r3   rE   r.   r/   r   rb   rc   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rt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}|ry| 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 qW |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 qW 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 }qW |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}|ry| 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: %sdisable_existing_loggers
formattersz$Unable to configure formatter %r: %sfiltersz!Unable to configure filter %r: %sr4   )rk   rl   )$r2   r   r#   r   _acquireLockr!   r:   version_info	_handlerssetLevelr   StandardErrorconfigure_loggerconfigure_rootclear_handlerListconfigure_formatterconfigure_filtersortedconfigure_handlerr>   rn   r(   manager
loggerDictsortindexlenappendremoveNOTSETr   rj   	propagatedisabled_releaseLock)r   r2   ri   
EMPTY_DICTrj   r>   handlerhandler_configr   rB   rm   rn   disable_existingrp   rq   existingchild_loggersiprefixedpflen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 qX n$|jdd}|jdd}tj||}|S )z(Configure a formatter from a dictionary.z()z'format'formatfmtNdatefmt)rb   r   r   r#   r!   r   	Formatter)r   r2   factoryr    ter   dfmtr	   r	   r
   r{     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>    )rb   r!   r   Filter)r   r2   r    r>   r	   r	   r
   r|     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.rq   zUnable to add filter %r: %sN)	addFilterr2   rv   r   )r   filtererrq   frB   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 rttd	rt|tjkr| j|}|}n| j j d
}t	|t
jjod 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rd 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.	formatterNrp   zUnable to set formatter %r: %sr   rq   z()rV   rW   classtargetrj   z#Unable to set target handler %r: %smailhostaddressc             3   s"   | ]}t |r| | fV  qd S )N)r   )rX   rY   )r2   r	   r
   rZ     s    z5DictConfigurator.configure_handler.<locals>.<genexpr>z'stream'streamstrm)r#   r2   rv   r   r[   r\   r   rW   rE   
issubclassr   rj   MemoryHandlerSMTPHandlerrc   SysLogHandlerr   r   r   setFormatterru   r   r   )r   r2   r   rB   r   rq   r_   r   klassra   r    r   r	   )r2   r
   r~     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.rj   zUnable to add handler %r: %sN)
addHandlerr2   rv   r   )r   r   rj   hrB   r	   r	   r
   add_handlers	  s
    
zDictConfigurator.add_handlersFc             C   s   |j dd}|dk	r"|jt| |sx |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   Nrj   rq   )r!   ru   r   rj   removeHandlerr   r   )r   r   r2   ri   r   r   rj   rq   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.r   N)r   	getLoggerr   r!   r   )r   r>   r2   ri   r   r   r	   r	   r
   rw   #  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   r2   ri   rn   r	   r	   r
   rx   +  s    zDictConfigurator.configure_rootN)F)F)F)r$   r%   r&   r'   r   r{   r|   r   r~   r   r   rw   rx   r	   r	   r	   r
   rg     s    	5

rg   c             C   s   t | j  dS )z%Configure logging using a dictionary.N)dictConfigClassr   )r2   r	   r	   r
   
dictConfig3  s    r   )
__future__r   logging.handlersr   rd   r:   r\   pip._vendorr   re   Ir   r   r   r9   r   r   r(   r   r,   r   objectr-   rg   r   r   r	   r	   r	   r
   <module>   s*   	&   