
§|j8Z  ã               @   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-5c7ija6t/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&   	&†ÿ 