
    wBfpJ                     ~   d 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 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mZmZmZmZmZmZ  ee       Z! G d de"      Z# G d de#      Z$ G d de$      Z%d Z&d Z'd Z(d Z)d Z*d Z+ddZ,d dZ-d Z.defdZ/ ej`                  e$jb                         y)!zDefines Channel and MultiChannel objects and other channel-related functions.

Object inheritance:

.. autoapi-inheritance-diagram:: Channel MultiChannel
   :top-classes: conda.models.channel.Channel
   :parts: 1
    )copy)chain)	getLogger)
IndexedSet   )DEFAULTS_CHANNEL_NAMEMAX_CHANNEL_PRIORITYUNKNOWN_CHANNEL)Contextcontext)ensure_text_type
isiterable)is_package_fileis_pathwin_path_backout)	Url
has_schemeis_urljoin_urlpath_to_urlsplit_conda_url_easy_partssplit_platformsplit_scheme_auth_tokenurlparsec                   "     e Zd ZdZ fdZ xZS )ChannelTypezn
    This metaclass does basic caching and enables static constructor method usage with a
    single arg.
    c                 d    t        |      dk(  rh|sf|d   }t        |t              r|S |t        j                  v rt        j                  |   S t        j	                  |      x}t        j                  |<   |S d|v r&t         fd|d   D              }t        |d   |      S t            |i |S )N   r   channelsc              3   .   K   | ]  } di |  y w)N r!   ).0_kwargsclss     4lib/python3.12/site-packages/conda/models/channel.py	<genexpr>z'ChannelType.__call__.<locals>.<genexpr>;   s     NS^7^Ns   name)	len
