
    DIeJ                        d Z ddlmZ ddlmZ ddlmZ 	 ddlmZ n# e$ r	 ddl	mZ Y nw xY w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 Z0defdZ1 ej2        e&j3                   dS )"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                     t          |          dk    rl|sj|d         }t          |t                    r|S |t          j        v rt          j        |         S t                              |          x}t          j        |<   |S d|v r7t           fd|d         D                       }t          |d         |          S  t                      j        |i |S )N   r   channelsc              3   (   K   | ]} di |V  d S )N r!   ).0_kwargsclss     4lib/python3.11/site-packages/conda/models/channel.py	<genexpr>z'ChannelType.__call__.<locals>.<genexpr>=   s/      NNSS^^7^^NNNNNN    name)	len
isinstanceChannel_cache_
from_valuetupleMultiChannelsuper__call__)r$   argskwargsvaluecr   	__class__s   `     r%   r1   zChannelType.__call__1   s    t99>>&>GE%)) '/))u---4-?-?-F-FFGOE*6!!NNNN6*;MNNNNNHv999#577#T4V444r'   )__name__
__module____qualname____doc__r1   __classcell__)r6   s   @r%   r   r   +   sB         
5 5 5 5 5 5 5 5 5r'   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dS ) r+   z
    Channel:
    scheme <> auth <> location <> token <> channel <> subchannel <> platform <> package_filename

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

    c                      i t           _        d S N)r+   r,   r!   r'   r%   _reset_statezChannel._reset_stateO   s    r'   Nc                 l    || _         || _        || _        || _        |pd| _        || _        || _        d S )N schemeauthlocationtokenr(   platformpackage_filename)selfrC   rD   rE   rF   r(   rG   rH   s           r%   __init__zChannel.__init__S   s@     	 
JB	  0r'   c                     | j         S r>   rE   rI   s    r%   channel_locationzChannel.channel_locatione   
    }r'   c                     | j         S r>   r(   rM   s    r%   channel_namezChannel.channel_namei   
    yr'   c                     | j         S r>   rG   rM   s    r%   subdirzChannel.subdirm   rO   r'   c                      t          |           S r>   )parse_conda_channel_urlurls    r%   from_urlzChannel.from_urlq   s    &s+++r'   c                      t          |           S r>   )_get_channel_for_name)rR   s    r%   from_channel_namezChannel.from_channel_nameu   s    $\222r'   c                    | dv rt          t                    S t          |           } t          |           r>|                     d          rt          |           } t                               |           S t          |           r't                               t          |                     S t          |           r>|                     d          rt          |           } t                               |           S t          t          j        |           \  }}|t          j        v r!t          |t          j        |         |          S t                               |           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^   )r4   	_strippedrG   s      r%   r-   zChannel.from_valuey   sB   DDD0000 ''e 	8(( 0(//##E***U^^ 	8##K$6$6777U## 	8(( 0(//##E*** #11F"N"NIxG888#w;IF   00777r'   c           	         | }t          |          \  }}}}|r)|r't          |||||                    d                    S |r|j        r>|                    |j                  r$|j        |                    |j        dd          }}n@t          |          }	t          t          |	j	        |	j
                            }|	j        pd}t          |||||                    d                    S t          |j        |j        |j        |j        |r|                    d          p|                    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   sc   (?(L(L%&$ 	F 	!ZZ__     	{ ,x222;?? ,!#h.>.>r{BPQ.R.R$$X..	sI,>Y^TTTUU ~+!ZZ__    yWh-djjooG1B1B31G1G   r'   c                     	  j         S # t          $ r Y nw xY wt          j                                        D ])\  }}|D ]!} j        |j        k    r|x} _         |c c S "*t          j        D ]V} j        rMt           j                            d          |                    d                    r j        x} _         |c S Wt           fdt          j
        gt          j        R D                       r j        x} _         |S  j        r<d                     j        t           j         j                            x} _         |S t           j         j                                      d          x} _         |S )Nrf   c              3   8   K   | ]}|j         j         k    V  d S r>   rL   )r"   aliasrI   s     r%   r&   z)Channel.canonical_name.<locals>.<genexpr>   s@       
 
 Ndm+
 
 
 
 
 
r'   z{}://{})_Channel__canonical_nameAttributeErrorr   rc   itemsr(   custom_channelstokenized_startswithsplitanyrn   migrated_channel_aliasesrC   formatr   rE   lstrip)rI   	multinamer   channelcn	that_names   `     r%   canonical_namezChannel.canonical_name   s   	(( 	 	 	D	 $+#?#E#E#G#G 	 	Ix#  9,,1::B.IIIII -
 !0 	 	Iy 1	$$iooc&:&:   .2Y6T*			 
 
 
 
 %1 
 
 
 
 
 	 *.2B&I ; 	)2)9)9XdmTY??* * B& I)1$-)K)K)R)RSV)W)WWB&Is   
 
