
    $TXgB                       U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZ d	d
lmZ er"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.dZ#h dZ$de%d<   h e$dddddddddZ&de%d<   d/dZ'd0d Z( ejR                  d!d"d#      d1d$       Z*d2d%Z+d3d&Z,d2d'Z-ed(   Z. G d) d*      Z/d4d+Z0d5d,Z1y)6z\CLI implementation for `conda info`.

Display information about current conda installation.
    )annotationsN)SUPPRESS)	getLogger)exists
expanduserisfilejoin)wrap)TYPE_CHECKINGLiteral   )
deprecated)ArgumentParser	Namespace_SubParsersAction)Iterable)Any)Context)PackageRecordc                   ddl m} ddlm} d}|}d} | j                  	 d |||d|} ||       |j                  dd	|t        
       |j                  ddd	d       |j                  dd	d       |j                  ddd	d       |j                  ddd	t               |j                  ddd	d       |j                  dd	t        d       |j                  dd	d       |j                  d       |S )!Nr   )NULL   )add_parser_jsonz0Display information about current conda install. )helpdescriptionepilogz	--offline
store_true)actiondefaultr   z-az--allzShow all information.)r   r   z--basezDisplay base environment path.z-ez--envsz"List all known conda environments.z-lz	--licensez-sz--systemzList environment variables.z--rootbase)r   r   destz--unsafe-channelsz-Display list of channels with tokens exposed.zconda.cli.main_info.execute)func)info)common.constantsr   helpersr   
add_parseradd_argumentr   set_defaults)sub_parserskwargsr   r   summaryr   r   ps           3lib/python3.12/site-packages/conda/cli/main_info.pyconfigure_parserr/       sT   '(@GKF			
 	A ANN	   NN$	   NN-  
 NN1	   NN	   NN*	   NN	   NN<   NN5N6H    c                 P   ddl m}  g }	 | sut        t        d            rt	        j
                  d      }t        j                  t        d            D ](  }|j                  |      s|j                  d|        * 	 |S dt        j                  vr|S t        j                  d   }t        t        |d            r7t        j                  t        |d            D cg c]  }t        |d|       }}|S c c}w # t        $ r!}t        j                  d	|       Y d
}~|S d
}~ww xY w)zf
    Method used to populate ``site_dirs`` in ``conda info``.

    :returns: List of directories.
    r   on_winz~/.local/libzpython\d\.\dz~/.local/lib/APPDATAPythonPYTHONz'Error accessing user site directory.