isinstanceChannel_cache_
from_valuetupleMultiChannelsuper__call__)r$   argskwargsvaluecr   	__class__s   `     r%   r0   zChannelType.__call__/   s    t9>&GE%)'//)u---4-?-?-FFGOOE*6!N6*;MNNHv997#T4V44    )__name__
__module____qualname____doc__r0   __classcell__)r5   s   @r%   r   r   )   s    
5 5r6   r   c                   <   e Zd ZdZi Zed        Z	 	 	 	 	 	 	 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ddZd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y)r*   z
    Channel:
    scheme <> auth <> location <> token <> channel <> subchannel <> platform <> package_filename

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

    c                      i t         _        y N)r*   r+   r!   r6   r%   _reset_statezChannel._reset_stateM   s	    r6   Nc                 n    || _         || _        || _        || _        |xs d| _        || _        || _        y )N schemeauthlocationtokenr'   platformpackage_filename)selfrC   rD   rE   rF   r'   rG   rH   s           r%   __init__zChannel.__init__Q   s:     	 
JB	  0r6   c                     | j                   S r>   rE   rI   s    r%   channel_locationzChannel.channel_locationc       }}r6   c                     | j                   S r>   r'   rM   s    r%   channel_namezChannel.channel_nameg       yyr6   c                     | j                   S r>   rG   rM   s    r%   subdirzChannel.subdirk   rO   r6   c                     t        |       S r>   )parse_conda_channel_urlurls    r%   from_urlzChannel.from_urlo   s    &s++r6   c                     t        |       S r>   )_get_channel_for_name)rR   s    r%   from_channel_namezChannel.from_channel_names   s    $\22r6   c                 F   | dv rt        t              S t        |       } t        |       r1| j	                  d      rt        |       } t         j                  |       S t        |       rt         j                  t        |             S t        |       r1| j	                  d      rt        |       } t         j                  |       S t        t        j                  |       \  }}|t        j                  v rt        |t        j                  |   |      S t         j                  |       S )N)Nz	<unknown>zNone:///<unknown>NonerQ   zfile:)r*   r
   r   r   
startswithr   r[   r   r   r   r   r   known_subdirscustom_multichannelsr.   r^   )r3   	_strippedrG   s      r%   r,   zChannel.from_valuew   s    DD00 'e((/##E**U^##K$677U#((/##E** #11F1F"NIxG888#w;;IF  0077r6   c           	         | }t        |      \  }}}}|r!|rt        |||||j                  d            S |r|j                  rE|j	                  |j                        r*|j                  |j                  |j                  dd      }}nEt        |      }	t        t        |	j                  |	j                              }|	j                  xs d}t        |||||j                  d            S t        |j                  |j                  |j                  |j                  |xr |j                  d      xs |j                  d            S )N/)rC   rD   rE   rF   r'   rA   r   hostnameport)r   r*   striprE   ra   replacer   strr   rh   ri   pathrC   rD   rF   )
channel_aliaschannel_urlr'   catest_urlrC   rD   rF   rE   	url_partss
             r%   make_simple_channelzChannel.make_simple_channel   s#   (?(L%&$F!ZZ_  {{x222;;?!#h.>.>r{{BPQ.R$$X.	sI,>,>Y^^TU ~~+!ZZ_  yyWWhh-djjoG1B1B31G r6   c                 J    	  j                   S # t        $ r Y nw xY wt        j                  j	                         D ]4  \  }}|D ]*  } j
                  |j
                  k(  s|x} _         |c c S  6 t        j                  D ]Z  } j
                  st         j
                  j                  d      |j                  d            sE j
                  x} _         |c S  t         fdt        j                  gt        j                  D              r j
                  x} _         |S  j                  r8 j                   dt         j                   j
                         x} _         |S t         j                   j
                        j                  d      x} _         |S )Nrf   c              3   P   K   | ]  }|j                   j                   k(    y wr>   rL   )r"   aliasrI   s     r%   r&   z)Channel.canonical_name.<locals>.<genexpr>   s&      
 NNdmm+
s   #&://)_Channel__canonical_nameAttributeErrorr   rc   itemsr'   custom_channelstokenized_startswithsplitanyrn   migrated_channel_aliasesrC   r   rE   lstrip)rI   	multinamer   channelcn	that_names   `     r%   canonical_namezChannel.canonical_name   s   	((( 		 $+#?#?#E#E#G 	Ix# 99,1::B.I	 !00 	Iyy1		$iooc&: .2YY6T*		  
 %%11
 
 *.2B&I ;;;;-s8DMM499#E"FGB& I)1$--)K)R)RSV)WWB&Is    	c                 \    t         j                  t              sJ         j                  t        k(  rt        t              j                  |      S  j                  g|r) j                  rj                  d j                  g       j                   j                         t          fd}fd |       D        }|r8 j                  r,|D cg c]   } j                   d j                   d| " c}S |D cg c]  } j                   d|  c}S c c}w c c}w )Ntc               3      K    j                   r# j                     j                   dk7  rd y y E d {    y 7 w)NnoarchrU   )rI   subdirss   r%   
_platformsz Channel.urls.<locals>._platforms   s9     }}mm#==H,"N - #""s   5A >A c              3   6   K   | ]  }t        |        y wr>   )r   )r"   pbases     r%   r&   zChannel.urls.<locals>.<genexpr>   s     9q$"9s   rw   @)r   r   r   r   r
   r*   r   urlsrE   rF   extendappendr'   r   rD   rC   )rI   with_credentialsr   r   basesbr   s   ` `   @r%   r   zChannel.urls   s    ?ooG'"+G+"/101667GQQ

KKdjj)*DII	# :JL9		@EF1t{{m3tyyk1#6FF49:qt{{m3qc*:: G:s   %D$	D)c                 \   | j                   t        k(  ry | j                  g}|r)| j                  r|j	                  d| j                  g       |j                  | j                         | j                  rC|j                  | j                         | j                  rN|j                  | j                         n2t        d t        j                  D        d      }|j                  |       t        | }|r*| j                  r| j                   d| j                   d| S | j                   d| S )Nr   c              3   ,   K   | ]  }|d k7  s	|  yw)r   Nr!   )r"   ss     r%   r&   zChannel.url.<locals>.<genexpr>  s     =qqH}=s   
r   rw   r   )r   r
   rE   rF   r   r   r'   rG   rH   nextr   r   r   rD   rC   )rI   r   r   first_non_noarchs       r%   rZ   zChannel.url   s    /1

