ó
l‚z]c           @` sù  d  d l  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 l
 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 d d
 l m Z m Z m Z m Z m Z d d l m Z 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) e	 e* ƒ Z+ d e, f d „  ƒ  YZ- e e- ƒ d e. f d „  ƒ  Yƒ Z/ d e/ f d „  ƒ  YZ0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d „  Z5 d „  Z6 e7 d d „ Z9 d e7 d „ Z: d „  Z; e j< e/ j= ƒ d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   copy(   t   chain(   t	   getLoggeri   (   t
   IndexedSet(   t   concatt   concatvt   drop(   t   DEFAULTS_CHANNEL_NAMEt   MAX_CHANNEL_PRIORITYt   UNKNOWN_CHANNEL(   t   context(   t   ensure_text_typet
   isiterablet	   iteritemst   odictt   with_metaclass(   t   is_package_filet   is_patht   win_path_backout(	   t   Urlt
   has_schemet   is_urlt   join_urlt   path_to_urlt   split_conda_url_easy_partst   split_platformt   split_scheme_auth_tokent   urlparset   ChannelTypec           B` s   e  Z d  Z d „  Z RS(   un   
    This metaclass does basic caching and enables static constructor method usage with a
    single arg.
    c         ` sÑ   t  | ƒ d k rq | rq | d } t | t ƒ r6 | S| t j k rP t j | St j | ƒ } t j | <| Sn\ d | k r´ | d } t ‡  f d †  | d Dƒ ƒ } t | | ƒ St t ˆ  ƒ j	 | | Ž  Sd  S(   Ni   i    u   channelsu   namec         3` s'   |  ] } t  t ˆ  ƒ j |   Vq d  S(   N(   t   superR    t   __call__(   t   .0t   _kwargs(   t   cls(    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>+   s   (
   t   lent
   isinstancet   Channelt   _cache_t
   from_valuet   tuplet   MultiChannelR!   R    R"   (   R%   t   argst   kwargst   valuet   ct   namet   channels(    (   R%   s3   lib/python2.7/site-packages/conda/models/channel.pyR"      s    

(   t   __name__t
   __module__t   __doc__R"   (    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR       s   R(   c           B` s[  e  Z d  Z i  Z e d „  ƒ Z d d d d d d d d „ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d d	 „ ƒ Z e d
 „  ƒ Z e d d „ Z e d „ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z d „  Z RS(   u¾   
    Channel:
    scheme <> auth <> location <> token <> channel <> subchannel <> platform <> package_filename

    Package Spec:
    channel <> subchannel <> namespace <> package_name

    c           C` s   i  t  _ d  S(   N(   R(   R)   (    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   _reset_state>   s    c         C` sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   schemet   autht   locationt   tokenR1   t   platformt   package_filename(   t   selfR7   R8   R9   R:   R1   R;   R<   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __init__B   s    						c         C` s   |  j  S(   N(   R9   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   channel_locationL   s    c         C` s   |  j  S(   N(   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   channel_nameP   s    c         C` s   |  j  S(   N(   R;   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   subdirT   s    c         C` s
   t  |  ƒ S(   N(   t   parse_conda_channel_url(   t   url(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   from_urlX   s    c         C` s
   t  |  ƒ S(   N(   t   _get_channel_for_name(   R@   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   from_channel_name\   s    c         C` s  |  d k r t d t ƒ St |  ƒ }  t |  ƒ r\ |  j d ƒ rO t |  ƒ }  n  t j |  ƒ St |  ƒ r{ t j t	 |  ƒ ƒ St
 |  ƒ r² |  j d ƒ r¥ t |  ƒ }  n  t j |  ƒ St |  t j ƒ \ } } | t j k rð t | t j | | ƒ St j |  ƒ Sd  S(   Nu	   <unknown>u   None:///<unknown>u   NoneR1   u   file:(   Nu	   <unknown>u   None:///<unknown>u   None(   t   NoneR(   R   R   R   t
   startswithR   RD   R   R   R   R   R   t   known_subdirst   custom_multichannelsR,   RF   (   R/   t	   _strippedR;   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR*   `   s"    c   
      C` sX  |  } t  | ƒ \ } } } } | rX | rX t d | d | d | d | d | j d ƒ ƒ S| r| j rž | j | j ƒ rž | j | j | j d d ƒ } } n9 t | ƒ }	 t d	 |	 j d
 |	 j	 ƒ j
 } |	 j pÔ d } t d | d | d | d | d | j d ƒ ƒ St d | j d | j d | j d | j d | rD| j d ƒ pP| j d ƒ ƒ Sd  S(   NR7   R8   R9   R:   R1   u   /u    i   t   hostt   port(   R   R(   t   stripR9   RH   t   replaceR   R   RL   RM   RC   t   pathR7   R8   R:   (
   t   channel_aliast   channel_urlR1   t   cat   test_urlR7   R8   R:   R9   t	   url_parts(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   make_simple_channelx   s    %*c         ` sm  y ˆ  j  SWn t k
 r n XxQ t t j ƒ D]@ \ } } x1 | D]) } ˆ  j | j k rB | } ˆ  _  | SqB Wq/ WxR t j D]G } ˆ  j r} t ˆ  j j d ƒ | j d ƒ ƒ r} ˆ  j } ˆ  _  | Sq} Wt	 ‡  f d †  t
 t j f t j ƒ Dƒ ƒ r
ˆ  j } ˆ  _  | Sˆ  j r@d ˆ  j t ˆ  j ˆ  j ƒ f } ˆ  _  | St ˆ  j ˆ  j ƒ j d ƒ } ˆ  _  | Sd  S(   Nu   /c         3` s!   |  ] } | j  ˆ  j  k Vq d  S(   N(   R9   (   R#   R0   (   R=   (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>ž   s    u   %s://%s(   t   _Channel__canonical_namet   AttributeErrorR   R   RJ   R1   t   custom_channelst   tokenized_startswitht   splitt   anyR	   RQ   t   migrated_channel_aliasesR7   R   R9   t   lstrip(   R=   t	   multinameR2   t   channelt   cnt	   that_name(    (   R=   s3   lib/python2.7/site-packages/conda/models/channel.pyt   canonical_nameŒ   s0    -			 %c         ` s1  ˆ d  k r t j ‰ n  t ˆ ƒ s0 t ˆ ƒ ‚ ˆ j t k rU t t ƒ j	 | ˆ ƒ Sˆ j
 g ‰  | r‰ ˆ j r‰ ˆ  j d ˆ j g ƒ n  ˆ  j ˆ j ƒ t ˆ  Œ  ‰  ‡ ‡ f d †  } ‡  f d †  | ƒ  Dƒ } | r	ˆ j r	g  | D] } d ˆ j ˆ j | f ^ qæ Sg  | D] } d ˆ j | f ^ qSd  S(   Nu   tc          3` sE   ˆ  j  r+ ˆ  j  Vˆ  j  d k rA d VqA n x ˆ D] }  |  Vq2 Wd  S(   Nu   noarch(   R;   (   RA   (   R=   t   subdirs(    s3   lib/python2.7/site-packages/conda/models/channel.pyt
   _platforms¾   s    	c         3` s   |  ] } t  ˆ  | ƒ Vq d  S(   N(   R   (   R#   t   p(   t   base(    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>Ç   s    u
   %s://%s@%su   %s://%s(   RG   R   Rd   R   t   AssertionErrorRc   R   R(   R   t   urlsR9   R:   t   extendt   appendR1   R   R8   R7   (   R=   t   with_credentialsRd   Re   t   basest   b(    (   Rg   R=   Rd   s3   lib/python2.7/site-packages/conda/models/channel.pyRi   ¯   s    	*c         C` sÿ   |  j  t k r d  S|  j g } | rG |  j rG | j d |  j g ƒ n  | j |  j ƒ |  j r | j |  j ƒ |  j	 r¸ | j |  j	 ƒ q¸ n) t
 d „  t j Dƒ d ƒ } | j | ƒ t | Œ  } | rê |  j rê d |  j |  j | f Sd |  j | f Sd  S(   Nu   tc         s` s!   |  ] } | d  k r | Vq d S(   u   noarchN(    (   R#   t   s(    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>Û   s    u   noarchu
   %s://%s@%su   %s://%s(   Rc   R   RG   R9   R:   Rj   Rk   R1   R;   R<   t   nextR   Rd   R   R8   R7   (   R=   Rl   Rg   t   first_non_noarch(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRC   Î   s     		c         C` s3   |  j  t k r d  Sd |  j t |  j |  j ƒ f S(   Nu   %s://%s(   Rc   R   RG   R7   R   R9   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   base_urlå   s    c         C` s
   |  j  f S(   N(   Rr   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt	   base_urlsë   s    c         C` s;   |  j  t ƒ } |  j r7 | r7 | j d d ƒ d } n  | S(   Nu   /i   i    (   RC   t   TrueR<   t   rsplit(   R=   RC   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt
   subdir_urlï   s    c         C` s3   |  j  p |  j } |  j r+ t | |  j ƒ S| Sd  S(   N(   Rr   R1   RA   R   (   R=   Rg   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __str__ö   s    	c         C` s)   d |  j  r! t |  j |  j  ƒ n |  j S(   Nu   Channel("%s")(   RA   R   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __repr__ý   s    c         C` sŽ   t  | t ƒ r1 |  j | j k o0 |  j | j k Sy2 t | ƒ } |  j | j k oa |  j | j k SWn$ t k
 r‰ } t j d | ƒ t SXd  S(   Nu   %r(   R'   R(   R9   R1   t	   Exceptiont   logt   debugt   False(   R=   t   othert   _othert   e(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __eq__   s    "&c         C` s   t  |  j |  j f ƒ S(   N(   t   hashR9   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __hash__  s    c         C` s   t  |  j |  j f ƒ S(   N(   R\   R9   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __nonzero__  s    c         C` s
   |  j  ƒ  S(   N(   Rƒ   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __bool__  s    c         C` s   |  j  S(   N(   t   __dict__(   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   __json__  s    c         C` s   |  j  |  j f S(   N(   Rr   Rc   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   url_channel_wtf  s    c         C` sJ   i |  j  d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6S(   Nu   schemeu   authu   locationu   tokenu   nameu   platformu   package_filename(   R7   R8   R9   R:   R1   R;   R<   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   dump  s    





N(    R3   R4   R5   R)   t   staticmethodR6   RG   R>   t   propertyR?   R@   RA   RD   RF   R*   RV   Rc   R|   Ri   RC   Rr   Rs   Rv   Rw   Rx   R€   R‚   Rƒ   R„   R†   R‡   Rˆ   (    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR(   2   s8   		#							R,   c           B` st   e  Z d d  „ Z e d „  ƒ Z e d „  ƒ Z e d d „ Z e d „  ƒ Z	 e d „  ƒ Z
 e d „ Z d „  Z RS(	   c         ` sž   | |  _  d  |  _ ˆ  rd t d „  | Dƒ ƒ } t ‡  f d †  | Dƒ ƒ t d „  | Dƒ ƒ |  _ n	 | |  _ d  |  _ d  |  _ d  |  _ ˆ  |  _	 d  |  _
 d  S(   Nc         s` s   |  ] } | j  ƒ  Vq d  S(   N(   Rˆ   (   R#   R0   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>.  s    c         3` s!   |  ] } | j  d  ˆ  ƒ Vq d S(   R;   N(   t   update(   R#   t   cd(   R;   (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>/  s    c         s` s   |  ] } t  |   Vq d  S(   N(   R(   (   R#   RŒ   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>0  s    (   R1   RG   R9   R+   R\   t	   _channelsR7   R8   R:   R;   R<   (   R=   R1   R2   R;   t   c_dicts(    (   R;   s3   lib/python2.7/site-packages/conda/models/channel.pyR>   )  s    							c         C` s   |  j  S(   N(   R9   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR?   :  s    c         C` s   |  j  S(   N(   R1   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRc   >  s    c         ` s/   |  j  } t t j ‡  ‡ f d †  | Dƒ ƒ ƒ S(   Nc         3` s!   |  ] } | j  ˆ ˆ  ƒ Vq d  S(   N(   Ri   (   R#   R0   (   Rd   Rl   (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>D  s    (   R   t   listR   t   from_iterable(   R=   Rl   Rd   R   (    (   Rd   Rl   s3   lib/python2.7/site-packages/conda/models/channel.pyRi   B  s    	c         C` s   d  S(   N(   RG   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRr   F  s    c         C` s   t  d „  |  j Dƒ ƒ S(   Nc         s` s   |  ] } | j  Vq d  S(   N(   Rr   (   R#   R0   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>L  s    (   R+   R   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRs   J  s    c         C` s   d  S(   N(   RG   (   R=   Rl   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRC   N  s    c         C` s(   i |  j  d 6t d „  |  j Dƒ ƒ d 6S(   Nu   namec         s` s   |  ] } | j  ƒ  Vq d  S(   N(   Rˆ   (   R#   R0   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>T  s    u   channels(   R1   R+   R   (   R=   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRˆ   Q  s    
N(   R3   R4   RG   R>   RŠ   R?   Rc   R|   Ri   Rr   Rs   RC   Rˆ   (    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR,   '  s   c         C` s   t  d „  t |  | ƒ Dƒ ƒ S(   Nc         s` s!   |  ] \ } } | | k Vq d  S(   N(    (   R#   t   tt   sw(    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>Y  s    (   t   allt   zip(   t   test_iterablet   startswith_iterable(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRZ   X  s    c         C` su   t  |  ƒ t  | ƒ }  } |  j | j k s= |  j | j k rA t Sd „  } t | |  ƒ j d ƒ | | ƒ j d ƒ ƒ S(   Nc         S` s   |  j  j d ƒ p d S(   Nu   /(   RP   RN   (   RC   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   <lambda>`  t    u   /(   R   RL   RM   R|   RZ   R[   (   RT   t   startswith_urlt   norm_url_path(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   tokenized_conda_url_startswith\  s    $	c         ` s®   ‡  f d †  ‰  t  |  t j ƒ \ } } ˆ  | ƒ } | d  k	 rj t | ƒ } | | _ | rf | | _ n  | St j } t d | j	 d | j
 d | j d | j d | d | ƒ Sd  S(   Nc         ` sN   |  t  j k r t  j |  S|  j d d ƒ d } | |  k r@ d  Sˆ  | ƒ Sd  S(   Nu   /i   i    (   R   RY   Ru   RG   (   R1   t	   test_name(   t   _get_channel_for_name_helper(    s3   lib/python2.7/site-packages/conda/models/channel.pyR   f  s    R7   R8   R9   R:   R1   R;   (   R   R   RI   RG   R   R1   R;   RQ   R(   R7   R8   R9   R:   (   R@   RK   R;   R`   RS   (    (   R   s3   lib/python2.7/site-packages/conda/models/channel.pyRE   e  s    			*c         C` sÒ  | o | j  d ƒ } t d | d | d | ƒ j } | sm t d | d | ƒ j j  d ƒ d  |  pc d  d  d  f SxÃ t t j j ƒ  d t d d „  ƒD] \ } } t	 | ƒ \ } } } }	 t
 | t | | ƒ ƒ r’ | j t | | ƒ d d	 ƒ j d ƒ }
 t | |
 ƒ } t | ƒ } | j | | j | j | j f Sq’ Wxl t j D]a } | j | j ƒ r=| j | j d d	 ƒ j d ƒ } t j } | j | | j | j | j f Sq=Wx® t t j j ƒ  d t d d
 „  ƒD]ˆ \ } } t | j | j ƒ } t | j d ƒ | j d ƒ ƒ rÇ| j | d d	 ƒ j d ƒ }
 | j t | j |
 ƒ |  | j | j f SqÇWt j } | j rÌt | j d ƒ | j j d ƒ ƒ rÌ| j | j d d	 ƒ j d ƒ p­d  } | j | |  | j | j f S| d  k r3| d  k sêt ‚ | j d d	 ƒ \ } } | sd } n  d \ } } }	 | | | | |	 f Sd  } | j d ƒ j d ƒ } | r‰| d d k r‰d d j t d	 | ƒ ƒ } } n  t d | d | d | ƒ j j  d ƒ | j d ƒ p¿d  |  pÈd  d  d  f S(   Nu   /RL   RM   RP   t   reverset   keyc         S` s   t  |  d ƒ S(   Ni    (   R&   (   t   x(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR—   Œ  R˜   u    i   c         S` s   t  |  d ƒ S(   Ni    (   R&   (   R    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyR—   ž  R˜   u   filei    u   conda(   u   fileNN(   t   rstripR   RC   RG   t   sortedR   t   migrated_custom_channelst   itemsRt   R   R›   R   RO   RN   RE   R9   R7   R8   R:   R]   RH   RQ   RY   R1   RZ   R[   Rh   Ru   t   joinR
   (   R7   RL   RM   RP   RT   R1   R9   t   _schemet   _autht   _tokent   subnameR@   R`   t   migrated_aliasRS   t   that_test_urlt   bumpt
   path_parts(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   _read_channel_configuration€  sR    4'#!	#!	-'	"6c      	   C` s   t  |  t j ƒ \	 } } } } } } } } }	 t | | | | ƒ \ }
 } } } } |
 d  k	 so | d  k	 so t ‚ t | p{ d | p„ | |
 | p | | | | ƒ S(   Nu   https(   R   R   RI   R®   RG   Rh   R(   (   RC   R7   R8   R:   R;   R<   RL   RM   RP   t   queryR?   R@   t   configured_schemet   configured_autht   configured_token(    (    s3   lib/python2.7/site-packages/conda/models/channel.pyRB   À  s    -$		c           C` s
   t  j f S(   N(   R   t   local_build_root(    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   get_conda_build_local_urlÖ  s    c         C` s¥   t  d „  d „  |  Dƒ Dƒ ƒ }  t ƒ  } xu t |  ƒ D]g \ } } t | ƒ } xL | j | | ƒ D]8 } | | k ry qa n  | j t | t d ƒ f | | <qa Wq6 W| S(   Nc         s` s:   |  ]0 } t  | t ƒ r+ d  „  | j Dƒ n | f Vq d S(   c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R(   (   R#   t   cc(    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>ß  s    N(   R'   R,   R   (   R#   R0   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>ß  s   c         s` s   |  ] } t  | ƒ Vq d  S(   N(   R(   (   R#   R0   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pys	   <genexpr>à  s    i   (   R   R   t	   enumerateR(   Ri   Rc   t   minR   (   R2   Rl   Rd   t   resultt   priority_countert   chnR`   RC   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   prioritize_channelsÚ  s    		(c         C` sC   t  ƒ  } x3 |  D]+ } t | ƒ } | j | j | | ƒ ƒ q W| S(   N(   R   R(   R‹   Ri   (   R2   Rd   Rl   R¸   Rº   R`   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   all_channel_urlsë  s
    	c         C` s$   t  j p# t |  ƒ p# |  j d ƒ S(   Nu   file:/(   R   t   offlineR   RH   (   RC   (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   offline_keepó  s    N(>   t
   __future__R    R   R   R   R   t	   itertoolsR   t   loggingR   t   _vendor.boltons.setutilsR   t   _vendor.toolzR   R	   R
   t   base.constantsR   R   R   t   base.contextR   t   common.compatR   R   R   R   R   t   common.pathR   R   R   t
   common.urlR   R   R   R   R   R   R   R   R   R3   Rz   t   typeR    t   objectR(   R,   RZ   R›   RE   R®   RB   R´   Rt   RG   R»   R¼   R¾   t   register_reset_callabackR6   (    (    (    s3   lib/python2.7/site-packages/conda/models/channel.pyt   <module>   s2   "(@ô1					@			