
}_8Z                 @   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 Wn e k
 r d d	   Z Yn XGd
 d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd 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	   4/tmp/pip-build-3_sjtvrs/pip/pip/compat/dictconfig.pyvalid_ident"   s    r   )_checkLevelc             C   sm   t  |  t  r |  } nQ t |   |  k rY |  t j k rI t 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   sk   t  j |  |  } |  j j |  } | | k	 rg | |  | <t |  t t t f k rg |  | _ | | _	 | S)N)
dict__getitem__configuratorconverttyper   ConvertingListConvertingTupleparentkey)selfr   valueresultr	   r	   r
   r   G   s    
		zConvertingDict.__getitem__Nc             C   sn   t  j |  | |  } |  j j |  } | | k	 rj | |  | <t |  t t t f k rj |  | _ | | _	 | 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)__name__
__module____qualname____doc__r   r!   r#   r	   r	   r	   r
   r   D   s   r   c               @   s1   e  Z d  Z d Z d d   Z d d d  Z d S)	r   zA converting list wrapper.c             C   sk   t  j |  |  } |  j j |  } | | k	 rg | |  | <t |  t t t f k rg |  | _ | | _	 | 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   sX   t  j |  |  } |  j j |  } | | k	 rT t |  t t t f k rT |  | _ | 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   j   s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)r   zA converting tuple wrapper.c             C   sa   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	 d
 i 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ext_convertcfgcfg_convertc             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  } yz |  j |  } x` | D]X } | d | 7} y t | |  } Wq7 t k
 r |  j |  t | |  } Yq7 Xq7 W| SWn] t k
 r t j   d d  \ } } t d | | f  } | | | _	 | _
 |  Yn Xd 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   sY  | } |  j  j |  } | d k r7 t d |   n| | j   d  } |  j | j   d } x | rT|  j j |  } | r | | j   d } n |  j j |  } | r| j   d } |  j j |  s | | } n9 y t	 |  } | | } Wn t
 k
 r| | } Yn X| r;| | j   d  } qg t d | | f   qg W| 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
   r1      s2    	zBaseConfigurator.cfg_convertc             C   s)  t  | t  r7 t  | t  r7 t |  } |  | _ n t  | t  rn t  | t  rn t |  } |  | _ n t  | t  r t  | t  r t |  } |  | _ n t  | 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  rR t t d  rR t |  t j k rR |  j |  }   j  d d  } t   f d d     D  } | |   } | r x* | j   D] \ } } t | | |  q W| 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    4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/   r1   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 rE t d | d   | j d d  } i  } t j   z| r5| j d |  } t j d d	  d k rRx | D] } | t j k r t d |   q yF t j | } | | } | j d d  } | r| j	 t
 |   Wq t k
 rM}	 z t d | |	 f   WYd d }	 ~	 Xq Xq W| j d |  }
 xg |
 D]_ } y |  j | |
 | d  Wqkt k
 r}	 z t d | |	 f   WYd d }	 ~	 XqkXqkW| j d d  } | ry |  j | d  Wqt k
 r1}	 z t d |	   WYd d }	 ~	 XqXn| j d d  } t j j   t j d d  =| j d |  } xg | D]_ } y |  j | |  | | <Wq}t k
 r}	 z t d | |	 f   WYd d }	 ~	 Xq}Xq}W| j d |  } xg | D]_ } y |  j | |  | | <Wqt k
 rW}	 z t d | |	 f   WYd d }	 ~	 XqXqW| j d |  } x| t |  D]n } y* |  j | |  } | | _ | | | <Wq{t k
 r}	 z t d | |	 f   WYd d }	 ~	 Xq{Xq{Wt j } t | j j  } | j   g  } | j d |  }
 x |
 D] } | | k r| j |  } | d } t |  } t |  } | d } xE | | k  r| | d |  | k r| j | |  | d } qW| j |  y |  j | |
 |  Wq1t k
 r(}	 z t d | |	 f   WYd d }	 ~	 Xq1Xq1WxZ | D]R } | j j | } | | k rwt j | _ g  | _  d | _! q4| r4d | _" q4W| j d d  } | ry |  j |  Wn5 t k
 r}	 z t d |	   WYd d }	 ~	 Xn XWd t j#   Xd 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 r | d } y |  j  |  } Wq t k
 r } zF d t |  k rS   | j d  | d <| | d <|  j  |  } WYd d } ~ Xq Xn6 | 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   sC   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   so   xh | D]` } y | j  |  j d |  Wq t k
 rf } z t d | | f   WYd d } ~ Xq Xq Wd 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  } | rk y |  j d | } Wn; t k
 rj } z t d | | f   WYd d } ~ Xn 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  rd   k ry |  j d   d   d <Wqt k
 r} z t d   d | f   WYd d } ~ XqXns t	 | t
 j j  rd   k r|  j   d    d <n8 t	 | t
 j j  rd   k r|  j   d    d <| } t   f d d     D  }	 y | |	   }
 WnY t k
 r} z9 d t |  k rc  |	 j  d  |	 d <| |	   }
 WYd d } ~ Xn 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    #4	*z"DictConfigurator.configure_handlerc             C   so   xh | D]` } y | j  |  j d |  Wq t k
 rf } z t d | | f   WYd d } ~ Xq Xq Wd 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	 r1 | j t |   | s x( | j d d  D] } | j |  qK W| j  d d  } | r |  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   sM   t  j |  } |  j | | |  | j d d  } | d k	 rI | | _ 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)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&   	& 