U
    ôáêbB4  ã                   @   s´  d dl mZmZmZmZ d dlmZ d dlZd dl	Z	d dl
Z
d dlZd dlZd dlZ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 eƒ  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% 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/ ddl0m1Z1 ddl2m3Z3m4Z5 dd„ Z6ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZC eA ZDZEddlFmGZGmHZHmIZImJZJ ddlKmLZL ddlMmNZN eNZOddlPmQZQmRZR dd lSmTZT d dlUZVdd!lmWZWmXZXmZmYZY eXZZdd"l[m\Z\ dd#l]m^Z^m_Z_m`Z` d$d„ Zadd%l]mbZb eb ZcZdeVjejfjfjgZgeVjejfjfjhZieVjejfjfjjZjeVjejfjfjkZkeVjejfjfjlZleVjejfjfjmZmeVjejfjfjnZneVjejfjfjoZoeVjejfjfjpZqeVjejfjfjrZreVjejfjfjsZseVjejfjfjtZteVjejfjfjuZudd&lSmvZv d'd„ Zwd(d„ Zxd)d„ Zydd*lzm{Z{m|Z|m}Z}m~Z~ e{Z{e|Z|e}Z}e~ Z~Zdd+l€mZ dd,l€m‚Z‚ dd-lƒm„Z„ e„Z…dd.l†m‡Z‡ dd/lˆm‰Z‰mŠZŠ dd0l‹mŒZŒ dd1l7mZ dd2lzmŽZŽmZmZ G d3d4„ d4e‘ƒZ’G d5d6„ d6e‘ƒZ“G d7d8„ d8e‘ƒZ”dd9l9m•Z– dd:l—m˜Z˜ d_d=d>„Z•dZ™dZšd?d@„ Z›dAdB„ ZœddClmZmžZžmŸZŸm Z  ddDlm¡Z¢ d`dFdG„Z¡ddHl£m¤Z¤m¥Z¦m§Z¨ dadJdK„Z§dbdLdM„Z¥dNdO„ Z©dcdPdQ„ZªdRdS„ Z«e)rŠdTdU„ Z¬dddVdW„Z­dedXdY„Z®dZd[„ Z¯dfd]d^„Z4dS )gé    )Úabsolute_importÚdivisionÚprint_functionÚunicode_literals)ÚHashableNé   )ÚPY3Ú	iteritemsÚstring_typesÚ	text_type)ÚStringIO)Úinput)Ú
CondaError)Úreset_context)Úplan)ÚSolver)Úspecs_from_argsÚspec_from_lineÚspecs_from_url)Úadd_parser_prefixÚadd_parser_channels)ÚArgumentParser)Úcompat)Úon_win)ÚCondaSession)ÚTemporaryDirectory)Ú	_toposort)Úlchmod)ÚTmpDownloadÚdownloadc                 C   s   t  dt¡S )NzThe `conda.exports.handle_proxy_407` is pending deprecation and will be removed in a future release. Now handled by CondaSession.)ÚwarningsÚwarnÚPendingDeprecationWarning)ÚxÚy© r%   ú,lib/python3.8/site-packages/conda/exports.pyÚ<lambda>%   s   ýr'   )Ú
rm_fetched)Údelete_trashÚmove_to_trash)Ú	untrackedÚwalk_prefix)Ú	MatchSpecÚResolvePackageNotFoundÚResolveÚUnsatisfiable)Úhashsum_fileÚhuman_bytesÚunix_path_to_winÚurl_path)Úwin_path_to_unix)Úcompute_md5sum)ÚVersionOrderÚnormalized_version)ÚChannel)Ú
get_prefixÚnon_x86_machinesr   Úsys_rc_path)ÚEntityEncoder)ÚDEFAULT_CHANNELSÚDEFAULT_CHANNELS_WINÚDEFAULT_CHANNELS_UNIXc                   C   s   t S ©N)r>   r%   r%   r%   r&   r'   F   ó    )ÚPREFIX_PLACEHOLDER)Úget_conda_build_local_urlc                   C   s   t tjjjjƒS rA   )ÚlistÚcondaÚbaseÚcontextZchannelsr%   r%   r%   r&   r'   \   rB   c                   C   s   t tƒ ƒpg S rA   )rE   rD   r%   r%   r%   r&   r'   ]   rB   c                 C   s   t jj | g¡S rA   )rF   rG   rH   r   )Úfnr%   r%   r&   r'   ^   rB   )ÚPaddingErrorÚ	LinkErrorÚCondaOSErrorÚPathNotFoundError)ÚFileMode)ÚPathType)ÚPackageRecord©ÚDist)ÚACTIVE_SUBPROCESSESÚsubprocess_call)Úcache_fn_url)ÚProgressiveFetchExtract)ÚCondaHTTPErrorÚ	LockErrorÚUnsatisfiableErrorc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	Completerc                 C   s   |   ¡ S rA   )Z
_get_items©Úselfr%   r%   r&   Ú	get_itemsv   s    zCompleter.get_itemsc                 C   s   dS )NTr%   )r\   Úitemr%   r%   r&   Ú__contains__y   s    zCompleter.__contains__c                 C   s   t |  ¡ ƒS rA   )Úiterr]   r[   r%   r%   r&   Ú__iter__|   s    zCompleter.__iter__N)Ú__name__Ú
__module__Ú__qualname__r]   r_   ra   r%   r%   r%   r&   rZ   u   s   rZ   c                   @   s   e Zd ZdS )ÚInstalledPackagesN)rb   rc   rd   r%   r%   r%   r&   re   €   s   re   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úmemoizedz©Decorator. Caches a function's return value each time it is called.
    If called later with the same arguments, the cached value is returned
    (not reevaluated).
    c                 C   s*   t jdtdd || _i | _t ¡ | _d S )NzThe `conda.exports.memoized` decorator is pending deprecation and will be removed in a future release. Please use `functools.lru_cache` instead.é   )Ú