Fc                     t           j        t                    s
J              j        t          k    r(t          t                                        |          S  j        g|r# j	        r
                    d j	        g                                j                   t            fd}fd |            D             }|r j        r fd|D             S  fd|D             S )Ntc               3   b   K    j         r j         V   j         dk    rdV  d S d S E d {V  d S )NnoarchrU   )rI   subdirss   r%   
_platformsz Channel.urls.<locals>._platforms   sa      } #m###=H,,"NNNNN -, #"""""""""r'   c              3   8   K   | ]}t          |          V  d S r>   )r   )r"   pbases     r%   r&   zChannel.urls.<locals>.<genexpr>   s-      99q$""999999r'   c                 8    g | ]}j          d j         d| S )://@)rC   rD   r"   brI   s     r%   
<listcomp>z Channel.urls.<locals>.<listcomp>   s3    FFF1t{66ty66166FFFr'   c                 (    g | ]}j          d | S )r   )rC   r   s     r%   r   z Channel.urls.<locals>.<listcomp>   s)    :::qt{**q**:::r'   )r   r   r   r   r
   r+   r   urlsrE   rF   extendappendr(   r   rD   )rI   with_credentialsr   r   basesr   s   ` `  @r%   r   zChannel.urls   s/   ?oG'""++G+++/11011667GQQQ 	+
 	+KKdj)***DI	# 	# 	# 	# 	# 	# :999JJLL999 	;	 	;FFFFFFFF::::E::::r'   c                    | j         t          k    rd S | j        g}|r#| j        r|                    d| j        g           |                    | j                   | j        r<|                    | j                   | j        r|                    | j                   n9t          d t          j        D             d          }|                    |           t          | }|r| j        r| j         d| j         d| S | j         d| S )Nr   c              3   &   K   | ]}|d k    |V  dS )r   Nr!   )r"   ss     r%   r&   zChannel.url.<locals>.<genexpr>
  s&      ==qqH}}}}}}==r'   r   r   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14 	+
 	+KKdj)***DI= 	*KK&&&$ 3D1222#==GO===x    KK())) 	-	 	-k88di88$888k,,d,,,r'   c                 n    | j         t          k    rd S | j         dt          | j        | j                   S )Nr   )r   r
   rC   r   rE   r(   rM   s    r%   base_urlzChannel.base_url  s9    /114+FF(4=$)"D"DFFFr'   c                     | j         fS r>   r   rM   s    r%   	base_urlszChannel.base_urls  s    r'   c                 z    |                      d          }| j        r|r|                    dd          d         }|S )NTrf   r   r   )rZ   rH   rsplit)rI   rZ   s     r%   