%rN)common.compatr3   r   r   recompileoslistdirmatchappendenvironr	   OSErrorlogdebug)r3   	site_dirs	python_repathr4   ies          r.   get_user_siterG   d   s    'IAj01JJ7	JJz/'BCD t,!((=)?@ D  

*  jj+Gd7H-.  ZZWh(?@@ (A.@     A		<a@@As=   AC; (C; C; A	C; C62C; 6C; ;	D%D  D%>   authfilesprioritypreferred_envzset[str]IGNORE_FIELDSnameversionbuildbuild_numberchannelschannelsizefndependsSKIP_FIELDSc                    | j                         j                         D ci c]  \  }}|t        vs|| c}}S c c}}w )z
    Returns a dictionary of key/value pairs from ``prec``.  Keys included in ``IGNORE_FIELDS`` are not returned.

    :param prec: A ``PackageRecord`` object.
    :returns: A dictionary of elements dumped from ``prec``
    )dumpitemsrL   )preckvs      r.   dump_recordr]      s<     "YY[..0K0TQA]4JAqD0KKKs   <<c           
        ddl m} t        |       }| j                  |d   |d   |d   |d   t	        | j
                         ||d         d}t        t        |j                               t        z
        D ]
  }||   ||<    t                d	j                  |d   |d   |d
         }t        |       t        dt        |      z         |D ]  }t        |dd||           t        d       |d   D ]  }t        d|         y)z]
    Pretty prints contents of a ``PackageRecord``

    :param prec: A ``PackageRecord``
    r   )human_bytesrM   rN   rO   rP   rS   )z	file namerM   rN   build stringzbuild numberrQ   rS   z{} {} {}r`   -12: zdependencies:rU   z    N)utilsr_   r]   rT   strrQ   sortedsetkeysrV   printformatlen)rZ   r_   pkgdkeyheaderdeps          r.   pretty_packagerq      s     $
d
CWWFy>GN+t||$CK(	A c#((*o34S# 5 
Gqy!I,.8IJF	&M	#F
S!C&)* 	/9~SEl r0   z24.9z25.3systemc                 	   ddl m}  ddl m} ddlm}m}m}m}m} ddl	m
} ddlm} ddlm}	 ddlm}
m} 	 d	dlm} i } |	|       |j1                         D cg c]%  }|j2                  |j4                  |j6                  g' }}t9         |
|j:                              }|j<                  s|D cg c]  }| ||      rdndz    }}|D cg c]
  } ||       }}t>        j@                  jC                  d      }|stE        d      }tG        |      r|} ||jH                        }|jJ                  |jM                         |jJ                  |k(  d}tO        d?i d|jP                  d|d|d|d|jR                  d|jT                  d|jV                  d|jX                  d|jZ                  d|j\                  d|j^                  d|j`                  d |jH                  d!|d"|jb                  d#|d$|d%|d&|d'|jd                  d(g d)d*jg                  ti        tj        tl        jn                              d+|jp                  d,|jr                  d-| d.|jt                  d/|d0|d1|}|rdd2l;m<}  |       |d3<   n.t?        jz                         |d4<   t?        j|                         |d5<   h d6}|j                  d7 t>        j@                  D               |j                  d8 t>        j@                  D               |j                  d9 t>        j@                  D               |j                  d: t>        j@                  D               |D ci c];  }|t?        j                  |t?        j                  |j                         d;            = }}d< t>        j@                  D        }|j                  |D ci c]  }|d= c}       |j                  tl        j4                  tl        j                  tl        j                  t               |d>       |S # t&        $ r#}t(        j+                  d
|       d}Y d}~d}~wt,        $ r#}t(        j/                  d|       d}Y d}~-d}~ww xY wc c}w c c}w c c}w c c}w c c}w )@z
    Returns a dictionary of contextual information.

    :returns:  Dictionary of conda information to be sent to stdout.
    r   )CONDA_PACKAGE_ROOT)__version__)DEFAULT_SOLVERcontextenv_namesys_rc_pathuser_rc_pathr2   )mask_anaconda_token)_supplement_index_with_system)all_channel_urlsoffline_keepr   z Unable to import conda-build: %sznot installedNzError importing conda-build: %serrorr   z  (offline)NETRCz~/.netrc)rM   