stacklevel)r    r!   r"   ÚfuncÚcacheÚ	threadingZLockÚlock)r\   ri   r%   r%   r&   Ú__init__‰   s    üzmemoized.__init__c              
   O   sÄ   g }|D ]B}t |tƒr&| t|ƒ¡ qt |tƒs@| j||Ž  S | |¡ qt|ƒ}|tt| ¡ ƒƒf}| j	L || j
kr| j
| W  5 Q R £ S | j||Ž}|| j
|< |W  5 Q R £ S W 5 Q R X d S rA   )Ú
isinstancerE   ÚappendÚtupleÚ	_Hashableri   Ú	frozensetÚsortedÚitemsrl   rj   )r\   ÚargsÚkwZnewargsÚargÚkeyÚvaluer%   r%   r&   Ú__call__•   s    



zmemoized.__call__N)rb   rc   rd   Ú__doc__rm   rz   r%   r%   r%   r&   rf   „   s   rf   )Úrm_rf)Údelete_prefix_from_linked_dataé   Tc                 C   s   t | ||ƒ t| ƒ d S rA   )Ú_rm_rfr}   )ÚpathZmax_retriesZtrashr%   r%   r&   r|   ¯   s    r|   c                 C   s   d S rA   r%   ©Ú_r%   r%   r&   Ú	hash_file»   s    rƒ   c                 C   s   dS )NFr%   r   r%   r%   r&   Úverify¿   s    r„   )Úexecute_actionsÚexecute_instructionsÚexecute_planÚinstall_actions)Údisplay_actionsr%   c                    sˆ   d| kr"‡ fdd„| d D ƒ| d< d| krD‡ fdd„| d D ƒ| d< d| krf‡ fdd„| d D ƒ| d< dd	„ ˆ   ¡ D ƒ‰ t| ˆ |||ƒS )
NZFETCHc                    s   g | ]}ˆ | ‘qS r%   r%   ©Ú.0Úd©Úindexr%   r&   Ú
<listcomp>Î   s     z#display_actions.<locals>.<listcomp>ZLINKc                    s   g | ]}ˆ | ‘qS r%   r%   rŠ   r   r%   r&   r   Ð   s     ZUNLINKc                    s   g | ]}ˆ | ‘qS r%   r%   rŠ   r   r%   r&   r   Ò   s     c                 S   s   i | ]
}||“qS r%   r%   ©r‹   Zprecr%   r%   r&   Ú
<dictcomp>Ó   s      z#display_actions.<locals>.<dictcomp>)ÚvaluesÚ_display_actions)ZactionsrŽ   Zshow_channel_urlsZspecs_to_removeZspecs_to_addr%   r   r&   r‰   Ì   s    r‰   )Údist_str_in_indexÚfetch_indexÚ	get_indexFc                 C   s&   t | ||||||ƒ}dd„ | ¡ D ƒS )Nc                 S   s   i | ]}t |ƒ|“qS r%   rQ   r   r%   r%   r&   r‘   á   s      zget_index.<locals>.<dictcomp>)Ú
_get_indexr’   )Úchannel_urlsZprependÚplatformZ	use_localÚ	use_cacheÚunknownÚprefixrŽ   r%   r%   r&   r–   Þ   s    r–   c                 C   s   t | ||ƒ}dd„ | ¡ D ƒS )Nc                 S   s   i | ]}t |ƒ|“qS r%   rQ   r   r%   r%   r&   r‘   æ   s      zfetch_index.<locals>.<dictcomp>)Ú_fetch_indexr’   )r˜   rš   rŽ   r%   r%   r&   r•   ä   s    r•   c                     s&   ddl m‰  G ‡ fdd„dtƒ} | ƒ S )Nr   ©ÚPackageCacheDatac                       s0   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„ZdS )z$package_cache.<locals>.package_cachec                    s   t ˆ  ¡  t|ƒ ¡ d ¡ƒS rA   )ÚboolÚfirst_writableÚgetrR   Úto_package_ref©r\   Údistrž   r%   r&   r_   î   s    z1package_cache.<locals>.package_cache.__contains__c                    s   dd„ ˆ   ¡  ¡ D ƒS )Nc                 s   s   | ]}t |ƒV  qd S rA   rQ   )r‹   Úvr%   r%   r&   Ú	<genexpr>ò   s     z<package_cache.<locals>.package_cache.keys.<locals>.<genexpr>)r¡   r’   r[   rž   r%   r&   Úkeysñ   s    z)package_cache.<locals>.package_cache.keysc                    s   ˆ   ¡  t|ƒ ¡ ¡ d S rA   )r¡   ÚremoverR   r£   r¤   rž   r%   r&   Ú__delitem__ô   s    z0package_cache.<locals>.package_cache.__delitem__N)rb   rc   rd   r_   r¨   rª   r%   rž   r%   r&   Úpackage_cacheì   s   r«   )Úcore.package_cache_datarŸ   Úobject)r«   r%   rž   r&   r«   é   s    r«   c                 C   s˜   t dtjd tj tj | ¡¡tj tj |¡¡kr:d S trRd}tj	t
|d}n
d}tj}tj tj | |¡¡s†t tj | |¡¡ t| |||ƒ d S )Nz'WARNING: symlink_conda() is deprecated.)ÚfileZcondabin)ÚshellÚbin)ÚprintÚsysÚstderrÚosr€   ÚnormcaseÚnormpathr   Ú	functoolsÚpartialÚwin_conda_bat_redirectÚsymlinkÚisdirÚjoinÚmakedirsÚ_symlink_conda_hlp)rœ   Úroot_dirr¯   ÚwhereÚ
symlink_fnr%   r%   r&   Úsymlink_condaú   s    (rÂ   c           
      C   sÚ   dddg}t j | |¡}t j |¡s.t  |¡ |D ]¢}t j |||¡}t j ||¡}z.t j |¡rjt|ƒ t j |¡s€|||ƒ W q2 ttfk