KKdjj)*DII==KK&$$D112#=GOO=x  KK()		kk]#dii[$88kk]#dV,,r6   c                     | j                   t        k(  ry | j                   dt        | j                  | j
                         S )Nrw   )r   r
   rC   r   rE   r'   rM   s    r%   base_urlzChannel.base_url  s8    /1++c(4==$))"D!EFFr6   c                     | j                   fS r>   r   rM   s    r%   	base_urlszChannel.base_urls  s    r6   c                 n    | j                  d      }| j                  r|r|j                  dd      d   }|S )NTrf   r   r   )rZ   rH   rsplit)rI   rZ   s     r%   
subdir_urlzChannel.subdir_url  s4    hhtn  S**S!$Q'C
r6   c                 ~    | j                   xs | j                  }| j                  rt        || j                        S |S r>   )r   r'   rV   r   )rI   r   s     r%   __str__zChannel.__str__$  s1    }})		;;D$++..Kr6   c                 |    d| j                   r"t        | j                  | j                         z  S | j                  z  S )NzChannel("%s"))rV   r   r'   rM   s    r%   __repr__zChannel.__repr__+  s8    04HTYY,
 	
AE
 	
r6   c                 b   t        |t              r4| j                  |j                  k(  xr | j                  |j                  k(  S 	 t        |      }| j                  |j                  k(  xr | j                  |j                  k(  S # t        $ r }t
        j                  d|       Y d }~yd }~ww xY w)Nz%rF)r)   r*   rE   r'   	Exceptionlogdebug)rI   other_otheres       r%   __eq__zChannel.__eq__0  s    eW%==ENN2NtyyEJJ7NN }}7TDII<TT 		$"s   >B 	B.B))B.c                 D    t        | j                  | j                  f      S r>   )hashrE   r'   rM   s    r%   __hash__zChannel.__hash__;  s    T]]DII.//r6   c                 D    t        | j                  | j                  f      S r>   )r~   rE   r'   rM   s    r%   __nonzero__zChannel.__nonzero__>  s    DMM499-..r6   c                 "    | j                         S r>   )r   rM   s    r%   __bool__zChannel.__bool__A  s    !!r6   c                     | j                   S r>   )__dict__rM   s    r%   __json__zChannel.__json__D  s    }}r6   c                 2    | j                   | j                  fS r>   )r   r   rM   s    r%   url_channel_wtfzChannel.url_channel_wtfG  s    }}d1111r6   c                     | j                   | j                  | j                  | j                  | j                  | j
                  | j                  dS )NrB   rB   rM   s    r%   dumpzChannel.dumpK  s?    kkIIZZII $ 5 5
 	
r6   )NNNNNNNr>   FNF)r7   r8   r9   r:   r+   staticmethodr?   rJ   propertyrN   rR   rV   r[   r^   r,   rs   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r!   r6   r%   r*   r*   A   sb    G 
 1$       , , 3 3 8 82    D & &P;:-2 G G
      

	0/" 2 2	
r6   r*   )	metaclassc                   j    e Zd Zd
dZed        Zed        ZddZed        Zed        Z	ddZ
d	 Zy)r.   Nc                     || _         d | _        rt        fd|D              | _        n|| _        d | _        d | _        d | _        | _        d | _        y )Nc              3   \   K   | ]#  }t        di i |j                         d i % yw)rG   Nr!   )r*   r   )r"   r   rG   s     r%   r&   z(MultiChannel.__init__.<locals>.<genexpr>]  s4      # CBW\\^BZBC#s   ),)	r'   rE   r-   	_channelsrC   rD   rF   rG   rH   )rI   r'   r   rG   s      `r%   rJ   zMultiChannel.__init__X  sZ    	" #'# DN
 &DN	
  $r6   c                     | j                   S r>   rL   rM   s    r%   rN   zMultiChannel.channel_locationj  rO   r6   c                     | j                   S r>   rQ   rM   s    r%   r   zMultiChannel.canonical_namen  rS   r6   c                 n    | j                   }t        t        j                  fd|D                    S )Nc              3   B   K   | ]  }|j                          y wr>   )r   )r"   r4   r   r   s     r%   r&   z$MultiChannel.urls.<locals>.<genexpr>u  s     Ua'7 AUs   )r   listr   from_iterable)rI   r   r   r   s    `` r%   r   zMultiChannel.urlsr  s-    NN	U9UU
 	
