
ݲk^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 Z d 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/ m0 Z0 d d l1 m2 Z2 m3 Z3 d d l4 m5 Z5 m6 Z6 m7 Z7 m8 Z8 d d l9 m: Z: d d l; m< Z< m= Z= m> Z> d d l? m@ Z@ d d lA mB ZB d d lC mD ZD mE ZE mF ZF mG ZG mH ZH mI ZI y: d d lJ mK ZK mL ZL d d lM mN ZN d d lO mP ZP WnG e k
 rd d lQ mK ZK mL ZL d d lR mN ZN d d lS mP ZP n Xe eT  ZU e@   ZV d d  ZW d d   ZX d!   ZY d" e2 f d#     YZZ d$ eZ f d%     YZ[ d& eZ f d'     YZ\ d( e\ f d)     YZ] d* e\ f d+     YZ^ d, e^ f d-     YZ_ d. e\ f d/     YZ` d0 e3 eZ f d1     YZa d2   Zb d3 e f d4     YZc e* e  d5 ed f d6     Y Ze d7 ee f d8     YZf d9 ee f d:     YZg d; ee f d<     YZh d= ee f d>     YZi d?   Zj e* e  d@ ed f dA     Y Zk dB ek f dC     YZl dD ek f dE     YZm dF ek f dG     YZn dH ek f dI     YZo dJ ed f dK     YZp e* e  dL ed f dM     Y Zq dN eq f dO     YZr dP eq f dQ     YZs dR eq f dS     YZt dT eq f dU     YZu dV ed f dW     YZv dX ew f dY     YZx e* ex  dZ ed f d[     Y Zy d S(\   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