user_agentr    platformconda_versionconda_env_versionconda_build_versionroot_prefixconda_prefixav_data_dirav_metadata_url_baseroot_writable	pkgs_dirs	envs_dirsdefault_prefixactive_prefixactive_prefix_nameconda_shlvlchannelsrz   rc_pathry   offlineenvspython_version.requests_versionr   conda_locationconfig_files
netrc_filevirtual_pkgssolver)is_admin_on_windowsis_windows_adminUIDGID>   CIO_TEST
LD_PRELOADSSL_CERT_FILECURL_CA_BUNDLEREQUESTS_CA_BUNDLEc              3  `   K   | ]&  }|j                         j                  d       s#| ( yw)CONDANupper
startswith.0r\   s     r.   	<genexpr>z get_info_dict.<locals>.<genexpr>&  s$     O:a1E1Eg1N:   $..c              3  `   K   | ]&  }|j                         j                  d       s#| ( yw)r6   Nr   r   s     r.   r   z get_info_dict.<locals>.<genexpr>'  s$     P:a1E1Eh1O:r   c              3  `   K   | ]&  }|j                         j                  d       s#| ( yw)PATHNr   endswithr   s     r.   r   z get_info_dict.<locals>.<genexpr>(  s$     L:a1C1CF1K:r   c              3  `   K   | ]&  }|j                         j                  d       s#| ( yw)SUDONr   r   s     r.   r   z get_info_dict.<locals>.<genexpr>)  s$     N:a1E1Ef1M:r   z	<not set>c              3  `   K   | ]&  }|j                         j                  d       s#| ( yw)PROXYNr   r   s     r.   r   z get_info_dict.<locals>.<genexpr>/  s$     GZ1779+=+=g+F!Zr   z<set>)zsys.versionz
sys.prefixzsys.executablerB   env_vars )Er   rt   ru   base.contextrv   rw   rx   ry   rz   r7   r3   
common.urlr{   
core.indexr|   models.channelr}   r~   conda_buildImportErrorr@   rA   	Exceptionr   valuesrM   rN   rO   listr   jsonr:   r>   getr   r   r   r   solver_user_agentdictsubdirr   r   r   signing_metadata_url_baser   r   r   r   shlvlr   r	   mapre   sysversion_infor   r   r   common._os.windowsr   geteuidgetegidupdategetenvlowerprefix
executablerG   )rt   r   rv   rw   rx   ry   rz   r3   r{   r|   r}   r~   r   errvirtual_pkg_indexr-   r   r   cr   
user_netrcr   r   	info_dictr   env_var_keysevr   
proxy_keyss                                r.   get_info_dictr      sf    &/  '0:?&B !"34:K:R:R:TU:TQQVVQYY0:TLU$W%5%567H<<LTUHqA|AMBHU0891#A&H9(J
+
*#J!'"7"78 //1>>^3F  # ( 0	
 '' )) '' %>> ++ ## ## -- ++ . MM  !" "#$ %&  '* +, -. xxC)9)9 :;/0 !1112 %%34 *56 ))78 9: ";< =I@ <(;(=	$%::<	%::<	%L O2::OOP2::PPL2::LLN2::NN IUHT"BIIb"))BHHJ<==   HRZZGJOO:6:RR[:67;;**!nn& 	
 M  .		4c:- &		3S9%& V V9L
 7sB   P *Q1/Q6Q;A R <
R	Q.!P??Q.Q))Q.c                b   g }|j                  ddz         | j                  di       }t        |      D ]i  }t        ||         }t	        |      r|d   nd}t	        |      dkD  r|dd nd}|j                  |d	d
|       |D ]  }|j                  d|z           k dj                  |      S )z
    Returns a printable string representing environment variables from the dictionary returned by ``get_info_dict``.

    :param info_dict:  The returned dictionary from ``get_info_dict()``.
    :returns:  String to print.
    z%23s:zenvironment variablesr   r   r   r   Nr   z>25=z                          
)r=   r   rf   r
   rk   r	   )r   builderr   rn   value
first_lineother_linesvals           r.   get_env_vars_strr   ?  s     GNN7445}}Z,HhXc]#!$UU1X
#&u:>eABirC45CNN8c>*    99Wr0   c                l     ddl m dd fd} |       D ci c]  \  }}||
 c}}S c c}}w )zQ
    Returns the data that can be used to display information for conda info
    r   r2   c                @    dj                  t        t        |             S )Nz
                          )r	   r   re   )liness    r.   flattenz&get_main_info_display.<locals>.flattenZ  s    %%c#uo66r0   c               3  h  K   d   rdd   f dd   f n	dd   f d   dk\  r	dd   f dd	   f d
 d         f dd   f dd   f dd   f dd   d    d   d   rdnd f d d d   D              f d   rdnd} dd    d|  d f d!d"   f d#d$   f d% d&         f d' d(         f d) d*         f d+d+   f d,d-   f r
