ó
¼S]c           @@  sÚ   d  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 m Z m	 Z	 m
 Z
 m Z d d l j j Z d d l j j Z d d l j j Z d d l m Z d „  Z d „  Z d e f d	 „  ƒ  YZ d S(
   s'   Abstract high-level interface to Conda.i    (   t   absolute_importN(   t   CondaManagert   CondaEnvironmentDeviationst   CondaLockSett   CondaManagerError(   t   versionc   
      C@  s"  g  |  j  ƒ  D] } | | ƒ r | ^ q } g  |  j  ƒ  D] } | | ƒ s8 | ^ q8 } t | ƒ d k  rl |  Sg  | D] } |  | ^ qs } t j | Œ  } t | ƒ d k r® |  St ƒ  } x; | D]3 } |  | | }	 t |	 ƒ d k r¾ |	 | | <q¾ q¾ Wx | D] } |  | | | <qü W| | | <| S(   Ni   i    (   t   keyst   lent   sett   intersectiont   dict(
   t   existing_setst   include_predicatet   factored_namet   namet   factorable_namest   unfactorable_namest   specst   factoredt   resultt	   remaining(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _refactor_common_packages   s"    ++	
c         @  sÜ   d „  |  j  ƒ  Dƒ ‰ t g  |  j ƒ  D] } t j | ƒ d ^ q& ƒ } x) | D]! ‰ t ˆ ‡ f d †  ˆ ƒ ‰ qO Wd „  ‰ ‡ ‡ f d †  ‰  t ˆ ‡  ‡ f d †  d ƒ ‰ t ˆ ‡  f d †  d	 ƒ ‰ d
 „  ˆ j  ƒ  Dƒ S(   Nc         S@  s%   i  |  ] \ } } t  | ƒ | “ q S(    (   R   (   t   .0R   t   values(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pys
   <dictcomp>;   s   	 i    c         @  s   |  j  d ˆ  ƒ S(   Ns   %s-(   t
   startswith(   t   p(   R   (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   <lambda>@   t    c         S@  s+   x$ t  j D] } |  j | ƒ r
 t Sq
 Wt S(   N(   t	   conda_apit   unix_platform_namesR   t   Truet   False(   t   platform_or_platform_namet	   unix_name(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   is_unixC   s    c         @  sp   d |  k r2 t  j |  ƒ d } | ˆ k r2 t Sn  d ˆ k rZ ˆ  |  ƒ rZ |  d k rZ t S|  d k sl t ‚ t S(   Nt   -i    t   unixt   all(   R   t   parse_platformR   t   AssertionErrorR   (   R    t   platform_name(   R"   R   (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   is_most_generalK   s    $c         @  s   ˆ |  ƒ o ˆ  |  ƒ S(   N(    (   R   (   R)   R"   (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyR   Z   R   R$   c         @  s
   ˆ  |  ƒ S(   N(    (   R   (   R)   (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyR   ]   R   R%   c         S@  s+   i  |  ]! \ } } t  t | ƒ ƒ | “ q S(    (   t   sortedt   list(   R   R   t   value(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pys
   <dictcomp>_   s   	 (   t   itemsR   R   R   R&   R   (   t   by_platformt   platformt   platform_names(    (   R)   R"   R   R   sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _extract_common9   s    2	t   DefaultCondaManagerc           B@  s•   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d e d „ Z d „  Z RS(   c         C@  s   | |  _  d  S(   N(   t	   _frontend(   t   selft   frontend(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   __init__c   s    c         C@  s&   |  j  d  k	 r" |  j  j | ƒ n  d  S(   N(   R3   t   Nonet   info(   R4   t   line(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt	   _log_infof   s    c         C@  s&   |  j  d  k	 r" |  j  j | ƒ n  d  S(   N(   R3   R7   t   partial_info(   R4   t   data(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt
   _on_stdouto   s    c         C@  s&   |  j  d  k	 r" |  j  j | ƒ n  d  S(   N(   R3   R7   t   partial_error(   R4   R<   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt
   _on_stderrs   s    c         C@  s"   t  j j | d d d d | j ƒ S(   Nt   vart   caches   anaconda-projects	   env-specs(   t   ost   patht   joint   locked_hash(   R4   t   prefixt   spec(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _timestamp_filew   s    c         C@  sÜ   t  t j t j j | d d d ƒ ƒ ƒ } | j t j j | d ƒ ƒ | j t j j | d ƒ ƒ | j t j j | d d ƒ ƒ | j t j j | d d ƒ ƒ | j t j j | d ƒ ƒ | j t j j | d ƒ ƒ | S(	   Nt   libs   python*s   site-packagest   bint   Libt   Libraryt   Scriptss
   conda-meta(   R+   t   globt   iglobRB   RC   RD   t   append(   R4   RF   t   dirs(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt!   _timestamp_comparison_directoriesz   s    *c         C@  s¡   |  j  | | ƒ } y t j j | ƒ } Wn t k
 r< t SX|  j | ƒ } xN | D]F } y t j j | ƒ } Wn t k
 rˆ d } n X| | k rS t SqS Wt S(   Ni    (   RH   RB   RC   t   getmtimet   OSErrorR   RR   R   (   R4   RF   RG   t   filenamet   stamp_mtimeRQ   t   dt   d_mtime(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _timestamp_file_up_to_date”   s    
c      	   C@  sÃ   |  j  | | ƒ } t j t j j | ƒ ƒ yz t j | d d d ƒ* } | j t	 j
 t d t ƒ ƒ d ƒ Wd  QXt j j | ƒ } | d } t j | | | f ƒ Wn t t f k
 r¾ n Xd  S(   Nt   wt   encodings   utf-8t   anaconda_project_versions   
i   (   RH   t   makedirst   makedirs_ok_if_existsRB   RC   t   dirnamet   codecst   opent   writet   jsont   dumpsR
   R   RS   t   utimet   IOErrorRT   (   R4   RF   RG   RU   t   ft   actual_timet   next_tick_time(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _write_timestamp_file¯   s    )

c         C@  s  i  } t  j ƒ  } t | ƒ } | | k rG | j | ƒ | g | } n  x¥ | D] } y3 |  j d | ƒ t  j d | d | d | ƒ } Wn4 t  j k
 r½ }	 t d j | t	 |	 ƒ ƒ ƒ ‚ n Xg  | D] }
 d |
 ^ qÅ } t
 | ƒ | | <qN Wt | ƒ } t d | d | ƒ } | S(	   Ns   Resolving conda packages for %st   pkgsR/   t   channelss   Error resolving for {}: {}s   %s=%s=%st   package_specs_by_platformt	   platforms(   R   t   current_platformR+   t   removeR:   t   resolve_dependenciest
   CondaErrorR   t   formatt   strR*   R1   R   (   R4   t   package_specsRl   Rn   R.   t   currentt   resolve_for_platformst   conda_platformt   depst   et   dept   locked_specst   lock_set(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyRq   Ë   s"    ""c         C@  sD  y t  j | ƒ } Wn2 t  j k
 rG } t d | t | ƒ f ƒ ‚ n Xt ƒ  } t ƒ  } xÅ | j D]º } t  j | ƒ } | j }	 |	 | k rž | j	 |	 ƒ qd d „  }
 | |	 \ } } } | j
 d  k	 rì |
 | j
 | ƒ rì | j	 |	 ƒ qd | j d  k	 rd |
 | j | ƒ rd | j	 |	 ƒ qd qd Wt t | ƒ ƒ t t | ƒ ƒ f S(   Ns7   Conda failed while listing installed packages in %s: %sc         S@  s%   |  | k r t  S| j |  d ƒ Sd  S(   Nt   .(   R   R   (   t   wantedt	   installed(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   version_matchõ   s    (   R   R€   Rr   R   Rt   R   t   conda_packages_for_createt
   parse_specR   t   addt   exact_versionR7   t   exact_build_stringR*   R+   (   R4   RF   t   env_specR€   Rz   t   missingt   wrong_versiont   spec_stringRG   R   R   t   _t   installed_versiont   installed_build(    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _find_conda_deviationsä   s&     				
"
c         C@  sª   t  | j ƒ d k r g  Sy t j | ƒ } Wn2 t j k
 r` } t d | t | ƒ f ƒ ‚ n Xt ƒ  } x- | j D]" } | | k rt | j | ƒ qt qt Wt	 t
 | ƒ ƒ S(   Ni    s5   pip failed while listing installed packages in %s: %s(   R   t   pip_package_names_sett   pip_apiR€   t   PipErrorR   Rt   R   R„   R*   R+   (   R4   RF   RG   R€   Rz   Rˆ   R   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _find_pip_missing  s     	c         C@  sŠ   d  } | j d  k	 r† | j j r† t j ƒ  } | | j k ra d | j | d j | j ƒ f } q† | j j s† d | j | f } q† n  | S(   NsD   Env spec '%s' does not support current platform %s (it supports: %s)s   , sD   Env spec '%s' does not have the current platform %s in the lock file(	   R7   R}   t   enabledR   Ro   Rn   R   RD   t   supports_current_platform(   R4   RG   t   errorRo   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   _broken_lock_set_error  s    "c         C@  sË  |  j  | ƒ } | d  k	 rL t d | d d d d d d d d d t d t ƒ St j j t j j | d ƒ ƒ s® t d d	 | d t | j	 ƒ d d d t | j
 ƒ d d d t ƒ S|  j | | ƒ rÛ g  } g  } g  } t } n0 |  j | | ƒ \ } } |  j | | ƒ } t } d
 j | | ƒ } d
 j | ƒ }	 | d k rX|	 d k rXd | |	 f }
 nG | d k rqd | }
 n. |	 d k rŠd |	 }
 n | s™d }
 n d }
 t d |
 d | d | d | d d d | ƒ S(   Nt   summaryt   missing_packagest   wrong_version_packagest   missing_pip_packagest   wrong_version_pip_packagest   brokent	   unfixables
   conda-metas;   '%s' doesn't look like it contains a Conda environment yet.s   , R   sG   Conda environment is missing packages: %s and has wrong versions of: %ss)   Conda environment is missing packages: %ss+   Conda environment has wrong versions of: %ss2   Conda environment needs to be marked as up-to-datet   OK(    (    (    (    (    (    (    (   R–   R7   R   R   RB   RC   t   isdirRD   t   tuplet"   conda_package_names_for_create_setR   RY   RŽ   R’   R   (   R4   RF   RG   t   broken_lock_sett   conda_missingt   conda_wrong_versiont   pip_missingt   timestamp_okt   all_missing_stringt   all_wrong_version_stringR—   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   find_environment_deviations,  sZ    !
		c   
      C@  sÉ  | d  k r! |  j | | ƒ } n  | j r= t d | ƒ ‚ n  t j j t j j | d ƒ ƒ rAt t	 | j
 | j ƒ ƒ } t | ƒ d k r
| j | ƒ } t | ƒ t | ƒ k s¹ t ‚ | j | ƒ y5 t j d | d | d | j d |  j d |  j ƒ Wq>t j k
 r:} t d	 j d
 j | ƒ t | ƒ ƒ ƒ ‚ q>Xq
nÉ | rút	 | j ƒ } t | ƒ d k rzt	 d g ƒ } n  yH t j d | d t | ƒ d | j d |  j d |  j ƒ | j | ƒ Wq
t j k
 rö} t d | t | ƒ f ƒ ‚ q
Xn t d | ƒ ‚ t | j ƒ }	 t |	 ƒ d k rµ| j |	 ƒ } t | ƒ t |	 ƒ k sXt ‚ y t j d | d | ƒ Wqµt j k
 r±} t d j d
 j |	 ƒ t | ƒ ƒ ƒ ‚ qµXn  |  j | | ƒ d  S(   Ns"   Unable to update environment at %ss
   conda-metai    RF   Rk   Rl   t   stdout_callbackt   stderr_callbacks"   Failed to install packages: {}: {}s   , t   pythons&   Failed to create environment at %s: %ss&   Conda environment at %s does not exists.   Failed to install missing pip packages: {}: {}(   R7   R©   R   R   RB   RC   RŸ   RD   R+   R   R˜   R™   R   t   specs_for_conda_package_namesR'   t
   apply_pinsR   t   installRl   R=   R?   Rr   Rs   Rt   R‚   t   createRš   t   specs_for_pip_package_namesR   R‘   Rj   (
   R4   RF   RG   t
   deviationsR°   t	   to_updateR   Rz   t   command_line_packagesRˆ   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   fix_environment_deviationsb  sX    	!			1			
#	%c         C@  s_   y& t  j | | d |  j d |  j ƒWn2 t  j k
 rZ } t d | t | ƒ f ƒ ‚ n Xd  S(   NRª   R«   s%   Failed to remove packages from %s: %s(   R   Rp   R=   R?   Rr   R   Rt   (   R4   RF   t   packagesRz   (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   remove_packages›  s    &N(   t   __name__t
   __module__R6   R:   R=   R?   RH   RR   RY   Rj   Rq   RŽ   R’   R–   R©   R7   R   Rµ   R·   (    (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyR2   b   s   											$			69(   t   __doc__t
   __future__R    R`   RN   Rc   RB   t   anaconda_project.conda_managerR   R   R   R   t#   anaconda_project.internal.conda_apit   internalR   t!   anaconda_project.internal.pip_apiR   t"   anaconda_project.internal.makedirsR]   t   anaconda_project.versionR   R   R1   R2   (    (    (    sN   lib/python2.7/site-packages/anaconda_project/internal/default_conda_manager.pyt   <module>   s   "	!	)