i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   ABCMetat   abstractmethod(   t   defaultdict(   t   MappingN(   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   typifyt   typify_data_structure(   t
   frozendict(   t
   IndexedSet(   t   concatt   concatvt   exceptst   merget
   merge_witht   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>A   s    (   R   R   t	   TypeErrort   pretty_list(   t   iterableR9   (    (   R9   s9   lib/python2.7/site-packages/conda/common/configuration.pyR;   =   s    !c         ` s#   d j    f d   t |   D  S(   Nu   
c         3` s(   |  ] \ } } d    | | f Vq d S(   u   %s%s: %sN(    (   R7   t   keyt   value(   R9   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>G   s    (   R   R   (   t
   dictionaryR9   (    (   R9   s9   lib/python2.7/site-packages/conda/common/configuration.pyt
   pretty_mapF   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_variablesJ   s    
t   ConfigurationErrorc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRD   P   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   superRG   t   __init__(   t   selfRH   t   message_additiont   kwargst   message(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   U   s    (   RE   RF   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRG   T   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   sourceRI   RO   RJ   (   RK   RP   RQ   RR   t   msgRM   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   ]   s    			N(   RE   RF   t   NoneRJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRO   [   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'RS   (   RR   t   keysR;   RI   RU   RJ   RT   (   RK   RR   RV   t   preferred_keyRS   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   f   s
    		(   RE   RF   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRU   d   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:
%sRS   (   t
   wrong_typet   valid_typesRT   R;   RI   RX   RJ   (   RK   RP   RQ   RR   RY   RZ   RS   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   p   s    		N(   RE   RF   RT   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRX   o   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.RS   (   RA   t   intR;   RI   R[   RJ   (	   RK   RP   RQ   RR   RY   RZ   t   index_or_keyt	   qualifierRS   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   {   s    (   RE   RF   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR[   z   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.
%sRS   (   RI   R_   RJ   (   RK   RP   RQ   RR   t   custom_messageRS   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ      s    (   RE   RF   RJ   (    (    (    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(   RI   Ra   RJ   (   RK   t   errorst   argsRM   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ      s    (   RE   RF   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRa      s   c         C` s9   |  s
 t  St |   d k r) |  d  n t |    d  S(   Ni   i    (   t   Truet   lenRa   (   Rb   (    (    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>   (   RK   (    (    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(    (   Ri   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   stripRl   t
   ValueErrort   AttributeErrorRT   (   Ri   t   string(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   from_string   s
    (
   RE   RF   t   finalt   topt   bottomRh   t   classmethodRk   Rl   Rq   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRg      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(   RR   R=   t   unicodet   decodet
   _raw_value(   RK   RR   R=   t	   raw_value(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ      s    		c         C` s   t  t |    S(   N(   R   t   vars(   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __repr__   s    c         C` s   t     d  S(   N(   t   NotImplementedError(   RK   t   parameter_obj(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR>      s    c         C` s   t     d  S(   N(   R}   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   keyflag   s    c         C` s   t     d  S(   N(   R}   (   RK   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(    (   R7   R=   (   Ri   t   from_mapRR   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    (   t   dictt	   EMPTY_MAP(   Ri   RR   R   (    (   Ri   R   RR   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   make_raw_parameters   s     (
   RE   RF   RJ   R|   R   R>   R   R   Ru   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRv      s   			t   EnvRawParameterc           B` sG   e  Z d  Z d   Z d   Z d   Z e d    Z e d    Z	 RS(   u   envvarsc         ` s{   t  | d  rf t   j t  s' t  t | d  } t   f d   d     j j |  D D  S  j d j	   Sd  S(   Nu   string_delimiterc         3` s-   |  ]# } | r t  t  j   j |  Vq d  S(   N(   R   RR   R=   (   R7   t   v(   RK   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s   c         s` s   |  ] } | j    Vq d  S(   N(   Rm   (   R7   t   vv(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    i    (
   t   hasattrRA   Ry   R   t   AssertionErrort   getattrt   tuplet   splitt'   _EnvRawParameter__important_split_valueRm   (   RK   R~   t   string_delimiter(    (   RK   s9   lib/python2.7/site-packages/conda/common/configuration.pyR>      s    !c         C` s    t  |  j  d k r t j Sd  S(   Ni   (   Re   R   Rg   Rr   RT   (   RK   (    (    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(    (   R7   t   _(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s    i    (   R   R   R   Ry   R   R   Rm   (   RK   R~   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR      s     c         C` s   |  j  j d  S(   Nu
   !important(   Ry   R   (   RK   (    (    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(   R7   t   kR   (   t   keystart(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>   s   (	   t   formatt   upperR   R   R   RI   R   R   RR   (   Ri   t   appnamet   raw_env(    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyR      s    (
   RE   RF   RR   R>   R   R   t   propertyR   Ru   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` sv   t  |  j  re g  } xC t t |  j   D], } | j t |  j |  j |  j |   q+ Wt |  St	 |  j  Sd  S(   N(
   R   Ry   t   rangeRe   t   appendR   RR   R=   R   R&   (   RK   R~   t   children_valuest   i(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR>     s    	!
c         C` s   d  S(   N(   RT   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         C` s   t  | t  r d  Sd S(   N(    (   RA   t   PrimitiveLoadedParameterRT   (   RK   R~   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         C` s   t  t |   j t j |  S(   N(   RI   R   R   RR   (   Ri   t   args_from_argparse(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    (   RE   RF   RR   R>   R   R   Ru   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 e d    Z e d    Z e d    Z	 e d    Z
 e d    Z e d	    Z RS(
   c   
      C` s  | |  _  t t |   j | | |  t |  j t  r |  j |  j  } t d   | D  |  _	 g  } xJ t
 t |  j   D]3 } | j t |  j |  j |  j | | |   q~ Wt |  |  _ n t |  j t  re|  j |  j  } t d   t |  D  |  _	 i  } x@ |  j j   D]/ \ } }	 t |  j |  j |	 | |  | | <q Wt |  |  _ n3 t |  j t  rd  |  _	 |  j |  _ n	 t    d  S(   Nc         s` s   |  ] } t  j |  Vq d  S(   N(   Rg   Rq   (   R7   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(   RT   Rg   Rq   (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>*  s   (   t   _key_commentRI   R   RJ   RA   Ry   R3   t   _get_yaml_list_commentsR   t   _value_flagsR   Re   R   RR   R=   t   _valueR4   t   _get_yaml_map_commentsR   R   t   itemsR+   R   RT   R'   (
   RK   RR   R=   Rz   t   key_commentt   value_commentsR   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s,    		(	'	c         C` s   |  j  S(   N(   R   (   RK   R~   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR>   6  s    c         C` s   t  j |  j  S(   N(   Rg   Rq   R   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   9  s    c         C` s   |  j  S(   N(   R   (   RK   R~   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   <  s    c         C` s>   y |  j  j | d j j   SWn t t f k
 r9 d  SXd  S(   Ni   (   t   caR   R>   Rm   Ro   t   KeyErrorRT   (   t   commented_dictR=   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _get_yaml_key_comment?  s    c         ` s8   |  j  j   t   f d   t t |    D  } | S(   Nc         3` s?   |  ]5 } t  t t t t f   f d    d    |  Vq d S(   c         ` s   t  j   |   S(   N(   R   t   _get_yaml_list_comment_item(   t   q(   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   <lambda>J  s   c         S` s   d  S(   N(   RT   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   L  s    N(   R/   Ro   t
   IndexErrorR   R:   (   R7   R   (   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>I  s   (   R   R   R   R   Re   (   R>   t   raw_comment_lines(    (   R   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   F  s    c         C` s@   |  d r! |  d j  j   p  d  S|  d d j  j   p; d  Sd  S(   Ni    i   (   R>   Rm   RT   (   R8   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   Q  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>   Rm   RT   (   R   (   R>   (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   ]  s    c         S` s   d  S(   N(   RT   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   ^  s    N(   R/   Ro   R   (   R7   R=   (   R>   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>\  s   (   R   (   R>   (    (   R>   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   Z  s    c         ` s*    r& t      f d    D  St S(   Nc      	   3` s:   |  ]0 } |    |  |   j   |   f Vq d  S(   N(   R   (   R7   R=   (   Ri   R   RR   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>e  s   (   R   R   (   Ri   RR   R   (    (   Ri   R   RR   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   b  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    R6   t   problem_markRG   R   R   R5   R   R   R   (   Ri   t   filepatht   fht   ruamel_yamlt   errt   mark(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   make_raw_parameters_from_filej  s    		(   RE   RF   RJ   R>   R   R   t   staticmethodR   R   R   R   Ru   R   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s   					t   DefaultValueRawParameterc           B` s2   e  Z d  Z d   Z d   Z d   Z d   Z RS(   uP   
    Wraps a default value as a RawParameter, for usage in ParameterLoader.
    c   
      C` s  t  t |   j | | |  t |  j t  r i  } x9 |  j j   D]( \ } } t |  j |  j |  | | <qD Wt	 |  |  _
 n$t |  j  r g  } xC t t |  j   D], } | j t |  j |  j |  j |   q Wt |  |  _
 n t |  j t  r[|  j |  _
 x t |  j  j   D]1 \ } }	 |  j
 j | t |  j |  j |	   q#WnK t |  j t  r||  j |  _
 n* t |  j t  r|  j |  _
 n	 t    d  S(   N(   RI   R   RJ   RA   Ry   R   R   RR   R=   R+   R   R   R   Re   R   R   t   ConfigurationObjectR{   t   __setattr__R   R   R'   (
   RK   RR   R=   Rz   R   R   R   R   t	   attr_namet
   attr_value(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s.     	!"	 c         C` s   |  j  S(   N(   R   (   RK   R~   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR>     s    c         C` s   d  S(   N(   RT   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         C` s~   t  |  j t  r t   St |  j  r/ t   St  |  j t  rE d  St  |  j t  r[ d  St  |  j t	  rq d  St
    d  S(   N(   RA   Ry   R   R+   R   R   R   RT   R   R   R'   (   RK   R~   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    (   RE   RF   t   __doc__RJ   R>   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_loader  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_loader  s    c         S` s0   y t  t |   j  SWn t k
 r+ d  SXd  S(   N(   R   R   t   st_modet   OSErrorRT   (   RH   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _get_st_mode  s    c         s` s   |  ] } t  |  Vq d  S(   N(   R   (   R7   RH   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s   |  ] }   |  Vq d  S(   N(    (   R7   RH   (   R   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s1   |  ]' \ } } | d  k	 r   | |  Vq d  S(   N(   RT   (   R7   RH   R   (   t   _loader(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   	c         s` s   |  ] } | Vq d  S(   N(    (   R7   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_configs  s    		
	t   LoadedParameterc           B` s   e  Z d Z d Z d d   Z d   Z d   Z d d  Z d   Z	 e
 d    Z d   Z e d d   Z e d	    Z e d
    Z RS(   c         C` s1   | |  _  | |  _ | |  _ | |  _ | |  _ d S(   uJ  
        Represents a Parameter that has been loaded with configuration value.

        Args:
            name (str): name of the loaded parameter
            value (LoadedParameter or primitive): the value of the loaded parameter
            key_flag (ParameterFlag or None): priority flag for the parameter itself
            value_flags (Any or None): priority flags for the parameter values
            validation (callable): Given a parameter value as input, return a boolean indicating
                validity, or alternately return a string describing an invalid value.
        N(   t   _nameR>   t   key_flagt   value_flagst   _validation(   RK   Rj   R>   R   R   t
   validation(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s
    				c         C` s,   t  |  t  |   k r( |  j | j k St S(   N(   t   typeR>   t   False(   RK   t   other(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __eq__  s    c         C` s   t  |  j  S(   N(   t   hashR>   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __hash__  s    u
   <<merged>>c         C` s   g  } t  | |  j  sI | j t |  j | | t |  j  |  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 LoadedParameter typed value.

        Args:
            instance (Configuration): the instance object used to create the LoadedParameter.
            typed_value (Any): typed value to validate.
            source (str): string description for the source of the typed_value.
        N(   RA   t   _typeR   RX   R   R   R>   R   RT   R   RO   R   R_   (   RK   t   instancet   typed_valueRR   Rb   t   result(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   collect_errors  s    	!%c         C` s   t  |  j t  r= t |  j  d   t |  j  D  } n t |  j  rq t |  j  d   |  j D  } ny t  |  j t  r xN t |  j  j   D]7 \ } } t  | t	  r |  j j
 | | j    q q W|  j St |  j  } | |  _ |  S(   uw   
        Recursively expands any environment values in the Loaded Parameter.

        Returns: LoadedParameter
        c         s` s'   |  ] \ } } | | j    f Vq d  S(   N(   R   (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         s` s   |  ] } | j    Vq d  S(   N(   R   (   R7   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   RA   R>   R   R   R   R   R   R{   R   R   R   R   RC   (   RK   t	   new_valueR   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    +%" 	c         C` s   t     d S(   u   
        Recursively merges matches into one LoadedParameter.

        Args:
            matches (List<LoadedParameter>): list of matches of this parameter.

        Returns: LoadedParameter
        N(   R}   (   RK   t   matches(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR0   "  s    
c         C` s   |  j  } y t j |  j | |  SWn t k
 r } t |  } t | t  r d j t	 d j
 | j j     } | d j
 |  j |  7} n  t |  j | j | |   n Xd S(   u   
        Recursively types a LoadedParameter.

        Args:
            source (str): string describing the source of the LoadedParameter.

        Returns: a primitive, sequence, or map representing the typed value.
        u   , u   '{}'u   
Valid choices for {}: {}N(   t   _element_typeR   t   _typify_data_structureR>   R(   R   t
   issubclassR   R   t   mapR   t   __members__t   valuesR   R_   (   RK   RR   t   element_typet   eRS   t   choices(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR)   .  s    		$c         ` s
  t  |  t  r5 t |     f d   t |   D  St |   ra t |     f d   |  D  St  |  t  r xK t |   j   D]7 \ } } t  | t  r |  j	 | | j
     q q W|  St  |  t  r t  | t  r t | t  r | |   St
 |  |  Sd  S(   Nc         3` s*   |  ]  \ } } | | j     f Vq d  S(   N(   R)   (   R7   R   R   (   RR   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>F  s    c         3` s   |  ] } | j     Vq d  S(   N(   R)   (   R7   R   (   RR   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>H  s    (   RA   R   R   R   R   R   R{   R   R   R   R)   R   R   (   R>   RR   t	   type_hintR   R   (    (   RR   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   C  s    &  
c         C` s   |  j  t j k S(   N(   R   Rg   Rr   (   t   loaded_parameter(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _match_key_is_importantW  s    c         C` s=   t  t |   d   d d   } | d  k r1 |  S|  | d  S(   Nc         S` s   t  j |  d  S(   Ni   (   R   R   (   t   x(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   ^  s    t   applyc         S` s   |  d S(   Ni    (    (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   _  s    i   (   R$   t	   enumerateRT   (   R   t   idx(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _first_important_matches[  s    	N(   RE   RF   RT   R   R   RJ   R   R   R   R   R   R0   R)   R   R   R   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s   				R   c           B` s5   e  Z d  Z d d  Z d   Z d   Z d   Z RS(   u   
    LoadedParameter type 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` s8   | |  _  | |  _ t t |   j | | | | |  d S(   u   
        Args:
            element_type (type or Tuple[type]): Type-validation of parameter's value.
            value (primitive value): primitive python value.
        N(   R   R   RI   R   RJ   (   RK   Rj   R   R>   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   k  s    		c         C` s,   t  |  t  |   k r( |  j | j k St S(   N(   R   R>   R   (   RK   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   v  s    c         C` s   t  |  j  S(   N(   R   R>   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   {  s    c         C` s]   t  | t j d d  } | d  k	 r( | St | d   d d  } | d  k	 rP | St    d  S(   Nt   defaultc         S` s
   |  d  k	 S(   N(   RT   (   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    (   R$   R   R   RT   R%   R'   (   RK   R   t   important_matcht
   last_match(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR0   ~  s    N(   RE   RF   R   RT   RJ   R   R   R0   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   c  s
   		t   MapLoadedParameterc           B` s5   e  Z d  Z e Z d d  Z d d  Z d   Z RS(   uP   
    LoadedParameter type that holds a map (i.e. dict) of LoadedParameters.
    c         C` s/   | |  _  t t |   j | | | | |  d S(   u   
        Args:
            value (Mapping): Map of string keys to LoadedParameter values.
            element_type (Parameter): The Parameter type that is held in value.
            value_flags (Mapping): Map of priority value flags.
        N(   R   RI   R   RJ   (   RK   Rj   R>   R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    	u
   <<merged>>c         C` sz   t  t |   j | | |  j  } t |  j t  rv x@ t |  j  D], \ } } | j | j | | | |   qC Wn  | S(   N(   RI   R   R   R>   RA   R   R   t   extend(   RK   R   R   RR   Rb   R=   R>   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s
    !'c         ` s  t  d   t j |  D  } xP | D]H \ } } t | t  s& t |  j | | j | j j	 |  j
 j	   q& q& Wd     t    f d   | D  } t t d   d   | D   } t t t | g t |     } t |  j | |  j |  j |  j d |  j S(   Nc         s` s   |  ] } | | j  f Vq d  S(   N(   R>   (   R7   t   match(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         S` s   |  j  j |  t j k S(   N(   R   t   getRg   Rr   (   R  R=   (    (    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(    (   R7   R   R   (   R  R  (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   	N(   R   R   (   R7   t   match_value(   R  (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   c         S` s   |  d j  |   S(   Ni    (   R0   (   t   value_matches(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         s` s   |  ] \ } } | Vq d  S(   N(    (   R7   R   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    R   (   R   R   R   RA   R   RX   Rj   RR   t	   __class__RE   R   R+   R1   R0   R.   t   reversedR   R   R   R   R   R   (   RK   R   t   relevant_matches_and_valuesR  R>   t   important_mapst   merged_valuest#   merged_values_important_overwritten(    (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pyR0     s*    			N(	   RE   RF   R   R+   R   RT   RJ   R   R0   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s
   
	t   SequenceLoadedParameterc           B` s5   e  Z d  Z e Z d d  Z d d  Z d   Z RS(   uU   
    LoadedParameter type that holds a sequence (i.e. list) of LoadedParameters.
    c         C` s/   | |  _  t t |   j | | | | |  d S(   u   
        Args:
            value (Sequence): Sequence of LoadedParameter values.
            element_type (Parameter): The Parameter type that is held in the sequence.
            value_flags (Sequence): Sequence of priority value_flags.
        N(   R   RI   R  RJ   (   RK   Rj   R>   R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    	u
   <<merged>>c         C` se   t  t |   j | | |  j  } x= t |  j  D], \ } } | j | j | | | |   q1 W| S(   N(   RI   R  R   R>   R   R  (   RK   R   R   RR   Rb   R   t   element(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s
    $c         ` sZ  t  d   t 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  |	    }
 t |  j |
 |  j |  j |  j d |  j S(   Nc         s` s   |  ] } | | j  f Vq d  S(   N(   R>   (   R7   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         ` s3   |  r/ t    f d   t |  j |  j  D  Sd S(   Nc         3` s'   |  ] \ } } |   k r | Vq d  S(   N(    (   R7   R   t   flag(   t   marker(    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s   	(    (   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(   Rg   Rs   (   R7   t   mR   (   R  (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         3` s'   |  ] \ } }   | t  j  Vq d  S(   N(   Rg   Rt   (   R7   R  R   (   R  (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         s` s   |  ] \ } } | Vq d  S(   N(    (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    R   (   R   R   R   RA   RX   Rj   RR   R  RE   R   R-   R  R2   R.   R  R   R   R   R   R   (   RK   R   R	  R  R>   t	   top_linest   bottom_linest	   all_linest   top_dedupedt   bottom_dedupedR  (    (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pyR0     s,    		'	N(	   RE   RF   R   R   R   RT   RJ   R   R0   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR    s
   t   ObjectLoadedParameterc           B` s5   e  Z d  Z e Z d d  Z d d  Z d   Z RS(   uU   
    LoadedParameter type that holds a sequence (i.e. list) of LoadedParameters.
    c         C` s/   | |  _  t t |   j | | | | |  d S(   u   
        Args:
            value (Sequence): Object with LoadedParameter fields.
            element_type (object): The Parameter type that is held in the sequence.
            value_flags (Sequence): Sequence of priority value_flags.
        N(   R   RI   R  RJ   (   RK   Rj   R>   R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    	u
   <<merged>>c         C` s   t  t |   j | | |  j  } t |  j t  r xX t |  j  j   D]> \ } } t | t  rI | j	 | j | | | |   qI qI Wn  | S(   N(
   RI   R  R   R>   RA   R   R{   R   R   R  (   RK   R   R   RR   Rb   R=   R>   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   &  s    "*c         ` sG  t  d   t j |  D  } xP | D]H \ } } t | t  s& t |  j | | j | j j	 |  j
 j	   q& q& Wd     t    f d   | D  } t t d   d   | D   } t t t | g t |     } t j |  j  } x* | j   D] \ }	 }
 | j |	 |
  q Wt |  j | |  j |  j |  j d |  j S(   Nc         s` s4   |  ]* } | d    t  | j  j   D f Vq d S(   c         S` s.   i  |  ]$ \ } } t  | t  r | |  q S(    (   RA   R   (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys
   <dictcomp>5  s   	 	N(   R{   R>   R   (   R7   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>4  s   c         S` s   |  j  j |  t j k S(   N(   R   R  Rg   Rr   (   R  R=   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR  A  s    c         3` s:   |  ]0 \   } t     f d    t |  D  Vq d S(   c         3` s0   |  ]& \ } }    |  r | | f Vq d  S(   N(    (   R7   R   R   (   R  R  (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>C  s   	N(   R   R   (   R7   R  (   R  (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>C  s   c         S` s   |  d j  |   S(   Ni    (   R0   (   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   J  s    c         s` s   |  ] \ } } | Vq d  S(   N(    (   R7   R   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>K  s    R   (   R   R   R   RA   R   RX   Rj   RR   R  RE   R   R+   R1   R0   R.   R  t   copyt   deepcopyR   R   R   R  R   R   R   R   (   RK   R   R	  R  R>   R
  R  R  t   object_copyR   t   loaded_child_parameter(    (   R  s9   lib/python2.7/site-packages/conda/common/configuration.pyR0   1  s0    			N(	   RE   RF   R   t   objectR   RT   RJ   R   R0   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR    s
   R   c           B` s   e  Z d  Z RS(   uS   
    Dummy class to mark whether a Python object has config parameters within.
    (   RE   RF   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   a  s   t	   Parameterc           B` sP   e  Z d Z d Z d d   Z e d    Z d   Z e	 d    Z
 d   Z RS(   c         C` s   | |  _  | |  _ d S(   u  
        The Parameter class represents an unloaded configuration parameter, holding type, default
        and validation information until the parameter is loaded with a configuration.

        Args:
            default (Any): the typed, python representation default value given if the Parameter
                is not found in a Configuration.
            validation (callable): Given a parameter value as input, return a boolean indicating
                validity, or alternately return a string describing an invalid value.
        N(   t   _defaultR   (   RK   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   p  s    	c         C` s%   t  d d |  j  } |  j d |  S(   uY   
        Returns a DefaultValueRawParameter that wraps the actual default value.
        u   default(   R   R  t   load(   RK   t   wrapped_default(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   ~  s    c   
      C` s   g  } g  } xj t  | j  D]Y \ } } t j | | |  \ } }	 | d k	 r_ | j |  n  |	 r | j |	  q q W| | f S(   u  
        Finds all matches of a Parameter in a Configuration instance

        Args:
            name (str): canonical name of the parameter to search for
            names (tuple(str)): alternative aliases of the parameter
            instance (Configuration): instance of the configuration to search within

        Returns (List(RawParameter)): matches of the parameter found in the configuration.
        N(   R   R   t   ParameterLoadert!   raw_parameters_from_single_sourceRT   R   (
   RK   Rj   t   namesR   R   t   multikey_exceptionsR   t   raw_parametersR  t   error(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   get_all_matches  s    c         C` s   t     d S(   u   
        Loads a Parameter with the value in a RawParameter.

        Args:
            name (str): name of the parameter to pass through
            match (RawParameter): the value of the RawParameter match

        Returns a LoadedParameter
        N(   R}   (   RK   Rj   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    c         C` s   |  j  } y t | |  SWn t k
 r } 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 {}: {}(   R   R*   R(   R   R   R   R   R   R   R   R   R_   R>   (   RK   Rj   RR   R>   R   R   RS   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR)     s    	$N(   RE   RF   RT   R   R   RJ   R   R   R(  R   R   R)   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR  h  s   	t   PrimitiveParameterc           B` s&   e  Z d  Z d d 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` sJ   | d k r t |  n | |  _ |  j |  _ t t |   j | |  d S(   u   
        Args:
            default (primitive value): default value if the Parameter is not found.
            element_type (type or Tuple[type]): Type-validation of parameter's value. If None,
                type(default) is used.
        N(   RT   R   R   R   RI   R)  RJ   (   RK   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    !c         C` s@   t  | |  j | j |  j  | j   | j |  j  d |  j S(   NR   (   R   R   R>   R   R   R   R   (   RK   Rj   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s    	N(   RE   RF   R   RT   RJ   R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR)    s   t   MapParameterc           B` s8   e  Z d  Z e Z e   d d  Z d   Z d   Z RS(   u^   
    Parameter type for a Configuration class that holds a map (i.e. dict) of Parameters.
    c         C` sD   | |  _  | r t |  p! t   } t t |   j | d | d S(   u   
        Args:
            element_type (Parameter): The Parameter type held in the MapParameter.
            default (Mapping):  The parameter's default value. If None, will be an empty dict.
        R   N(   R   R+   RI   R*  RJ   (   RK   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    	c         C` sD   t  t |   j | | |  \ } } t d   | D  } | | f S(   Nc         s` s$   |  ] } | j  d  k	 r | Vq d  S(   N(   Ry   RT   (   R7   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   RI   R*  R(  R   (   RK   Rj   R$  R   R   t
   exceptions(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR(    s    $c         C` s  | j  |  j  } | d  k rL t | t   |  j | j   t   d |  j St | t  s t	 | | | j
 | j j |  j j   n  i  } xE | j  |  j  j   D]+ \ } } |  j j | |  } | | | <q Wt | t |  |  j | j   | j |  j  d |  j S(   NR   (   R>   R   RT   R   R+   R   R   RA   R   RX   RR   R  RE   R   R   R   R   (   RK   Rj   R  R>   t
   loaded_mapR=   t   child_valuet   loaded_child_value(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR     s.    		
%		N(	   RE   RF   R   R+   R   RT   RJ   R(  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR*    s
   
	t   SequenceParameterc           B` s8   e  Z d  Z e Z d d d d  Z d   Z d   Z RS(   uc   
    Parameter type for a Configuration class that holds a sequence (i.e. list) of Parameters.
    u   ,c         C` s/   | |  _  | |  _ t t |   j | |  d S(   u  
        Args:
            element_type (Parameter): The Parameter type that is held in the sequence.
            default (Sequence): default value, empty tuple if not given.
            string_delimiter (str): separation string used to parse string into sequence.
        N(   R   R   RI   R/  RJ   (   RK   R   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    		c         C` sD   t  t |   j | | |  \ } } t d   | D  } | | f S(   Nc         s` s$   |  ] } | j  d  k	 r | Vq d  S(   N(   Ry   RT   (   R7   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   RI   R/  R(  R   (   RK   Rj   R$  R   R   R+  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR(    s    $c         C` s   | j  |   } | d  k rI t | t   |  j | j   t   d |  j St |  s t | | | j	 | j
 j |  j j   n  g  } x0 | D]( } |  j j | |  } | j |  q Wt | t |  |  j | j   | j |  j  d |  j S(   NR   (   R>   RT   R  R   R   R   R   R   RX   RR   R  RE   R   R   R   R   (   RK   Rj   R  R>   t   loaded_sequenceR-  R.  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR   !  s.    		
		(    N(	   RE   RF   R   R   R   RT   RJ   R(  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR/    s
   	t   ObjectParameterc           B` s8   e  Z d  Z e Z e   d d  Z d   Z d   Z	 RS(   u^   
    Parameter type for a Configuration class that holds an object with Parameter fields.
    c         C` s&   | |  _  t t |   j | |  d S(   u   
        Args:
            element_type (object): The object type with parameter fields held in ObjectParameter.
            default (Sequence): default value, empty tuple if not given.
        N(   R   RI   R1  RJ   (   RK   R   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ   E  s    	c         C` sD   t  t |   j | | |  \ } } t d   | D  } | | f S(   Nc         s` s$   |  ] } | j  d  k	 r | Vq d  S(   N(   Ry   RT   (   R7   R  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>Q  s    (   RI   R1  R(  R   (   RK   Rj   R$  R   R   R+  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR(  N  s    $c         ` s  | j  |  j      d  k rF t | d  |  j | j   d  d |  j St   t  pa t   t  s t	 |   | j
   j j |  j j   n  t   t  r t      n    f d   t |  j  j   D } i  } xE | j   D]7 \ } }   j |  } | j | |  } | | | <q Wt j |  j  }	 x* | j   D] \ } }
 |	 j | |
  q>Wt | |	 |  j | j   | j |  j  d |  j S(   NR   c         ` s@   i  |  ]6 \ } } t  | t  r |   j   k r | |  q S(    (   RA   R  RV   (   R7   R   t   parameter_type(   R>   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys
   <dictcomp>h  s   		(   R>   R   RT   R  R   R   RA   R   R   RX   RR   R  RE   R   R{   R   R  R   R  R  R   R   (   RK   Rj   R  t   object_parameter_attrst   loaded_attrsR   R2  t   raw_child_valueR.  R  R  (    (   R>   s9   lib/python2.7/site-packages/conda/common/configuration.pyR   T  s>    	
	N(
   RE   RF   R   R  R   R   RT   RJ   R(  R   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR1  ?  s
   		R"  c           B` se   e  Z d  Z d e d  Z d   Z e d    Z e d    Z d   Z	 d   Z
 e d    Z RS(	   uq   
    ParameterLoader class contains the top level logic needed to load a parameter from start to
    finish.
    c         C` s1   d |  _ d |  _ | |  _ | |  _ | |  _ d S(   u  
        Args:
            parameter_type (Parameter): the type of Parameter that is stored in the loader.
            aliases (tuple(str)): alternative aliases for the Parameter
            expandvars (bool): whether or not to recursively expand environmental variables.
        N(   RT   R   t   _namesR   t   aliasest   _expandvars(   RK   R2  R7  R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s
    				c         C` s;   | |  _  t d   t |  j | f  D  } | |  _ | S(   Nc         s` s   |  ] } | Vq d  S(   N(    (   R7   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   t	   frozensetR	   R7  R6  (   RK   Rj   R6  (    (    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   RT   R'   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRj     s    c         C` s"   |  j  d  k r t    n  |  j  S(   N(   R6  RT   R'   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyR$    s    c         C` s  |  j  | j k r  | j |  j  S|  j j |  j  |  j |  \ } } g  | D] } |  j j |  j  |  ^ qK } | r | d j |  n	 |  j j } |  j r | j	   n | } y | j
 d  }	 Wn  t k
 r }
 | j |
  n X| j | j | |	 d   t |  |	 | j |  j  <|	 S(   Ni    u
   <<merged>>(   Rj   t   _cache_R   R(  R$  R   R0   R   R8  R   R)   R_   R   R  R   Rf   (   RK   R   t   instance_typet   raw_matchesRb   R  R   t   mergedt   expandedR   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   __get__  s    $+%
c         C` s   t  j |  j |  j |  S(   N(   R"  R#  Rj   R$  (   RK   R&  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt"   _raw_parameters_from_single_source  s    c         ` s   | t    j    @}   f d   | D } t |  } | d k rH d S| d k rj t t |   d  f S|  | k r | |  t   t t |   j | |   f Sd  t   t t |   j | |   f Sd  S(   Nc         ` s   i  |  ] }   | |  q S(    (    (   R7   R=   (   R&  (    s9   lib/python2.7/site-packages/conda/common/configuration.pys
   <dictcomp>  s   	 i    i   (   NN(	   R9  RV   Re   RT   t   nextR   RU   t   iterRR   (   Rj   R$  R&  RV   R   t   numkeys(    (   R&  s9   lib/python2.7/site-packages/conda/common/configuration.pyR#    s    
#(    (   RE   RF   R   R   RJ   R:  R   Rj   R$  R@  RA  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(   RA   R"  R:  (   R7   Rj   t   p(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    	(   RI   RE  RJ   R   R   t   __dict__t   parameter_names(   Ri   Rj   t   basest   attr(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    (   RE   RF   R   RJ   (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRE    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   t   listt   _validation_errorst   _set_search_patht   _set_env_varst   _set_argparse_args(   RK   R   t   app_namet   argparse_args(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRJ     s    c         C` s0   t  |  |  _ |  j t |   |  j   |  S(   N(   R,   t   _search_patht   _set_raw_dataR   t   _reset_cache(   RK   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRO    s    
c         C` s:   | |  _  | s |  St j |  |  j t j <|  j   |  S(   N(   t	   _app_nameR   R   R   RR   RV  (   RK   RR  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRP    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   (   R7   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   (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    	(
   R   R#   R   R{   t   _argparse_argsR   RR   R   R   RV  (   RK   RS  RR   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRQ  	  s    (	
c         C` s   |  j  j |  |  j   |  S(   N(   R   t   updateRV  (   RK   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRU    s    
c         C` s+   t    |  _ x |  j D] } |   q W|  S(   N(   R   R;  RL  (   RK   t   callback(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRV  $  s    c         C` s   |  j  j |  d  S(   N(   RL  t   add(   RK   RZ  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   register_reset_callaback*  s    c         C` s
  i  } g  } |  j  | } x |  j D] } |  j j | } | j |  \ } } | rd | j |  n  | d  k	 r# | j j | |  }	 y |	 j	 | j
  }
 Wn  t k
 r } | j |  q X|	 j |  |
 | j
  } | r | j |  q |
 | | j <q# q# W| | f S(   N(   R   RH  R  RG  RA  R   RT   R   R   R)   RR   R_   R   R  R=   (   RK   RR   t   typed_valuest   validation_errorsR&  R=   t	   parameterR  t   multikey_errorR   R   R   t   collected_errors(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   check_source-  s*    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  (   R7   RR   (   RK   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>S  s   (   RM  R	   R   R   Rf   t   validate_configuration(   RK   R^  (    (   RK   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   validate_allR  s    
c         O` sG   y |  | |   Wn/ t  k
 rB } t | d  r; | j n | f SXd S(   Nu   errors(    (   RD   R   Rb   (   t   funcRc   RM   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   _collect_validation_errorX  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(   RK  Rf  R   (   R7   Rj   (   RK   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>a  s   (   R	   R   RH  t   post_build_validationRf   R   (   RK   Rb   t   post_errors(    (   RK   s9   lib/python2.7/site-packages/conda/common/configuration.pyRc  `  s    c         C` s   d S(   N(    (    (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRg  f  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(    (   R7   R   R   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>o  s    (	   R   R   Rb  Rf   R   R	   R   R   R   (   RK   R]  R^  RR   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   collect_alli  s    		!c   	      ` s  | |  j  k r d | } n  |  j j | } | j } t | t  sJ t  | j j d    t	   f d   | j
 D  } |  j   j   d  } | j } t |  t k r | g } n  t |  s | g } n  t | j t  r t	 d   | D  } n t	 d   | D  } i | j j j   j d d  d 6  d 6| d	 6| d
 6| j j d  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(    (   R7   t   alias(   Rj   (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>{  s    u    c         s` s-   |  ]# } | j  j j   j d  d  Vq d S(   u	   parameteru    N(   R  RE   R   R   (   R7   t   _et(    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    c         s` s   |  ] } | j  Vq d  S(   N(   RE   (   R7   Rk  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    u	   parameteru   parameter_typeu   nameu   aliasesu   element_typesu   <<describe>>u   default_valueu   
u    u   descriptionu   string_delimiter(   RH  R  RG  R   RA   R  R   Rj   t   lstripR   R7  t   get_descriptionsR  R   R   R   RE   R   R   R   R)   Rm   R/  R   (	   RK   RP   t   parameter_loaderR_  R7  t   descriptiont   ett   element_typest   details(    (   Rj   s9   lib/python2.7/site-packages/conda/common/configuration.pyt   describe_parameterq  s6    		c         C` s   t  t d   |  j D   S(   Nc         s` s   |  ] } | j  d   Vq d S(   u   _N(   Rl  (   R7   Rj   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pys	   <genexpr>  s    (   R   R   RH  (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   list_parameters  s    c         C` s]   | |  j  k r d | } n  |  j j | } | j } t | t  sJ t  | j | | |  S(   Nu   _(   RH  R  RG  R   RA   R  R   R)   (   RK   RP   R>   RR   Rn  R_  (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   typify_parameter  s    	c         C` s   t     d  S(   N(   R}   (   RK   (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRm    s    (    N(   RE   RF   RT   RJ   RO  RP  RQ  RU  RV  R\  Rb  Rd  R   Rf  Rc  Rg  Ri  Rs  Rt  Ru  Rm  (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyRK    s"   						%					%		
(z   R   t
   __future__R    R   R   R   t   abcR   R   t   collectionsR   t   collections.abcR   t   ImportErrorR  R   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   RH   R   t	   serializeR    t    R!   R"   t   _vendor.auxlib.collectionR#   R$   R%   R&   t   _vendor.auxlib.exceptionsR'   t   _vendor.auxlib.type_coercionR(   R)   R*   t   _vendor.frozendictR+   t   _vendor.boltons.setutilsR,   t   _vendor.toolzR-   R.   R/   R0   R1   R2   t   ruamel_yaml.commentsR3   R4   t   ruamel_yaml.readerR5   t   ruamel_yaml.scannerR6   t   ruamel.yaml.commentst   ruamel.yaml.readert   ruamel.yaml.scannerRE   t   logR   R;   R@   RC   RD   RG   RO   RU   RX   R[   R_   Ra   Rf   Rg   R  Rv   R   R   R   R   R   R   R   R   R  R  R   R  R)  R*  R/  R1  R"  R   RE  RK  (    (    (    s9   lib/python2.7/site-packages/conda/common/configuration.pyt   <module>   s   "@".						!'e5	"&AKLN47D^