B
    '¦\?  ã               @   sÆ  d dl mZmZmZ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Zd dlZddlmZ eZddlmZ eƒ  ddlmZ eZddlmZ eZddlmZmZmZ dd	lmZmZ ee ZZee ZZeZdd
lmZ eZddlmZ  e Zddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) e"e#e$e%e'e(f\Z"Z#Z$Z%Z'Z(ddl*m+Z+ e+Z+ddl,m-Z- e-Z-ddl.m/Z/ e/Z/ddl0m1Z1 e1Z1dd„ Z2ddl3m4Z4m5Z5 e4e5 Z4Z5ddl6m7Z7m8Z8 e7e8 Z7Z8ddl9m:Z:m;Z; e:e; Z:Z;ddl<m=Z=m>Z>m?Z?m@Z@ e=e? Z=Z?e@Z@e> ZAZBddlCmDZDmEZEmFZFmGZG ddlHmIZI eDeE ZDZEeFZFeIeG ZIZGddlJmKZK eKZLddlMmNZNmOZO eNeO ZNZOd dlPZQddlmRZRmSZSmZmTZT eSeT ZSZTeRZReZddlUmVZV eVZVddlWmXZXmYZYmZZZ eXeYeZ  ZXZYZZdd„ Z[ddlWm\Z] e] Z\Z^eQj_j`j`jaZaeQj_j`j`jbZceQj_j`j`jdZdeQj_j`j`jeZeeQj_j`j`jfZfeQj_j`j`jgZgeQj_j`j`jhZheQj_j`j`jiZieQj_j`j`jjZkeQj_j`j`jlZleQj_j`j`jmZmeQj_j`j`jnZneQj_j`j`joZodd lpmqZq d!d„ Zrd"d„ Zsd#d„ Ztdd$lumvZvmwZwmxZxmyZy evZvewZwexZxey ZyZzdd%l.m{Z{ e{Z{dd&l|m}Z} e}Z}dd'l|m~Z~ e~Z~dd(lm€Z€ e€ Z€Zdd)l‚mƒZƒ eƒZƒdd*l„m…Z…m†Z† e…e† Z…Z†dd+l‡mˆZˆ eˆZˆdd,l3m‰Z‰ e‰Z‰dd-lumŠZŠm‹Z‹ dd.lumŒZŒ eŠe‹ ZŠZ‹eŒZŒG d/d0„ d0eƒZŽG d1d2„ d2eƒZG d3d4„ d4eƒZdd5l6m‘Z’ dd6l“m”Z” dZd9d:„Z‘dZ•dZ–d;d<„ Z—d=d>„ Z˜dd?lm™Z™mšZšm›Z›mœZœ e™eš Z™Zše›eœ Z›Zœdd@lmZž d[dBdC„Zdd)l‚mƒZƒ ddDlŸm Z m¡Z¢m£Z¤ e Z d\dFdG„Z£d]dHdI„Z¡G dJdK„ dKeƒZ¥dLdM„ Z¦d^dNdO„Z§dPdQ„ Z¨e&r¦dRdS„ Z©d_dTdU„Zªd`dVdW„Z«dXdY„ Z¬dS )aé    )Úabsolute_importÚdivisionÚprint_functionÚunicode_literalsNé   )Ú
CondaError)Úreset_context)Úplan)ÚSolver)Úspecs_from_argsÚspec_from_lineÚspecs_from_url)Úadd_parser_prefixÚadd_parser_channels)ÚArgumentParser)Úcompat)ÚPY3ÚStringIOÚinputÚ	iteritemsÚon_winÚstring_typesÚ	text_typeÚ
itervalues)ÚCondaSession)Ú	_toposort)Úlchmod)ÚTmpDownloadc             C   s
   t  d¡S )Nz<handle_proxy_407 is deprecated. Now handled by CondaSession.)Ú	_warningsÚwarn)ÚxÚy© r"   ú,lib/python3.7/site-packages/conda/exports.pyÚ<lambda>6   ó    r$   )ÚdownloadÚ
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)Ú
get_prefixÚnon_x86_linux_machinesr   Úsys_rc_path)ÚEntityEncoder)ÚDEFAULT_CHANNELSÚDEFAULT_CHANNELS_WINÚDEFAULT_CHANNELS_UNIXc               C   s   t S )N)r<   r"   r"   r"   r#   r$   \   r%   )ÚPREFIX_PLACEHOLDER)Úget_conda_build_local_urlc               C   s   t tjjjjƒS )N)ÚlistÚcondaÚbaseÚcontextZchannelsr"   r"   r"   r#   r$   n   r%   c               C   s   t tƒ ƒpg S )N)rA   r@   r"   r"   r"   r#   r$   o   r%   c             C   s   t jj | g¡S )N)rB   rC   rD   r   )Úfnr"   r"   r#   r$   p   r%   )ÚPaddingErrorÚ	LinkErrorÚCondaOSErrorÚPathNotFoundError)ÚCrossPlatformStLink)Ú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 )N)Z
_get_items)Úselfr"   r"   r#   Ú	get_items–   s    zCompleter.get_itemsc             C   s   dS )NTr"   )rW   Úitemr"   r"   r#   Ú__contains__™   s    zCompleter.__contains__c             C   s   t |  ¡ ƒS )N)ÚiterrX   )rW   r"   r"   r#   Ú__iter__œ   s    zCompleter.__iter__N)Ú__name__Ú
__module__Ú__qualname__rX   rZ   r\   r"   r"   r"   r#   rV   •   s   rV   c               @   s   e Zd ZdS )ÚInstalledPackagesN)r]   r^   r_   r"   r"   r"   r#   r`       s   r`   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   || _ i | _t ¡ | _d S )N)ÚfuncÚcacheÚ	threadingZLockÚlock)rW   rb   r"   r"   r#   Ú__init__©   s    zmemoized.__init__c          	   O   s®   g }xH|D ]@}t |tƒr(| t|ƒ¡ q
t |tjƒs@| j||ŽS | |¡ q
W t|ƒ}|tt| 	¡ ƒƒf}| j
4 || jkr†| j| S | j||Ž}|| j|< |S W d Q R X d S )N)Ú
isinstancerA   ÚappendÚtupleÚ_collectionsÚHashablerb   Ú	frozensetÚsortedÚitemsre   rc   )rW   ÚargsÚkwZnewargsÚargÚkeyÚvaluer"   r"   r#   Ú__call__®   s    