d.d/   f nd0d1    d2d3    f d4d5   f d6d7   f y w)8Nr   zactive environmentzactive env locationr   r   r   zshell levelzuser config filerz   zpopulated config filesr   zconda versionr   zconda-build versionr   zpython versionr   r   rM   r    z
 (default)r   zvirtual packagesc              3  >   K   | ]  }d j                  |        yw)r   N)r	   )r   rl   s     r.   r   z9get_main_info_display.<locals>.builder.<locals>.<genexpr>r  s     G-FcCHHSM-Fs   r   r   writablez	read onlyzbase environmentr   z  ()zconda av data dirr   zconda av metadata urlr   zchannel URLsr   zpackage cacher   zenvs directoriesr   r   z
user-agentr   administratorr   zUID:GIDr   :r   z
netrc filer   zoffline moder   r   )r   r   r   r3   s    r.   r   z&get_main_info_display.<locals>.builder]  s    )*'3G)HII()O*DEE'?)CDD]#q( )M":;;!9^#<=='>1J)KLL	/ :;;$i0E&FGG+;!<=="6*+Ih<OPY<ZL`b+cd
 	

 GY~-FGG
 	
 "+?!;:!i&>%?s8*A#NOO"Im$<==&	2H(IJJwy'<=>>	+(> ?@@!79[+A#BCC9Z011Y|455"I.@$ABB5!1 2!Ie4D3EFGGY|455y344s   D/D2)r   zIterable[str]returnre   )r7   r3   )r   r   rn   r   r   r3   s   `   @@r.   get_main_info_displayr   T  s7     '7'5R *13:3CJ333s   0c                p    t        |       }dj                  dgd |j                         D        d      S )z
    Returns a printable string of the contents of ``info_dict``.

    :param info_dict:  The output of ``get_info_dict()``.
    :returns:  String to print.
    r   r   c              3  2   K   | ]  \  }}|d d|   yw)z>23z : Nr   )r   rn   r   s      r.   r   z$get_main_info_str.<locals>.<genexpr>  s$     M8L*#u#c#eW%8Ls   )r   r	   rY   )r   display_infos     r.   get_main_info_strr     s>     )3L99	RM8J8J8LMRrR r0   )r!   r   r   rr   detailjson_allc                  L    e Zd ZdZd ZddZddZddZddZd Z	ddZ
dd	Zy
)InfoRendererzG
    Provides a ``render`` method for rendering ``InfoComponents``
    c                    ddl m} || _        t               | _         |       | j                  d<   d d ddd d d| _        y )Nr   )list_all_known_prefixesr   detail_view	envs_list)r!   r   r   r   rr   r   )core.envs_managerr   _contextr   
_info_dict_component_style_map)selfrw   r   s      r.   __init__zInfoRenderer.__init__  sB    ?'/"9";#%
!r0   c                    ddl m} |D ]E  }| j                  j                  |      }t	        | d| dd      }|s2 |       }|s< |||       G y)z
        Iterates through the registered components, obtains the data to render via a
        ``_<component>_component`` method and then renders it.
        r   )render_
_componentN)style)	reportersr  r  r   getattr)r  
componentsr  	componentr	  	data_funcdatas          r.   r  zInfoRenderer.render  sX    
 	'#I--11)<E)J&?FI;Dt5) $r0   c                    | j                   j                  rd| j                   j                  iS | j                   j                   dS )Nr   r   )r   r   r   r  s    r.   _base_componentzInfoRenderer._base_component  s<    ==!4==#<#<==mm//033r0   c                    | j                   j                  rd| j                   j                  iS dj                  | j                   j                        }| dS )Nr   r   )r   r   r   r	   )r  channels_strs     r.   _channels_componentz InfoRenderer._channels_component  sI    == 6 67799T]]%;%;<L"^2&&r0   c                ,    t        | j                        S N)r   r  r  s    r.   _detail_componentzInfoRenderer._detail_component  s    $T__55r0   c                N    | j                   j                  s| j                  d   S y )Nr   )r   r   r  r  s    r.   _envs_componentzInfoRenderer._envs_component  s#    }}!!??6** "r0   c           
        ddl m }m} dt        j                  d d  ddt        j                   dt        j
                   dj                  | j                  d	         g}t        t         |       d