subdir_urlzChannel.subdir_url  s@    hhtnn  	(S 	(**S!$$Q'C
r'   c                 Z    | j         p| j        }| j        rt          || j                  S |S r>   )r   r(   rV   r   )rI   r   s     r%   __str__zChannel.__str__&  s1    })	; 	D$+...Kr'   c                 X    d| j         rt          | j        | j                   n| j        z  S )NzChannel("%s"))rV   r   r(   rM   s    r%   __repr__zChannel.__repr__-  s.    04JHTY,,,
 	
r'   c                 2   t          |t                    r | j        |j        k    o| j        |j        k    S 	 t          |          }| j        |j        k    o| j        |j        k    S # t          $ r&}t
                              d|           Y d }~dS d }~ww xY w)Nz%rF)r*   r+   rE   r(   	Exceptionlogdebug)rI   other_otheres       r%   __eq__zChannel.__eq__2  s    eW%% 	=EN2NtyEJ7NN }7TDI<TT   		$"""uuuuus   .A& &
B0BBc                 8    t          | j        | j        f          S r>   )hashrE   r(   rM   s    r%   __hash__zChannel.__hash__=  s    T]DI.///r'   c                 8    t          | j        | j        f          S r>   )r}   rE   r(   rM   s    r%   __nonzero__zChannel.__nonzero__@  s    DM49-...r'   c                 *    |                                  S r>   )r   rM   s    r%   __bool__zChannel.__bool__C  s    !!!r'   c                     | j         S r>   )__dict__rM   s    r%   __json__zChannel.__json__F  s
    }r'   c                     | j         | j        fS r>   )r   r   rM   s    r%   url_channel_wtfzChannel.url_channel_wtfI  s    }d111r'   c                 \    | j         | j        | j        | j        | j        | j        | j        dS )NrB   rB   rM   s    r%   dumpzChannel.dumpM  s5    kIZI $ 5
 
 	
r'   )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!   r'   r%   r+   r+   C   sW         G  \
 1 1 1 1$   X   X   X , , \, 3 3 \3 8 8 \82       \ D & & X&P; ; ; ;:- - - -2 G G XG
     X    X  
 
 

	 	 	0 0 0/ / /" " "   2 2 X2	
 	
 	
 	
 	
r'   r+   )	metaclassc                       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dS )r/   Nc                     || _         d | _        r!t          fd|D                       | _        n|| _        d | _        d | _        d | _        | _        d | _        d S )Nc              3   `   K   | ](}t          di i |                                d iV  )dS )rG   Nr!   )r+   r   )r"   r   rG   s     r%   r&   z(MultiChannel.__init__.<locals>.<genexpr>_  s]       # # CCBW\\^^BZBBCC# # # # # #r'   )	r(   rE   r.   	_channelsrC   rD   rF   rG   rH   )rI   r(   r   rG   s      `r%   rJ   zMultiChannel.__init__Z  s    	 	&" # # # #'# # #  DNN
 &DN	
  $r'   c                     | j         S r>   rL   rM   s    r%   rN   zMultiChannel.channel_locationl  rO   r'   c                     | j         S r>   rQ   rM   s    r%   r   zMultiChannel.canonical_namep  rS   r'   Fc                 p    | j         }t          t          j        fd|D                                 S )Nc              3   D   K   | ]}|                               V  d S r>   )r   )r"   r5   r   r   s     r%   r&   z$MultiChannel.urls.<locals>.<genexpr>w  s2      UUa'7 A AUUUUUUr'   )r   listr   from_iterable)rI   r   r   r   s    `` r%   r   zMultiChannel.urlst  sC    N	UUUUU9UUUUU
 
 	
r'   c                     d S r>   r!   rM   s    r%   r   zMultiChannel.base_urlz  s    tr'   c                 >    t          d | j        D                       S )Nc              3   $   K   | ]}|j         V  d S r>   r   r"   r5   s     r%   r&   z)MultiChannel.base_urls.<locals>.<genexpr>  s$      88AQZ888888r'   )r.   r   rM   s    r%   r   zMultiChannel.base_urls~  s!    88888888r'   c                     d S r>   r!   )rI   r   s     r%   rZ   zMultiChannel.url  s    tr'   c                 N    | j         t          d | j        D                       dS )Nc              3   >   K   | ]}|                                 V  d S r>   )r   r   s     r%   r&   z$MultiChannel.dump.<locals>.<genexpr>  s*      4V4V!QVVXX4V4V4V4V4V4Vr'   )r(   r   )r(   r.   r   rM   s    r%   r   zMultiChannel.dump  s+    	u4V4Vt~4V4V4V/V/VWWWr'   r>   r   r   )r7   r8   r9   rJ   r   rN   r   r   r   r   rZ   r   r!   r'   r%   r/   r/   Y  s        % % % %$   X   X
 
 
 
   X 9 9 X9   X X X X Xr'   r/   c                 P    t          d t          | |          D                       S )Nc              3   (   K   | ]\  }}||k    V  d S r>   r!   )r"   r   sws      r%   r&   z'tokenized_startswith.<locals>.<genexpr>  s*      LL51bqBwLLLLLLr'   )allzip)test_iterablestartswith_iterables     r%   r{   r{     s*    LLC7J$K$KLLLLLLr'   c                    t          |           t          |          }} | j        |j        k    s| j        |j        k    rdS d }t           ||                               d           ||                              d                    S )NFc                 :    | j                             d          pdS )Nrf   )rm   rj   rY   s    r%   <lambda>z0tokenized_conda_url_startswith.<locals>.<lambda>  s    s 3 3 :s r'   rf   )r   rh   ri   r{   r|   )rq   startswith_urlnorm_url_paths      r%   tokenized_conda_url_startswithr     s    '118N3K3KnH^444=N///u::Mh%%c**MM.,I,I,O,OPS,T,T  r'   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 |                     dd          d         }|| k    rd S  |          S )Nrf   r   r   )r   rz   r   )r(   	test_name_get_channel_for_name_helpers     r%   r   z;_get_channel_for_name.<locals>._get_channel_for_name_helper  sX    7****400C++A.ID  t//	:::r'   )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MIx**955G w--  	('G"9[(
 
 
 	
r'   c                 "   |o|                     d          }t          t          |||                    }|s8t          t          ||                                         d          d | pd d d fS t          t          j                                        dd           D ]\  }}t          |          \  }}}}	t          |t          ||                    rt|
                    t          ||          dd                              d          }
t          ||
          }t          |          }|j        ||j        |j        |j        fc S t          j        D ]t}|                    |j                  rX|
                    |j        dd                              d          }t          j        }|j        ||j        |j        |j        fc S ut          t          j                                        dd	           D ]\  }}t          |j        |j                  }t-          |                    d          |                    d                    rU|
                    |dd                              d          }
|j        t          |j        |
          | |j        |j        fc S t          j        }|j        rt-          |                    d          |j                            d                    rG|
                    |j        dd                              d          pd }|j        || |j        |j        fS |.|J |                    dd          \  }}|sd}d
\  }}}	|||||	fS d }|                    d                              d          }|r+|d         dk    rdd                    |dd                    }}t          t          |||                                         d          |                    d          pd | p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    cRSTURVii r'   )reversekeyrA   r   c                 ,    t          | d                   S r   r   r   s    r%   r   z-_read_channel_configuration.<locals>.<lambda>  s    S1YY r'   )fileNNr   conda)rstriprl   r   sortedr   migrated_custom_channelsry   r   r   r   rk   rj   r]   rE   rC   rD   rF   r~   ra   rn   rz   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    sY    $DKK$$D34d;;;<<H  
T---..55c::Nd
 	
 !(..00$DWDW    h ,C8+L+L('5&)(HXt4L4LMM 	&&x$'?'?QGGMMcRRG#D'22L+L99G    	 ": C C~677 	C##N$;RCCII#NND&B;bi"(BBBB	C  %%'';N;N    g !!17<@@s 3 3]5H5H5M5MNN 	&&}b!<<BB3GGG w//   	 
	B	{ <+sR[..s33  < R3399#>>F${D&"'28;; ||||!a00$ 	H!3wv55
 DC&&s++J 7jmw..chhz!""~66dCDt44455<<SAA

34$ r'   c           	          t          t          j        |           \	  }}}}}}}}}	t          ||||          \  }
}}}}|
|J t	          |pd|p||
|p||||          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#>>
 	$FD$==
 '<+C+C+C$W!!  r'   c                      t           j        fS r>   )r   local_build_rootr!   r'   r%   get_conda_build_local_urlr
  ;  s    $&&r'   TNc                 "   t          j        d d | D             D                       } i }t          |           D ]T\  }}t          |          }|                    ||          D ])}||v r|j        t          |t          dz
            f||<   *U|S )Nc              3   h   K   | ]-}t          |t                    rd  |j        D             n|fV  .dS )c              3   4   K   | ]}t          |          V  d S r>   r+   )r"   ccs     r%   r&   z0prioritize_channels.<locals>.<genexpr>.<genexpr>E  s(      ++++++++r'   N)r*   r/   r   r   s     r%   r&   z&prioritize_channels.<locals>.<genexpr>D  s_       # # 0:!\/J/JT++q{++++QRPT# # # # # #r'   c              3   4   K   | ]}t          |          V  d S r>   r  r   s     r%   r&   z&prioritize_channels.<locals>.<genexpr>F  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!4  ##,,<< 0':: 	 	Cf}}!0# "6":3 3 F3KK	 Mr'   c                     t                      }| D ]:}t          |          }|                    |                    ||                     ;|S r>   )r   r+   updater   )r   r   r   r  r  r   s         r%   all_channel_urlsr  T  sN    \\F ? ?#,,gll#3W==>>>>Mr'   c                 f    t           j         p$t          |            p|                     d          S )Nzfile:/)r   offliner   ra   rY   s    r%   offline_keepr  \  s+    MfSkk/MS^^H5M5MMr'   ctxc                 >    t          d | j        D                       S )z*Return current channels as Channel objectsc              3   4   K   | ]}t          |          V  d S r>   r  )r"   r  s     r%   r&   z#get_channel_objs.<locals>.<genexpr>b  s(      66#666666r'   )r.   r   )r  s    r%   get_channel_objsr   `  s!    66666666r'   )TN)NT)4r:   r   	itertoolsr   loggingr   boltons.setutilsr   ImportError_vendor.boltons.setutils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!   r'   r%   <module>r-     s                     6+++++++ 6 6 6555555556         
 , + + + + + + + 8 8 8 8 8 8 8 8 D D D D D D D D D D
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 i5 5 5 5 5$ 5 5 50S
 S
 S
 S
 S
 S
 S
 S
 S
l-X -X -X -X -X7 -X -X -X`M M M
 
 

 
 
BW W Wt" " "L' ' '   *   N N N7' 7 7 7 7
 !  !5 6 6 6 6 6s    ++