
    wBf                         d Z ddl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 ddlmZ dd	l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  ee      ZddZ d Z!d Z"d Z#d Z$ddZ%d Z&y)z&Tools for managing conda environments.    N)EACCESENOENTEROFS)	getLogger)dirnameisdirisfilejoinnormpath   )context)is_admin)ensure_text_typeon_winopen)expand)yield_linesis_conda_environment   )
PrefixDatac                 .    t        t        | dd            S )Nz.condazenvironments.txt)r   r
   )userhomes    7lib/python3.12/site-packages/conda/core/envs_manager.pyget_user_environments_txt_filer      s    $x+=>??    c                    t         j                  sy t               }t        |       } t	        |       }	 t        j                  |       d| v sd| v s|t
        j                  k(  ry | t        |      v ry t
        j                  j	                  |      }	 t        j                  |d       	 t        |d      5 }|j                  t        |              |j                  d       d d d        y #  Y xY w# t        $ r%}t        j                  d| d|        Y d }~y d }~ww xY w# 1 sw Y   y xY w# t        $ r@}|j                   t"        t$        t&        fv rt        j                  d	| |       n Y d }~y d }~ww xY w)
Nplacehold_pl	skeleton_T)exist_okz1Unable to register environment. Could not create z
. Reason: a
zlUnable to register environment. Path not writable or missing.
  environment location: %s
  registry file: %s)r   register_envsr   r   r   osmakedirsdevnullr   pathOSErrorlogwarnr   writer   errnor   r   r   )locationuser_environments_txt_filefolderuser_environments_txt_directoryexcfhes          r   register_envr4      so     !?!A!HXF
F
 	("("%3 	;9::&(ggoo6P&Q#
3dC,c2 	bHH%h/0HHTN	 	7"    ?@ Ae	

 		 	  
77vuf--HH& * 
sY   C+ C2 *D/ 6,D#"D/ +C/2	D ;DD #D,(D/ ,D/ /	E886E33E8c                     t        |       rKt        | d      }t        |      r4t        d t        j                  |      D              }t        |      dkD  ry t        t               |        y )Nz
conda-metac              3   4   K   | ]  }|j                     y wN)name.0entrys     r   	<genexpr>z!unregister_env.<locals>.<genexpr>R   s     %SUejj%S   r   )r   r
   tupler$   scandirlen_clean_environments_txtr   )r-   meta_dirmeta_dir_contentss      r   unregister_envrD   N   sW    X,/? %%Sbjj>R%S S$%) :<hGr   c                     t               t               rlt        r:t        t	        d            } t        d t        j                  |       D              }n8ddlm	} t        d  |       D              xs t	        d      f}nt	        d      f}t        d |      D ]4  }t        |      }t        |      s	 j                  t        |             6 d t$        j&                  D        }j                  fdd	 |D        D               j)                  t$        j*                         t-              S # t        $ r t         j#                  d|        Y w xY w)
N~c              3   4   K   | ]  }|j                     y wr7   )r'   r9   s     r   r<   z*list_all_known_prefixes.<locals>.<genexpr>a   s     Qu

Qr=   r   )getpwallc              3   4   K   | ]  }|j                     y wr7   )pw_dir)r:   pwentrys     r   r<   z*list_all_known_prefixes.<locals>.<genexpr>e   s     I7Ir=   zUnable to access c              3   8   K   | ]  }t        |      s|  y wr7   )r   )r:   envs_dirs     r   r<   z*list_all_known_prefixes.<locals>.<genexpr>v   s     OhuXOs   c              3   @   K   | ]  }|vrt        |      r|  y wr7   r   )r:   r'   all_env_pathss     r   r<   z*list_all_known_prefixes.<locals>.<genexpr>w   s+       }$)=d)C	 	s   c              3   h   K   | ]*  }t        j                  |      D ]  }|j                    , y wr7   )r$   r?   r'   )r:   rM   r;   s      r   r<   z*list_all_known_prefixes.<locals>.<genexpr>y   s4      
#bjj>R
5:EJJ

s   02)setr   r   r   r   r>   r$   r?   pwdrH   filterr   r	   updaterA   PermissionErrorr)   warningr   	envs_dirsaddroot_prefixsorted)home_dir_dirsearch_dirsrH   home_direnvironments_txt_filerW   rO   s         @r   list_all_known_prefixesr_   [   s8   EMz"6#;/LQ

<8PQQK$IhjII sNK c{n4- I >x H'(I $$%<=R%STI P'*;*;OI 
'0
  g))*-   # I/0E/FGHIs   5D33!EEc              #      K   t               D ].  }t        t        |      j                  |             }|s)||f 0 y wr7   )r_   r>   r   query)specprefixprefix_recss      r   query_all_prefixesre      s@     )+ &Jv.44T:;+%%&s   3?	?c                     t        |       syrt              t        t        |             }t        fd|D              }||k7  rt	        | |       |S )N c              3   B   K   | ]  }|k7  rt        |      r|  y wr7   r   )r:   rc   remove_locations     r   r<   z*_clean_environments_txt.<locals>.<genexpr>   s)      +_$)=f)E 	+s   )r	   r   r>   r   _rewrite_environments_txt)r^   ri   environments_txt_linesenvironments_txt_lines_cleaneds    `  r   rA   rA      sb    '("?3";/D#EF%* +,+ &"
 &)??!"79WX))r   c                 2   	 t        | d      5 }|j                  dj                  |             |j                  d       d d d        y # 1 sw Y   y xY w# t        $ r8}t        j                  d|        t        j                  d|d       Y d }~y d }~ww xY w)Nwr"   zFile not cleaned: %sz%rT)exc_info)r   r+   r
   r(   r)   infodebug)r^   prefixesr2   r3   s       r   rj   rj      s    *'- 	HHTYYx()HHTN	 	 	  *')>?		$D	))*s4   A 2A	 A 	AA A 	B.BB)rF   r7   )'__doc__r$   r,   r   r   r   loggingr   os.pathr   r   r	   r
   r   base.contextr   
common._osr   common.compatr   r   r   common.pathr   gateways.disk.readr   gateways.disk.testr   prefix_datar   __name__r)   r   r4   rD   r_   re   rA   rj   rg   r   r   <module>r~      se    - 	 ' '  : : " ! : :   , 5 #@1h
H%!P&*"*r   