z               D ],  }|j                  dj                  | |d|z                      . | j                  d   }|r|j                  d|d           n|j                  d       |dd  D ]  }|j                  d|         |j                  d       t        | j                  d   j                               D ]  \  }}|j                  | d|         |j                  d       dj                  |      S )Nr   )find_commandsfind_executablezsys.version: (   z...zsys.prefix: zsys.executable: zconda location: {}r   )rO   zconda-{}: {}zconda-rB   zuser site dirs: r   zuser site dirs:z                r   r   rc   r   )r  r  r   rN   r   r   rj   r  rf   rg   r=   rY   r	   )	r  r  r  outputcmdrB   site_dirrM   r   s	            r.   _system_componentzInfoRenderer._system_component  s_   A CKK,-S13::,'s~~./ ''8H(IJ	
 #mo
:;<CMM.//_XPS^5TUV = OOK0	MM,Yq\N;<MM+,!!"HMM,XJ78 & 	b!$//*"="C"C"EFKD%MMTF"UG,- G 	byy  r0   c                    | j                   S r  )r  r  s    r.   _json_all_componentz InfoRenderer._json_all_component  s    r0   N)r  zIterable[InfoComponents])r   z
str | dict)r   dict[str, str])r   re   r   dict[str, Any])__name__
__module____qualname____doc__r  r  r  r  r  r  r"  r$  r   r0   r.   r   r     s/    
*&4'6+!>r0   r   c                    t               } j                  r|j                  d        j                  r|j                  d       d} j                  s|j
                  r|D ]  }t         |d         j                  st	         fd|D              r5|j
                  s) j                  s j                  s|j                  d        j                  r|j
                  s|j                  d        j                  r|j
                  s|j                  d       |j
                  r) j                  s j                  s|j                  d	       |S )
z
    Based on values in ``args`` and ``context`` determine which components need to be displayed
    and return them as a ``set``
    r!   r   )r   rr   Tc              3  8   K   | ]  }t        |         y wr  )r  )r   optargss     r.   r   z&get_info_components.<locals>.<genexpr>  s     C7CWT3//7s   r   r   rr   r   )	rg   r!   addunsafe_channelsallr   setattrr   rr   )r/  rw   r  optionsoptions   `    r.   get_info_componentsr6    s    
 '*eJyyvz"Gxx7<<FD&$'  
SC7CC		$$x yyv{{7<<x ||DIId.B.Bz"r0   c                `    ddl m} t        | |      }t        |      }|j	                  |       y)z
    Implements ``conda info`` command.

     * ``conda info``
     * ``conda info --base``
     * ``conda info <package_spec> ...``
     * ``conda info --unsafe-channels``
     * ``conda info --envs``
     * ``conda info --system``
    r   )rw   r   )r   rw   r6  r   r  )r/  parserrw   r  renderers        r.   executer:     s,     '$T73JG$HOOJr0   )r*   r   r   r   )r   z	list[str])rZ   r   r   r'  )rZ   r   r   Noner&  )r   r'  r   re   )r   r'  r   r%  )r/  r   rw   r   r   zset[InfoComponents])r/  r   r8  r   r   int)2r+  
__future__r   r:   r8   r   argparser   loggingr   os.pathr   r   r   r	   textwrapr
   typingr   r   deprecationsr   r   r   r   collections.abcr   r   r   r   models.recordsr   r(  r@   r/   rG   rL   __annotations__rV   r]   rq   argumentr   r   r   r   InfoComponentsr   r6  r:  r   r0   r.   <module>rI     s<  
 # 	 	 
   4 4  ) %EE(&.AH> Ix H
  	
     	 X LB VVX.} /}@*24j ST[ [|$Nr0   