zmemoized.__call__N)r]   r^   r_   Ú__doc__rf   rt   r"   r"   r"   r#   ra   ¤   s   ra   )Úrm_rf)Údelete_prefix_from_linked_dataé   Tc             C   s   t | ||ƒ t| ƒ d S )N)Ú_rm_rfrw   )ÚpathZmax_retriesZtrashr"   r"   r#   rv   È   s    rv   c             C   s   d S )Nr"   )Ú_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	„ t ˆ ƒ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#   r†   å   s    ZUNLINKc                s   g | ]}ˆ | ‘qS r"   r"   )rƒ   r„   )r…   r"   r#   r†   ç   s    c             S   s   i | ]
}||“qS r"   r"   )rƒ   Úprecr"   r"   r#   ú
<dictcomp>è   s    z#display_actions.<locals>.<dictcomp>)r   Ú_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„ t|ƒD ƒS )Nc             S   s   i | ]}|t |ƒ“qS r"   )rN   )rƒ   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„ t|ƒD ƒS )Nc             S   s   i | ]}|t |ƒ“qS r"   )rN   )rƒ   r‡   r"   r"   r#   rˆ   ù   s    zfetch_index.<locals>.<dictcomp>)Ú_fetch_indexr   )rŽ   r   r…   r"   r"   r#   r‹   ÷   s    r‹   c               @   sP   e Zd ZdZdZdZddd„Zdd	„ Zd
d„ Zde	fdd„Z
dd„ Zdd„ ZdS )ÚTemporaryDirectorya+  Create and return a temporary directory.  This has the same
    behavior as mkdtemp but can be used as a context manager.  For
    example:

        with TemporaryDirectory() as tmpdir:
            ...

    Upon exiting the context, the directory and everything contained
    in it are removed.
    NFÚ Útmpc             C   s   t  |||¡| _d S )N)ÚtempfileZmkdtempÚname)rW   Úsuffixr’   Údirr"   r"   r#   rf     s    zTemporaryDirectory.__init__c             C   s   d  | jj| j¡S )Nz	<{} {!r}>)ÚformatÚ	__class__r]   r˜   )rW   r"   r"   r#   Ú__repr__  s    zTemporaryDirectory.__repr__c             C   s   | j S )N)r˜   )rW   r"   r"   r#   Ú	__enter__  s    zTemporaryDirectory.__enter__c          
   C   s¼   ddl m} | jr¸| js¸y|| jƒ W n@ ttfk