r6   c                      y r>   r!   rM   s    r%   r   zMultiChannel.base_urlx  s    r6   c                 :    t        d | j                  D              S )Nc              3   4   K   | ]  }|j                     y wr>   r   r"   r4   s     r%   r&   z)MultiChannel.base_urls.<locals>.<genexpr>~  s     8AQZZ8s   )r-   r   rM   s    r%   r   zMultiChannel.base_urls|  s    8888r6   c                      y r>   r!   )rI   r   s     r%   rZ   zMultiChannel.url  s    r6   c                 T    | j                   t        d | j                  D              dS )Nc              3   <   K   | ]  }|j                           y wr>   )r   r   s     r%   r&   z$MultiChannel.dump.<locals>.<genexpr>  s     4V!QVVX4Vs   )r'   r   )r'   r-   r   rM   s    r%   r   zMultiChannel.dump  s     		u4Vt~~4V/VWWr6   r>   r   r   )r7   r8   r9   rJ   r   rN   r   r   r   r   rZ   r   r!   r6   r%   r.   r.   W  sg    %$    
   9 9Xr6   r.   c                 :    t        d t        | |      D              S )Nc              3   ,   K   | ]  \  }}||k(    y wr>   r!   )r"   r   sws      r%   r&   z'tokenized_startswith.<locals>.<genexpr>  s     L51bqBwLs   )allzip)test_iterablestartswith_iterables     r%   r|   r|     s    LC7J$KLLLr6   c                    t        |       t        |      }} | j                  |j                  k7  s| j                  |j                  k7  ryd }t         ||       j	                  d       ||      j	                  d            S )NFc                 @    | j                   j                  d      xs dS )Nrf   )rm   rj   rY   s    r%   <lambda>z0tokenized_conda_url_startswith.<locals>.<lambda>  s    s 3 :s r6   rf   )r   rh   ri   r|   r}   )rq   startswith_urlnorm_url_paths      r%   tokenized_conda_url_startswithr     sv    '18N3KnH^444==N///:Mh%%c*M.,I,O,OPS,T r6   c                 (   fdt        t        j                  |       \  }} |      }|t        |      }||_        |r||_        |S t        j                  }t        |j                  |j                  |j                  |j                  ||      S )Nc                     | t         j                  v rt         j                  |    S | j                  dd      d   }|| k(  ry  |      S )Nrf   r   r   )r   r{   r   )r'   	test_name_get_channel_for_name_helpers     r%   r   z;_get_channel_for_name.<locals>._get_channel_for_name_helper  sM    7*****400C+A.ID /	::r6   )rC   rD   rE   rF   r'   rG   )r   r   rb   r   r'   rG   rn   r*   rC   rD   rE   rF   )rR   rd   rG   r   rp   r   s        @r%   r]   r]     s    ; ))>)>MIx*95G w- 'G""99[[((
 	
r6   c                    |xr |j                  d      }t        t        |||            }|s.t        t        ||            j                  d      d | xs d d d fS t        t        j
                  j                         dd       D ]  \  }}t        |      \  }}}}	t        |t        ||            s-|j                  t        ||      dd      j                  d      }
t        ||
      }t        |      }|j                  ||j                  |j                  |j                   fc S  t        j"                  D ]  }|j%                  |j                        s|j                  |j                  dd      j                  d      }t        j&                  }|j                  ||j                  |j                  |j                   fc S  t        t        j(                  j                         dd	       D ]  \  }}t        |j                  |j*                        }t-        |j/                  d      |j/                  d            sQ|j                  |dd      j                  d      }
|j                  t        |j*                  |
      | |j                  |j                   fc S  t        j&                  }|j                  rt-        |j/                  d      |j                  j/                  d            rU|j                  |j                  dd      j                  d      xs d }|j                  || |j                  |j                   fS |*|J |j1                  dd      \  }}|sd}d
