
lz]c           @` s  d  Z  d d l m Z m Z m Z m Z d d l m Z m Z d d l	 m
 Z
 y d d l m Z Wn! e k
 r d d l	 m Z n Xd d l m Z d d l m Z d d l m Z d d	 l m Z m Z d d
 l m Z m Z m Z d d l m Z m Z m Z d d l m Z m Z d d l  m! Z! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' m( Z( m) Z) d d l* m+ Z+ d d l, m- Z- d d l. m/ Z/ d d l0 m1 Z1 m2 Z2 d d l3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 d d l8 m9 Z9 d d l: m; Z; m< Z< d d l= m> Z> d d l? m@ Z@ d d lA mB ZB mC ZC mD ZD mE ZE mF ZF y: d d lG mH ZH mI ZI d d lJ mK ZK d d lL mM ZM WnG e k
 rd d lN mH ZH mI ZI d d lO mK ZK d d lP mM ZM n Xe eQ  ZR e>   ZS d d  ZT d d  ZU d    ZV d! e1 f d"     YZW d# eW f d$     YZX d% eW f d&     YZY d' eY f d(     YZZ d) eY f d*     YZ[ d+ e[ f d,     YZ\ d- eY f d.     YZ] d/ e2 eW f d0     YZ^ d1   Z_ d2 e f d3     YZ` e) e  d4 ea f d5     Y Zb d6 eb f d7     YZc d8 eb f d9     YZd d: eb f d;     YZe d<   Zf e) e  d= ea f d>     Y Zg d? eg f d@     YZh dA eg f dB     YZi dC eg f dD     YZj dE ek f dF     YZl e) el  dG ea f dH     Y Zm dI S(J   u`  
A generalized application configuration utility.

Features include:
  - lazy eval
  - merges configuration files
  - parameter type validation, with custom validation
  - parameter aliases

Easily extensible to other source formats, e.g. json and ini

Limitations:
  - at the moment only supports a "flat" config structure; no nested data structures

i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   ABCMetat   abstractmethod(   t   defaultdict(   t   Mapping(   t   glob(   t   chain(   t	   getLogger(   t   environt   stat(   t   basenamet   joint
   expandvars(   t   S_IFDIRt   S_IFMTt   S_IFREG(   t   Enumt   EnumMetai   (	   t   binary_typet
   isiterablet	   iteritemst
   itervaluest   odictt   primitive_typest   string_typest	   text_typet   with_metaclass(   t   NULL(   t   expand(   t	   yaml_loadi   (   t
   CondaErrort   CondaMultiError(   t   AttrDictt   firstt   lastt   make_immutable(   t   ThisShouldNeverHappenError(   t   TypeCoercionErrort   typify_data_structure(   t
   frozendict(   t
   IndexedSet(   t   concatt   concatvt   exceptst   merget   unique(   t   CommentedSeqt   CommentedMap(   t   ReaderError(   t   ScannerErroru     c         ` s^   t  |   s |  g }  n  y! d j   f d   |  D  SWn t k
 rY t |  g    SXd  S(   Nu   
c         3` s   |  ] } d    | f Vq d S(   u   %s- %sN(    (   t   .0t   item(   t   padding(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>C   s    (   R   R   t	   TypeErrort   pretty_list(   t   iterableR7   (    (   R7   s9   lib/python2.7/site-packages/conda/common/configuration.pyR9   ?   s    !c         ` s#   d j    f d   t |   D  S(   Nu   
c         3` s(   |  ] \ } } d    | | f Vq d S(   u   %s%s: %sN(    (   R5   t   keyt   value(   R7   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>I   s    (   R   R   (   t
   dictionaryR7   (    (   R7   s9   lib/python2.7/site-packages/conda/common/configuration.pyt
   pretty_mapH   s    c         C` s0   t  |  t  s t  |  t  r( t |   S|  Sd  S(   N(   t
   isinstanceR   R   R   (   t
   unexpanded(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   expand_environment_variablesL   s    
t   ConfigurationErrorc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRB   R   s   t   ConfigurationLoadErrorc           B` s   e  Z d  d  Z RS(   u    c         K` s-   d } t  t |   j | | d | | d  S(   Nu4   Unable to load configuration file.
  path: %(path)s
t   path(   t   superRE   t   __init__(   t   selfRF   t   message_additiont   kwargst   message(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   W   s    (   RC   RD   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRE   V   s   t   ValidationErrorc           B` s   e  Z d d   Z RS(   c         K` s8   | |  _  | |  _ | |  _ t t |   j | |  d  S(   N(   t   parameter_namet   parameter_valuet   sourceRG   RM   RH   (   RI   RN   RO   RP   t   msgRK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   _   s    			N(   RC   RD   t   NoneRH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRM   ]   s   t   MultipleKeysErrorc           B` s   e  Z d    Z RS(   c         C` sQ   | |  _  | |  _ d | t |  | f } t t |   j | d  | d | d  S(   NuF   Multiple aliased keys in file %s:
%sMust declare only one. Prefer '%s'RQ   (   RP   t   keysR9   RG   RS   RH   RR   (   RI   RP   RT   t   preferred_keyRQ   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   h   s
    		(   RC   RD   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRS   f   s   t   InvalidTypeErrorc           B` s   e  Z d d   Z RS(   c         C` sf   | |  _  | |  _ | d  k r@ d | | | | t |  f } n  t t |   j | | | d | d  S(   Nu=   Parameter %s = %r declared in %s has type %s.
Valid types:
%sRQ   (   t
   wrong_typet   valid_typesRR   R9   RG   RV   RH   (   RI   RN   RO   RP   RW   RX   RQ   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   r   s    		N(   RC   RD   RR   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRV   q   s   t   InvalidElementTypeErrorc           B` s   e  Z d    Z RS(   c   	      C` si   t  | t  r d n d } d | | | | | t |  f } t t |   j | | | | | d | d  S(   Nu   at indexu   for keyuR   Parameter %s declared in %s has invalid element %r %s %s.
Valid element types:
%s.RQ   (   R?   t   intR9   RG   RY   RH   (	   RI   RN   RO   RP   RW   RX   t   index_or_keyt	   qualifierRQ   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   }   s    (   RC   RD   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRY   |   s   t   CustomValidationErrorc           B` s   e  Z d    Z RS(   c         C` s<   d | | | | f } t  t |   j | | | d | d  S(   Nu/   Parameter %s = %r declared in %s is invalid.
%sRQ   (   RG   R]   RH   (   RI   RN   RO   RP   t   custom_messageRQ   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH      s    (   RC   RD   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR]      s   t   MultiValidationErrorc           B` s   e  Z d    Z RS(   c         O` s    t  t |   j | | |  d  S(   N(   RG   R_   RH   (   RI   t   errorst   argsRK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH      s    (   RC   RD   RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR_      s   c         C` s9   |  s
 t  St |   d k r) |  d  n t |    d  S(   Ni   i    (   t   Truet   lenR_   (   R`   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   raise_errors   s
    t   ParameterFlagc           B` sP   e  Z d  Z d Z d Z d   Z e d    Z e d    Z e d    Z	 RS(   u   finalu   topu   bottomc         C` s   d |  j  S(   Nu   %s(   R<   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __str__   s    c         C` s   |  | S(   N(    (   t   clst   name(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt	   from_name   s    c         C` s
   |  |  S(   N(    (   Rg   R<   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt
   from_value   s    c         C` s?   y  | j  d  } |  j |  SWn t t f k
 r: d  SXd  S(   Nu   !#(   t   stripRj   t
   ValueErrort   AttributeErrorRR   (   Rg   t   string(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   from_string   s
    (
   RC   RD   t   finalt   topt   bottomRf   t   classmethodRi   Rj   Ro   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRe      s   	t   RawParameterc           B` sV   e  Z d    Z d   Z e d    Z e d    Z e d    Z e d    Z	 RS(   c         C` sE   | |  _  | |  _ y t | j d   |  _ Wn | |  _ n Xd  S(   Nu   utf-8(   RP   R;   t   unicodet   decodet
   _raw_value(   RI   RP   R;   t	   raw_value(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH      s    		c         C` s   t  t |    S(   N(   R   t   vars(   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __repr__   s    c         C` s   t     d  S(   N(   t   NotImplementedError(   RI   t   parameter_obj(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR<      s    c         C` s   t     d  S(   N(   R{   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   keyflag   s    c         C` s   t     d  S(   N(   R{   (   RI   R|   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt
   valueflags   s    c         ` s*    r& t      f d    D  St S(   Nc         3` s+   |  ]! } |    |  |  f Vq d  S(   N(    (   R5   R;   (   Rg   t   from_mapRP   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    (   t   dictt	   EMPTY_MAP(   Rg   RP   R   (    (   Rg   R   RP   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   make_raw_parameters   s     (
   RC   RD   RH   Rz   R   R<   R}   R~   Rs   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRt      s   			t   EnvRawParameterc           B` sG   e  Z d  Z d   Z d   Z d   Z e d    Z e d    Z	 RS(   u   envvarsc         C` su   t  | d  r` t |  j t  s' t  t | d  } t d   d   |  j j |  D D  S|  j d j	   Sd  S(   Nu   string_delimiterc         s` s   |  ] } | r | Vq d  S(   N(    (   R5   t   v(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    c         s` s   |  ] } | j    Vq d  S(   N(   Rk   (   R5   t   vv(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    i    (
   t   hasattrR?   Rw   R   t   AssertionErrort   getattrt   tuplet   splitt'   _EnvRawParameter__important_split_valueRk   (   RI   R|   t   string_delimiter(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR<      s    	!c         C` s    t  |  j  d k r t j Sd  S(   Ni   (   Rc   R   Re   Rp   RR   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR}      s    c         C` sS   t  | d  r> t | d  } t d   |  j j |  D  S|  j d j   Sd  S(   Nu   string_delimiterc         s` s   |  ] } d  Vq d S(   u    N(    (   R5   t   _(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    i    (   R   R   R   Rw   R   R   Rk   (   RI   R|   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR~      s     c         C` s   |  j  j d  S(   Nu
   !important(   Rw   R   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __important_split_value   s    c         ` sS   d j  | j      t   f d   t t  D  } t t |   j t j |  S(   Nu   {0}_c         3` sE   |  ]; \ } } | j     r | j   d  d  j   | f Vq d S(   u    i   N(   t
   startswitht   replacet   lower(   R5   t   kR   (   t   keystart(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s   (	   t   formatt   upperR   R   R   RG   R   R   RP   (   Rg   t   appnamet   raw_env(    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyR      s    (
   RC   RD   RP   R<   R}   R~   t   propertyR   Rs   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR      s   			t   ArgParseRawParameterc           B` s8   e  Z d  Z d   Z d   Z d   Z e d    Z RS(   u   cmd_linec         C` s   t  |  j  S(   N(   R&   Rw   (   RI   R|   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR<     s    c         C` s   d  S(   N(   RR   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR}     s    c         C` s   t  | t  r d  Sd S(   N(    (   R?   t   PrimitiveParameterRR   (   RI   R|   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR~     s    c         C` s   t  t |   j t j |  S(   N(   RG   R   R   RP   (   Rg   t   args_from_argparse(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   
  s    (   RC   RD   RP   R<   R}   R~   Rs   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR      s
   			t   YamlRawParameterc           B` s   e  Z d    Z d   Z d   Z d   Z d   Z e d    Z e d    Z	 e d    Z
 e d    Z e d	    Z RS(
   c         C` s)   | |  _  t t |   j | | |  d  S(   N(   t   _keycommentRG   R   RH   (   RI   RP   R;   Rx   t
   keycomment(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH     s    	c         C` s   |  j  |  |  j S(   N(   t   _YamlRawParameter__processt   _value(   RI   R|   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR<     s    c         C` s   t  j |  j  S(   N(   Re   Ro   R   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR}     s    c         C` s   |  j  |  |  j S(   N(   R   t   _valueflags(   RI   R|   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR~     s    c         C` s   t  |  d  r d  St |  j t  re |  j |  j  } t d   | D  |  _ t |  j  |  _ n t |  j t  r |  j	 |  j  } t
 d   t |  D  |  _ t |  j  |  _ n3 t |  j t  r d  |  _ |  j |  _ n	 t    d  S(   Nu   _valuec         s` s   |  ] } t  j |  Vq d  S(   N(   Re   Ro   (   R5   t   s(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>'  s    c         s` s6   |  ], \ } } | d  k	 r | t j |  f Vq d  S(   N(   RR   Re   Ro   (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>+  s   (   R   R?   Rw   R1   t   _get_yaml_list_commentsR   R   R   R2   t   _get_yaml_map_commentsR   R   R*   R   RR   R'   (   RI   R|   t   valuecomments(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt	   __process"  s    		c         C` s>   y |  j  j | d j j   SWn t t f k
 r9 d  SXd  S(   Ni   (   t   cat   itemsR<   Rk   Rm   t   KeyErrorRR   (   t   commented_dictR;   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _get_yaml_key_comment4  s    c         ` s8   |  j  j   t   f d   t t |    D  } | S(   Nc         3` s<   |  ]2 } t  t t t f   f d    d    |  Vq d S(   c         ` s      j  |   d j j   p d  S(   Ni    (   t   getR<   Rk   RR   (   t   q(   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   <lambda>?  t    c         S` s   d  S(   N(   RR   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   @  R   N(   R.   Rm   R   R8   (   R5   R   (   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>>  s   (   R   R   R   t   rangeRc   (   R<   t   raw_comment_lines(    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   ;  s    c         ` s   t    f d     D  S(   Nc         3` s?   |  ]5 } | t  t t f   f d    d    |  f Vq d S(   c         ` s!     j  j |  d j j   p  d  S(   Ni   (   R   R   R<   Rk   RR   (   R   (   t   rawvalue(    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   H  R   c         S` s   d  S(   N(   RR   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   I  R   N(   R.   Rm   R   (   R5   R;   (   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>G  s   (   R   (   R   (    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   E  s    c         ` s*    r& t      f d    D  St S(   Nc      	   3` s:   |  ]0 } |    |  |   j   |   f Vq d  S(   N(   R   (   R5   R;   (   Rg   R   RP   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>P  s   (   R   R   (   Rg   RP   R   (    (   Rg   R   RP   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   M  s    c         C` s   t  | d   } y t |  } Wng t k
 ra } | j } t | d d | j d | j  n+ t k
 r } t | d d | j  n X|  j	 | |  p t
 SWd  QXd  S(   Nu   ru:     reason: invalid yaml at line %(line)s, column %(column)st   linet   columnu/     reason: invalid yaml at position %(position)st   position(   t   openR    R4   t   problem_markRE   R   R   R3   R   R   R   (   Rg   t   filepatht   fht   ruamel_yamlt   errt   mark(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   make_raw_parameters_from_fileU  s    		(   RC   RD   RH   R<   R}   R~   R   t   staticmethodR   R   R   Rs   R   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s   					
c         ` s   d   } d   } i | t  6| t 6 d     t d   |  D  }   f d   | D }  f d   t | |  D } t d   t j |  D  } | S(   Nc         s` sE   |  j  d  s- d t |   k s- t |    |  t j |   f Vd  S(   Nu   .ymlu   .yamlu   condarc(   u   .ymlu   .yaml(   t   endswithR   R   R   R   (   t   fullpath(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _file_yaml_loaderl  s    -c         s` sV   xO t  t t t |  d   t t |  d     D] } | t j |  f Vq4 Wd  S(   Nu   *.ymlu   *.yaml(   t   sortedR-   R   R   R   R   (   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _dir_yaml_loaderp  s    c         S` s0   y t  t |   j  SWn t k
 r+ d  SXd  S(   N(   R   R   t   st_modet   OSErrorRR   (   RF   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _get_st_mode{  s    c         s` s   |  ] } t  |  Vq d  S(   N(   R   (   R5   RF   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s   |  ] }   |  Vq d  S(   N(    (   R5   RF   (   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s1   |  ]' \ } } | d  k	 r   | |  Vq d  S(   N(   RR   (   R5   RF   R   (   t   _loader(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   	c         s` s   |  ] } | Vq d  S(   N(    (   R5   t   kv(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R   R   t   zipR   R	   t   from_iterable(   t   search_pathR   R   t   expanded_pathst
   stat_pathst
   load_pathst   raw_data(    (   R   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   load_file_configsi  s    		
	t	   Parameterc           B` s   e  Z d Z d Z d d e d   Z d   Z e d    Z	 e d    Z
 d   Z d   Z e d    Z d   Z d   Z d	 d
  Z d   Z d   Z e d    Z e d    Z e d    Z d d  Z RS(   c         C` s:   d  |  _ d  |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   RR   t   _namet   _namest   defaultt   aliasest   _validationt   _expandvars(   RI   R   R   t
   validationR   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH     s    					c         C` s;   | |  _  t d   t |  j | f  D  } | |  _ | S(   Nc         s` s   |  ] } | Vq d  S(   N(    (   R5   t   x(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   t	   frozensetR	   R   R   (   RI   Rh   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt	   _set_name  s    	%	c         C` s"   |  j  d  k r t    n  |  j  S(   N(   R   RR   R'   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRh     s    c         C` s"   |  j  d  k r t    n  |  j  S(   N(   R   RR   R'   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   names  s    c         ` s   |  j  t   j    @}   f d   | D } t |  } | d k rK d S| d k rm t t |   d  f S|  j | k r | |  j t   t t	 |   j
 | |  j  f Sd  t   t t	 |   j
 | |  j  f Sd  S(   Nc         ` s   i  |  ] }   | |  q S(    (    (   R5   R;   (   t   raw_parameters(    s9   lib/python2.7/site-packages/conda/common/configuration.pys
   <dictcomp>  s   	 i    i   (   NN(   R   R   RT   Rc   RR   t   nextR   Rh   RS   t   iterRP   (   RI   R   RT   t   matchest   numkeys(    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyt"   _raw_parameters_from_single_source  s    #c         C` s}   g  } g  } xd t  | j  D]S \ } } |  j |  \ } } | d  k	 rY | j |  n  | r | j |  q q W| | f S(   N(   R   R   R   RR   t   append(   RI   t   instanceR   t   multikey_exceptionsR   R   t   matcht   error(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _get_all_matches  s    c         C` s   t     d  S(   N(   R{   (   RI   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _merge  s    c         C` ss   |  j  rk t | t  r8 t |  d   t |  D  St |  r^ t |  d   | D  St |  Sn | Sd  S(   Nc         s` s'   |  ] \ } } | t  |  f Vq d  S(   N(   RA   (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         s` s   |  ] } t  |  Vq d  S(   N(   RA   (   R5   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R?   R   t   typeR   R   RA   (   RI   t   data(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _expand  s    	 c   	      C` s   |  j  | j k r  | j |  j  S|  j |  \ } } | rJ |  j |  n |  j } |  j |  } y |  j | d  } Wn  t k
 r } | j |  n X| j	 |  j
 | |   t |  | | j |  j  <| S(   Nu
   <<merged>>(   Rh   t   _cache_R   R   R   R   t   typifyR]   R   t   extendt   collect_errorsRd   (	   RI   R   t   instance_typeR   R`   t   mergedt   expandedt   resultt   e(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __get__  s    
u
   <<merged>>c         C` s   g  } t  | |  j  sF | j t |  j | | t |  |  j   n} |  j d k	 r |  j |  } | t k r | j t	 |  j | |   q t  | t
  r | j t |  j | | |   q n  | S(   u   Validate a Parameter value.

        Args:
            instance (Configuration): The instance object to which the Parameter descriptor is
                attached.
            value: The value to be validated.

        N(   R?   t   _typeR   RV   Rh   R   R   RR   t   FalseRM   R   R]   (   RI   R   R<   RP   R`   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    	%c         C` s   | j    t j k S(   N(   R}   Re   Rp   (   RI   t   raw_parameter(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _match_key_is_important  s    c         ` sC   t  t |    f d   d d   } | d  k r7 | S| | d  S(   Nc         ` s     j  |  d  S(   Ni   (   R   (   R   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     R   t   applyc         S` s   |  d S(   Ni    (    (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     R   i   (   R$   t	   enumerateRR   (   RI   R   t   idx(    (   RI   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _first_important_matches
  s    c         C` s   |  d  k	 r d |  Sd S(   Nu     #!%su    (   RR   (   t   flag(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _str_format_flag  s    c         C` s   |  d  k r d S|  S(   Nu   None(   RR   (   R<   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _str_format_value  s    c         C` s   t     d  S(   N(   R{   (   Rg   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   repr_raw  s    c         C` s   |  j  } y t | |  SWn t k
 r } | d  k rD |  j } n  t |  } t | t  r d j t	 d j
 | j j     } | d j
 | |  7} n  t | | j | |   n Xd  S(   Nu   , u   '{}'u   
Valid choices for {}: {}(   t   _element_typeR)   R(   RR   Rh   R   t
   issubclassR   R   t   mapR   t   __members__t   valuesR]   R<   (   RI   R<   RP   Rh   t   element_typeR   RQ   t   choices(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    	$N(    (   RC   RD   RR   R   R  R   RH   R   R   Rh   R   R   R   R   R   R   R   R   R   R   R   R   R  Rs   R  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s$   							R   c           B` s5   e  Z d  Z d d d e d  Z d   Z d   Z RS(   u   Parameter type for a Configuration class that holds a single python primitive value.

    The python primitive types are str, int, float, complex, bool, and NoneType. In addition,
    python 2 has long and unicode types.
    c         C` sP   | d k r t |  n | |  _ |  j |  _ t t |   j | | | |  d S(   u  
        Args:
            default (Any):  The parameter's default value.
            aliases (Iterable[str]): Alternate names for the parameter.
            validation (callable): Given a parameter value as input, return a boolean indicating
                validity, or alternately return a string describing an invalid value. Returning
                `None` also indicates a valid value.
            element_type (type or Tuple[type]): Type-validation of parameter's value. If None,
                type(default) is used.

        N(   RR   R   R   R  RG   R   RH   (   RI   R   R   R   R  R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   2  s    !c         C` so   t  | |  j d d  } | d  k	 r1 | j |   St | d   d d  } | d  k	 rb | j |   St    d  S(   NR   c         S` s
   |  d  k	 S(   N(   RR   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   G  R   (   R$   R   RR   R<   R%   R'   (   RI   R   t   important_matcht
   last_match(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   B  s    c         C` s5   d | j  |  j | j |    |  j | j    f S(   Nu   %s: %s%s(   R;   R  R<   R   R}   (   RI   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR  L  s    	(    N(   RC   RD   t   __doc__RR   R   RH   R   R  (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   +  s   	
t   SequenceParameterc           B` sS   e  Z d  Z e Z d d	 d
 d e d  Z d d  Z d   Z	 d   Z
 d   Z RS(   uo   Parameter type for a Configuration class that holds a sequence (i.e. list) of python
    primitive values.
    u   ,c         C` s5   | |  _  | |  _ t t |   j | | | |  d S(   u  
        Args:
            element_type (type or Iterable[type]): The generic type of each element in
                the sequence.
            default (Iterable[str]):  The parameter's default value.
            aliases (Iterable[str]): Alternate names for the parameter.
            validation (callable): Given a parameter value as input, return a boolean indicating
                validity, or alternately return a string describing an invalid value.

        N(   R  R   RG   R  RH   (   RI   R  R   R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH   X  s    		u
   <<merged>>c      	   C` s   t  t |   j | |  } |  j } xW t |  D]I \ } } t | |  s1 | j t |  j | | t	 |  | |   q1 q1 W| S(   N(
   RG   R  R   R  R   R?   R   RY   Rh   R   (   RI   R   R<   RP   R`   R  R   t   element(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   h  s    	c   
      ` s9  t   f d    j |  D  } xP | D]H \ } } t | t   s, t  j | | j | j j  j j   q, q, Wd     t	    f d   | D  } t	    f d   t
 |  D  } t	 d   t
 |  D  } t  t t | |    } t t t
 t  |   t
 |    }	 t  t
 t  |	    S(   Nc         3` s$   |  ] } | | j     f Vq d  S(   N(   R<   (   R5   R   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>t  s    c         ` s?   |  r; t    f d   t |  j |  |  j |   D  Sd S(   Nc         3` s'   |  ] \ } } |   k r | Vq d  S(   N(    (   R5   R   R   (   t   marker(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>~  s   	(    (   R   R   R<   R~   (   R   R  R|   (    (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pyt   get_marked_lines}  s    c         3` s*   |  ]  \ } }   | t  j   Vq d  S(   N(   Re   Rq   (   R5   t   mR   (   R  RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s*   |  ]  \ } }   | t  j   Vq d  S(   N(   Re   Rr   (   R5   R  R   (   R  RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         s` s   |  ] \ } } | Vq d  S(   N(    (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R   R?   RV   Rh   RP   t	   __class__RC   R   R,   t   reversedR0   R-   (
   RI   R   t   relevant_matches_and_valuesR   R<   t	   top_linest   bottom_linest	   all_linest   top_dedupedt   bottom_deduped(    (   R  RI   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   q  s    	'c         C` s   t    } | j d | j |  j | j    f  x_ t | j |    D]H \ } } | j |   | } | j d |  j |  |  j |  f  qH Wd j	 |  S(   Nu   %s:%su     - %s%su   
(
   t   listR   R;   R   R}   R   R<   R~   R  R   (   RI   R   t   linesR   R<   t	   valueflag(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR    s    	"c         C` s>   t  t |   j |  \ } } t d   | D  } | | f S(   Nc         s` s$   |  ] } | j  d  k	 r | Vq d  S(   N(   Rw   RR   (   R5   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   RG   R  R   R   (   RI   R   R   t
   exceptions(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    (    (    N(   RC   RD   R  R   R   RR   R   RH   R   R   R  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR  R  s   			(	
t   MapParameterc           B` sP   e  Z d  Z e Z d d d e d  Z d d  Z d   Z	 d   Z
 d   Z RS(	   uj   Parameter type for a Configuration class that holds a map (i.e. dict) of python
    primitive values.
    c         C` sG   | |  _  | r t |  p! t   } t t |   j | | | |  d S(   u  
        Args:
            element_type (type or Iterable[type]): The generic type of each element.
            default (Mapping):  The parameter's default value. If None, will be an empty dict.
            aliases (Iterable[str]): Alternate names for the parameter.
            validation (callable): Given a parameter value as input, return a boolean indicating
                validity, or alternately return a string describing an invalid value.

        N(   R  R*   RG   R  RH   (   RI   R  R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH     s    
	u
   <<merged>>c         ` sc   t  t   j | |  } t | t  r_  j   | j     f d   t |  D  n  | S(   Nc         3` sH   |  ]> \ } } t  |    s t  j |  t |    |  Vq d  S(   N(   R?   RY   Rh   R   (   R5   R;   t   val(   R  RI   RP   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   (   RG   R  R   R?   R   R  R   R   (   RI   R   R<   RP   R`   (    (   R  RI   RP   s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    	c         ` s   t   f d    j |  D  } xP | D]H \ } } t | t  s, t  j | | j | j j  j	 j   q, q, W f d     t    f d   | D  } t
 t t d   | D t |     S(   Nc         3` s$   |  ] } | | j     f Vq d  S(   N(   R<   (   R5   R   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         ` s   |  j     j |  t j k S(   N(   R~   R   Re   Rp   (   R   R;   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   key_is_important  s    c         3` s:   |  ]0 \   } t     f d    t |  D  Vq d S(   c         3` s0   |  ]& \ } }    |  r | | f Vq d  S(   N(    (   R5   R   R   (   R   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   	N(   R   R   (   R5   t   match_value(   R   (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   c         s` s   |  ] \ } } | Vq d  S(   N(    (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R   R?   R   RV   Rh   RP   R  RC   R   R*   R/   R-   R  (   RI   R   R  R   R<   t   important_maps(    (   R   RI   s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         C` s   t    } | j d | j |  j | j    f  xg t | j |    D]P \ } } | j |   j |  } | j d | |  j	 |  |  j |  f  qH Wd j
 |  S(   Nu   %s:%su
     %s: %s%su   
(   R  R   R;   R   R}   R   R<   R~   R   R  R   (   RI   R   R  t   valuekeyR<   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR    s    	"c         C` s>   t  t |   j |  \ } } t d   | D  } | | f S(   Nc         s` s$   |  ] } | j  d  k	 r | Vq d  S(   N(   Rw   RR   (   R5   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   RG   R  R   R   (   RI   R   R   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    N(    (   RC   RD   R  R*   R   RR   R   RH   R   R   R  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR    s   
		
t   ConfigurationTypec           B` s   e  Z d  Z d   Z RS(   u   metaclass for Configurationc         C` sB   t  t |   j | | |  t d   t |  j  D  |  _ d  S(   Nc         s` s3   |  ]) \ } } t  | t  r | j |  Vq d  S(   N(   R?   R   R   (   R5   Rh   t   p(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    	(   RG   R$  RH   R   R   t   __dict__t   parameter_names(   Rg   Rh   t   basest   attr(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH     s    (   RC   RD   R  RH   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR$    s   t   Configurationc           B` s   e  Z d d d d   Z d   Z d d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z e d	    Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s^   t    |  _ t   |  _ t   |  _ t t  |  _ |  j	 |  |  j
 |  |  j |  d  S(   N(   R   R   R   R   R+   t   _reset_callbacksR   R  t   _validation_errorst   _set_search_patht   _set_env_varst   _set_argparse_args(   RI   R   t   app_namet   argparse_args(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRH     s    c         C` s0   t  |  |  _ |  j t |   |  j   |  S(   N(   R+   t   _search_patht   _set_raw_dataR   t   _reset_cache(   RI   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR-    s    
c         C` s:   | |  _  | s |  St j |  |  j t j <|  j   |  S(   N(   t	   _app_nameR   R   R   RP   R4  (   RI   R0  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR.    s    	
c         C` s   t  | d  r7 t d   t t |   D  |  _ n4 | sL t   |  _ n t d   t |  D  |  _ t j } t j |  j  |  j | <|  j	   |  S(   Nu   __dict__c         s` s-   |  ]# \ } } | t  k	 r | | f Vq d  S(   N(   R   (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    	c         s` s-   |  ]# \ } } | t  k	 r | | f Vq d  S(   N(   R   (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>'  s    	(
   R   R#   R   Ry   t   _argparse_argsR   RP   R   R   R4  (   RI   R1  RP   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR/    s    (	
c         C` s   |  j  j |  |  j   |  S(   N(   R   t   updateR4  (   RI   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR3  /  s    
c         C` s+   t    |  _ x |  j D] } |   q W|  S(   N(   R   R   R+  (   RI   t   callback(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR4  4  s    c         C` s   |  j  j |  d  S(   N(   R+  t   add(   RI   R8  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   register_reset_callaback:  s    c         C` sO  i  } g  } |  j  | } x)|  j D]} |  j j | } | j |  \ } } | rd | j |  n  | d  k	 r# | j |  }	 |	 d  k r t | t	  r d }	 q t | t
  r i  }	 q n  y" | j |	 | j d | j }
 Wn  t k
 r} | j |  qAX| j |  |
 | j  } | r1| j |  qA|
 | | j <q# q# W| | f S(   NRh   (    (   R   R'  R  R&  R   R   RR   R<   R?   R  R  R   RP   R;   R]   R   R   (   RI   RP   t   typed_valuest   validation_errorsR   R;   t	   parameterR   t   multikey_errort   untyped_valuet   typed_valueR   t   collected_errors(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   check_source=  s2    	"c         ` s@   t  t j   f d     j D   } t |    j   d  S(   Nc         3` s"   |  ] }   j  |  d  Vq d S(   i   N(   RB  (   R5   RP   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>a  s   (   R  R	   R   R   Rd   t   validate_configuration(   RI   R<  (    (   RI   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   validate_all`  s    
c         O` sG   y |  | |   Wn/ t  k
 rB } t | d  r; | j n | f SXd S(   Nu   errors(    (   RB   R   R`   (   t   funcRa   RK   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _collect_validation_errorf  s
     c         ` sQ   t  j   f d     j D  }   j   } t t t  j | | f    d  S(   Nc         3` s$   |  ] } t  j t   |  Vq d  S(   N(   R*  RF  R   (   R5   Rh   (   RI   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>o  s   (   R	   R   R'  t   post_build_validationRd   R   (   RI   R`   t   post_errors(    (   RI   s9   lib/python2.7/site-packages/conda/common/configuration.pyRC  n  s    c         C` s   d S(   N(    (    (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRG  t  s    c         C` s|   t    } t    } x. |  j D]# } |  j |  \ | | <| | <q Wt t t j t |     t  d   t |  D  S(   Nc         s` s'   |  ] \ } } | r | | f Vq d  S(   N(    (   R5   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>}  s    (	   R   R   RB  Rd   R   R	   R   R   R   (   RI   R;  R<  RP   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   collect_allw  s    		!c         ` s_  | |  j  k r d | } n  |  j j | } t | t  sA t  | j j d    t   f d   | j	 D  } |  j
   j   d  } | j } t |  t k r | g } n  t |  s | g } n  t d   | D  } i | j j j   j d d  d 6  d 6| d 6| d	 6| j d
 6| j d d  j   d 6} t | t  r[| j | d <n  | S(   Nu   _c         3` s!   |  ] } |   k r | Vq d  S(   N(    (   R5   t   alias(   Rh   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    u    c         s` s   |  ] } | j  Vq d  S(   N(   RC   (   R5   t   _et(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    u	   parameteru   parameter_typeu   nameu   aliasesu   element_typesu   default_valueu   
u    u   descriptionu   string_delimiter(   R'  R  R&  R?   R   R   Rh   t   lstripR   R   t   get_descriptionsR   R  R   R   R   RC   R   R   R   Rk   R  R   (   RI   RN   R=  R   t   descriptiont   ett   element_typest   details(    (   Rh   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   describe_parameter  s.    	
c         C` s   t  t d   |  j D   S(   Nc         s` s   |  ] } | j  d   Vq d S(   u   _N(   RL  (   R5   Rh   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R   R'  (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   list_parameters  s    c         C` sQ   | |  j  k r d | } n  |  j j | } t | t  sA t  | j | |  S(   Nu   _(   R'  R  R&  R?   R   R   R   (   RI   RN   R<   RP   R=  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   typify_parameter  s
    c         C` s   t     d  S(   N(   R{   (   RI   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRM    s    (    N(   RC   RD   RR   RH   R-  R.  R/  R3  R4  R:  RB  RD  R   RF  RC  RG  RI  RR  RS  RT  RM  (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR*    s"   						#								N(n   R  t
   __future__R    R   R   R   t   abcR   R   t   collectionsR   t   collections.abcR   t   ImportErrorR   t	   itertoolsR	   t   loggingR
   t   osR   R   t   os.pathR   R   R   R   R   R   t   enumR   R   t   compatR   R   R   R   R   R   R   R   R   t	   constantsR   RF   R   t	   serializeR    R   R!   R"   t   _vendor.auxlib.collectionR#   R$   R%   R&   t   _vendor.auxlib.exceptionsR'   t   _vendor.auxlib.type_coercionR(   R)   t   _vendor.frozendictR*   t   _vendor.boltons.setutilsR+   t   _vendor.toolzR,   R-   R.   R/   R0   t   ruamel_yaml.commentsR1   R2   t   ruamel_yaml.readerR3   t   ruamel_yaml.scannerR4   t   ruamel.yaml.commentst   ruamel.yaml.readert   ruamel.yaml.scannerRC   t   logR   R9   R>   RA   RB   RE   RM   RS   RV   RY   R]   R_   Rd   Re   t   objectRt   R   R   R   R   R   R   R  R  R   R$  R*  (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   <module>   s|   "@"(						!%Y	"'ZE