rÒ }	 z.t j |¡rÀ|	j	t	j
t	jt	jt	jfkrÀn‚ W 5 d }	~	X Y q2X q2d S )NrF   ZactivateZ
deactivate)r´   r€   r¼   r»   r½   Úlexistsr|   ÚIOErrorÚOSErrorÚerrnoZEPERMZEACCESZEROFSÚEEXIST)
rœ   r¿   rÀ   rÁ   ZscriptsZprefix_whereÚfZ	root_fileZprefix_fileÚer%   r%   r&   r¾     s*    

   ÿr¾   c              
   C   sH  ddl m} zt tj |¡¡ W nF tk
rh } z(|jtjkrVtj 	tj |¡¡rVn‚ W 5 d}~X Y nX tj 
|d ¡s¢t|d dƒ}| d|  ¡ W 5 Q R X |sªd}tj 
|¡sDt|dƒT}| d¡ |  d	¡rø| d
|| d | d ƒ ¡ n| d|| d | ƒ ¡ W 5 Q R X t |¡j}||d@ d? O }t ||¡ dS )a-  Special function for Windows XP where the `CreateSymbolicLink`
        function is not available.

        Simply creates a `.bat` file at `dst` which calls `src` together with
        all command line arguments.

        Works of course only with callable files, e.g. `.bat` or `.exe` files.
        r   )ÚshellsNz.batÚwz@echo off