\  }}}	|||||	fS d }|j                  d      j/                  d      }|r|d   dk(  rddj3                  |dd        }}t        t        |||            j                  d      |j                  d      xs d | xs d d d fS )Nrf   )rh   ri   rm   rg   Tc                     t        | d         S Nr   r(   xs    r%   r   z-_read_channel_configuration.<locals>.<lambda>  s    cRSTURVi r6   )reversekeyrA   r   c                     t        | d         S r   r   r   s    r%   r   z-_read_channel_configuration.<locals>.<lambda>  s    S1Y r6   )fileNNr   conda)rstriprl   r   sortedr   migrated_custom_channelsrz   r   r   r   rk   rj   r]   rE   rC   rD   rF   r   ra   rn   r{   r'   r|   r}   r   join)rC   hostri   rm   rq   r'   rE   _scheme_auth_tokensubnamerR   r   migrated_aliasrp   that_test_urlbump
path_partss                     r%   _read_channel_configurationr     s    $DKK$D34d;<H T-.55c:Nd
 	
 !((..0$DW h ,C8+L('5&)(HXt4LM&&x$'?QGMMcRG#D'2L+L9G   $ ":: C~667##N$;$;RCII#ND&&B;;bii"((BB	C  %%';N g !!1!17<<@s 3]5H5H5MN&&}b!<BB3GG  w/  
		B	{{+sR[[..s3 R399#>F${{D&"''288;; |||!a0$H!3wv55
 DC&&s+Jjmw.chhz!"~6dCDt45<<SA

34$ r6   c           	          t        t        j                  |       \	  }}}}}}}}}	t        ||||      \  }
}}}}|
|J t	        |xs d|xs ||
|xs ||||      S )Nhttps)r   r   rb   r   r*   )rZ   rC   rD   rF   rG   rH   r   ri   rm   queryrN   rR   configured_schemeconfigured_authconfigured_tokens                  r%   rX   rX     s     	#7#8#8#>
 	$FD$=
 '<+CCC$W!! r6   c                  $    t         j                  fS r>   )r   local_build_rootr!   r6   r%   get_conda_build_local_urlr  9  s    $$&&r6   Nc                    t        j                  d d | D        D              } i }t        |       D ]N  \  }}t        |      }|j	                  ||      D ])  }||v r|j
                  t        |t        dz
        f||<   + P |S )Nc              3   h   K   | ]*  }t        |t              rd  |j                  D        n|f , yw)c              3   2   K   | ]  }t        |        y wr>   r*   )r"   ccs     r%   r&   z0prioritize_channels.<locals>.<genexpr>.<genexpr>C  s     ++   N)r)   r.   r   r   s     r%   r&   z&prioritize_channels.<locals>.<genexpr>B  s4      # 0:!\/J+q{{+QRPTT#s   02c              3   2   K   | ]  }t        |        y wr>   r	  r   s     r%   r&   z&prioritize_channels.<locals>.<genexpr>D  s     /'!*/r  r   )r   r   	enumerater*   r   r   minr	   )r   r   r   resultpriority_counterchnr   rZ   s           r%   prioritize_channelsr  =  s    
 "" #/h/# H F!*8!4 ##,<< 0': 	Cf}&&$&:Q&>?F3K	 Mr6   c                     t               }| D ].  }t        |      }|j                  |j                  ||             0 |S r>   )r   r*   updater   )r   r   r   r  r  r   s         r%   all_channel_urlsr  S  s@    \F ?#,gll#3W=>? Mr6   c                 f    t         j                   xs t        |        xs | j                  d      S )Nzfile:/)r   offliner   ra   rY   s    r%   offline_keepr  [  s(    MfSk/MS^^H5MMr6   ctxc                 :    t        d | j                  D              S )z*Return current channels as Channel objectsc              3   2   K   | ]  }t        |        y wr>   r	  )r"   r  s     r%   r&   z#get_channel_objs.<locals>.<genexpr>a  s     6#6r  )r-   r   )r  s    r%   get_channel_objsr  _  s    6666r6   )TN)NT)2r:   r   	itertoolsr   loggingr   boltons.setutilsr   base.constantsr   r	   r
   base.contextr   r   common.compatr   r   common.pathr   r   r   
common.urlr   r   r   r   r   r   r   r   r   r7   r   typer   r*   r.   r|   r   r]   r   rX   r  r  r  r  r  register_reset_callabackr?   r!   r6   r%   <module>r'     s       ' 
 , 8 D D
 
 
 5$ 50S
 S
l-X7 -X`M

BWt"L',N7' 7
 !    !5!5 6r6   