rf } zdd|f krL‚ || jƒ W d d }~X Y nX d| _|r¸|jr¸y| d | ¡|j¡ W n& tk
r¶   | d | ¡t	¡ Y nX d S )Nr   )rv   ÚNonez%sTzImplicitly cleaning up {!r})
Úgateways.disk.deleterv   r˜   Ú_closedÚ	TypeErrorÚAttributeErrorr   r›   ÚResourceWarningÚRuntimeWarning)rW   Ú_warnr   ry   Úexr"   r"   r#   Úcleanup  s     
zTemporaryDirectory.cleanupc             C   s   |   ¡  d S )N)r¨   )rW   Úexcrs   Útbr"   r"   r#   Ú__exit__'  s    zTemporaryDirectory.__exit__c             C   s   | j dd d S )NT)r¦   )r¨   )rW   r"   r"   r#   Ú__del__*  s    zTemporaryDirectory.__del__)r•   r–   N)r]   r^   r_   ru   r˜   r¡   rf   r   rž   r   r¨   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 )N)ÚboolÚfirst_writableÚgetrN   Úto_package_ref)rW   Údist)r­   r"   r#   rZ   4  s    z1package_cache.<locals>.package_cache.__contains__c                s   dd„ t ˆ  ¡ ƒD ƒS )Nc             s   s   | ]}t |ƒV  qd S )N)rN   )rƒ   Úvr"   r"   r#   ú	<genexpr>8  s    z<package_cache.<locals>.package_cache.keys.<locals>.<genexpr>)r   r¯   )rW   )r­   r"   r#   Úkeys7  s    z)package_cache.<locals>.package_cache.keysc                s   ˆ   ¡  t|ƒ ¡ ¡ d S )N)r¯   ÚremoverN   r±   )rW   r²   )r­   r"   r#   Ú__delitem__:  s    z0package_cache.<locals>.package_cache.__delitem__N)r]   r^   r_   rZ   rµ   r·   r"   )r­   r"   r#   Úpackage_cache2  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Scripts)ÚshellÚbin)ÚprintÚsysÚstderrÚosrz   Ú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  |¡ xª|D ]¢}t j |||¡}t j ||¡}y.t j |¡rlt|ƒ t j |¡s‚|||ƒ W q4 ttfk
rÔ }	 z.t j |¡rÂ|	j	t	j
t	jt	jt	jfkrÂn‚ W d d }	~	X Y q4X q4W d S )NrB   ZactivateZ
deactivate)rÁ   rz   rÉ   rÈ   rÊ   Úlexistsrv   ÚIOErrorÚOSErrorÚerrnoZEPERMZEACCESZEROFSÚEEXIST)
r’   rÌ   rÍ   rÎ   ZscriptsZprefix_whereÚfZ	root_fileZprefix_fileÚer"   r"   r#   rË   Q  s"    


rË   c          
   C   sH  ddl m} yt tj |¡¡ W nF tk
rh } z(|jtjkrVtj 	tj |¡¡rVn‚ W dd}~X Y nX tj 
|d ¡s¢t|d dƒ}| d|  ¡ W dQ R X |sªd}tj 
|¡sDt|dƒT}| d¡ |  d	¡rø| d
|| d | d ƒ ¡ n| d|| d | ƒ ¡ W d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 
rB   z%s "$@"Zpath_toz.exezsource %s "$@"i$  é   )Úutilsr×   rÁ   rÊ   rz   ÚdirnamerÒ   rÓ   rÔ   rÈ   ÚisfileÚopenÚwriteÚendswithÚstatÚst_modeÚchmod)ÚsrcÚdstr¼   r×   r©   rÕ   Úmoder"   r"   r#   rÆ   k  s*    	 

 $rÆ   c                s8   ddl m} ddlm‰  || ƒ}‡ fdd„t|jƒD ƒS )z?
    Return a dictionary of the linked packages in prefix.
    r   )Ú
PrefixData)rN   c                s   i | ]}|ˆ |ƒ“qS r"   r"   )rƒ   Úprefix_record)rN   r"   r#   rˆ   Ÿ  s    zlinked_data.<locals>.<dictcomp>)Úcore.prefix_dataræ   Úmodels.distrN   r   Z_prefix_records)r’   Úignore_channelsræ   Úpdr"   )rN   r#   Úlinked_data˜  s    rì   c                s:   ddl m} | ¡ ‰ t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 )N)Zpackage_type)rƒ   r²   Z
prefix_rec)Úconda_package_typesr"   r#   r´   ©  s    zlinked.<locals>.<genexpr>)Úmodels.enumsrí   rî   r   rì   Ú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°   r˜   r,   Úmatch)r’   r²   ræ   rë   rç   r"   r"   r#   Ú	is_linked­  s    ró   )rx   T)Nr"   r"   )r"   TNFFNN)FN)N)F)F)­Z
__future__r   r   r   r   Úcollectionsrj   rÓ   rÄ   rÁ   r¿   r—   rd   Úwarningsr   r•   r   Zbase.contextr   r	   Z
core.solver
   Z
cli.commonr   r   r   Zcli.conda_argparser   r   r   Úcommonr   Z_compatZcommon.compatr   r   r   r   r   r   r   r   Zgateways.connection.sessionr   Zcommon.toposortr   Zgateways.disk.linkr   Zgateways.connection.downloadr   Zhandle_proxy_407r¹   r&   r'   r    r(   r)   Zmiscr*   r+   Zresolver,   r-   r.   r/   ZNoPackagesFoundZNoPackagesFoundErrorrÚ   r0   r1   r2   r3   Zcommon.pathr4   Zgateways.disk.readr5   Zmd5_fileZmodels.versionr6   r7   Zconda.base.contextrB   r8   r9   r:   Z_vendor.auxlib.entityr;   Zbase.constantsr<   r=   r>   Zget_default_urlsr?   Z_PREFIX_PLACEHOLDERZprefix_placeholderrC   rD   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_buildZmodels.channelr@   Zget_rc_urlsZget_local_urlsZload_condarcÚ
exceptionsrF   rG   rH   rI   ZCondaFileNotFoundErrorrJ   rï   rK   rL   Zmodels.recordsrM   ZIndexRecordré   rN   Zgateways.subprocessrO   rP   Zcore.subdir_datarQ   rR   rS   rT   rU   rº   rV   r`   ra   rv   ry   rè   rw   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"   r#   Ú<module>   s  

(









 



 

3
-