call "%s" %%*
zbash.exez#!/usr/bin/env bash 
rF   z%s "$@"Zpath_toz.exezsource %s "$@"i$  rg   )ÚutilsrÊ   r´   r½   r€   ÚdirnamerÅ   rÆ   rÇ   r»   ÚisfileÚopenÚwriteÚendswithÚstatÚst_modeÚchmod)ÚsrcZdstr¯   rÊ   ÚexcrÈ   Úmoder%   r%   r&   r¹   %  s*    	 

 $r¹   c                    s8   ddl m} ddlm‰  || ƒ}‡ fdd„|j ¡ D ƒS )z?
    Return a dictionary of the linked packages in prefix.
    r   ©Ú
PrefixDatarQ   c                    s   i | ]}ˆ |ƒ|“qS r%   r%   )r‹   Úprefix_recordrQ   r%   r&   r‘   Y  s      zlinked_data.<locals>.<dictcomp>)Úcore.prefix_datarÙ   Úmodels.distrR   Z_prefix_recordsr’   )rœ   Úignore_channelsrÙ   Úpdr%   rQ   r&   Úlinked_dataR  s    rß   c                    s:   ddl m} | ¡ ‰ t| |d ¡ }t‡ fdd„|D ƒƒS )z8
    Return the Dists of linked packages in prefix.
    r   )ÚPackageType)rÝ   c                 3   s    | ]\}}|j ˆ kr|V  qd S rA   )Zpackage_type)r‹   r¥   Z
prefix_rec©Úconda_package_typesr%   r&   r§   c  s     
 zlinked.<locals>.<genexpr>)Úmodels.enumsrà   râ   rß   rt   Úset)rœ   rÝ   rà   Zldr%   rá   r&   Úlinked\  s    rå   c                 C   sH   ddl m} || ƒ}| |jd¡}|dkr.dS t|ƒ |¡r@|S dS dS )z
    Return the install metadata for a linked package in a prefix, or None
    if the package is not linked in the prefix.
    r   rØ   N)rÛ   rÙ   r¢   Únamer-   Úmatch)rœ   r¥   rÙ   rÞ   rÚ   r%   r%   r&   Ú	is_linkedg  s    rè   é   c                 C   s   t | ||||dS )N)Zmd5Úsha256Úsize)Ú	_download)ZurlZdst_pathZsessionZmd5sumZurlstxtZretriesrê   rë   r%   r%   r&   r   x  s    r   )r~   T)Nr%   r%   )r%   TNFFNN)FN)N)F)F)NNFré   NN)°Z
__future__r   r   r   r   Zcollections.abcr   rq   rÆ   r·   r´   r²   rk   r    Z_vendor.sixr   r	   r
   r   Úior   Úbuiltinsr   Ú r   Zbase.contextr   r   Z
core.solver   Z
cli.commonr   r   r   Zcli.conda_argparser   r   r   Úcommonr   Zcommon.compatr   Zgateways.connection.sessionr   Zgateways.disk.creater   Zcommon.toposortr   Zgateways.disk.linkr   Zgateways.connection.downloadr   r   rì   Zhandle_proxy_407r¬   r(   Zgateways.disk.deleter)   r*   Zmiscr+   r,   Zresolver-   r.   r/   r0   ZNoPackagesFoundZNoPackagesFoundErrorrÌ   r1   r2   r3   r4   Zcommon.pathr5   Zgateways.disk.readr6   Zmd5_fileZmodels.versionr7   r8   Zmodels.channelr9   Zconda.base.contextrF   r:   r;   r<   Znon_x86_linux_machinesZauxlib.entityr=   Zbase.constantsr>   r?   r@   Zget_default_urlsrC   Z_PREFIX_PLACEHOLDERZprefix_placeholderrG   rH   Z	arch_nameZanaconda_uploadZbinstar_uploadÚbitsZdefault_prefixZdefault_pythonZ	envs_dirsZ	pkgs_dirsr™   Zroot_prefixr¿   Zroot_writableZsubdirZconda_privateZconda_buildrD   Zget_rc_urlsZget_local_urlsZload_condarcÚ
exceptionsrJ   rK   rL   rM   ZCondaFileNotFoundErrorrã   rN   rO   Zmodels.recordsrP   ZIndexRecordrÜ   rR   Zgateways.subprocessrS   rT   Zcore.subdir_datarU   rV   rW   rX   rY   r­   rZ   re   rf   r|   r   rÛ   r}   ZKEYSZKEYS_DIRrƒ   r„   r…   r†   r‡   rˆ   r‰   r“   Z
core.indexr”   r•   r   r–   r—   r«   rÂ   r¾   r¹   rß   rå   rè   r%   r%   r%   r&   Ú<module>   sÚ   '

        ÿ


-


    ÿ