ó
b]c           @   s†  d  Z  d d l Z d d l Z d d l m Z d d l 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 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 m Z d d l m Z e r]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) n  e j* e+ ƒ Z, d e- f d „  ƒ  YZ. d S(   s)   Prepares a distribution for installation
iÿÿÿÿN(   t   requests(   t)   make_distribution_for_install_requirement(   t   InstalledDistribution(   t
   is_dir_urlt   is_file_urlt
   is_vcs_urlt
   unpack_urlt   url_to_path(   t   DirectoryUrlHashUnsupportedt   HashUnpinnedt   InstallationErrort   PreviousBuildDirErrort   VcsHashUnsupported(   t
   expanduser(   t   MissingHashes(   t
   indent_log(   t   display_patht   normalize_path(   t   MYPY_CHECK_RUNNING(   t   Optional(   t   AbstractDistribution(   t
   PipSession(   t   PackageFinder(   t   InstallRequirement(   t   RequirementTrackert   RequirementPreparerc           B   sA   e  Z d  Z d „  Z e d „  ƒ Z d „  Z d „  Z d „  Z RS(   s   Prepares a Requirement
    c         C   sk   t  t |  ƒ j ƒ  | |  _ | |  _ | |  _ | |  _ | rL t | ƒ } n  | |  _ | |  _	 | |  _
 d  S(   N(   t   superR   t   __init__t   src_dirt	   build_dirt   req_trackert   download_dirR   t   wheel_download_dirt   progress_bart   build_isolation(   t   selfR   R   R   R    R!   R"   R   (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyR   *   s    						c         C   sa   |  j  r] t |  j  ƒ |  _  t j j |  j  ƒ r4 t St j d ƒ t d t	 |  j  ƒ ƒ ‚ n  t
 S(   Ns!   Could not find download directorys0   Could not find or access download directory '%s'(   R   R   t   ost   patht   existst   Truet   loggert   criticalR
   R   t   False(   R#   (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyt   _download_should_saveP   s    	c         C   s§  | j  rF | j  j d k rF t | j  j ƒ } t j d t | ƒ ƒ n t j d | ƒ t ƒ  B| j |  j	 ƒ t
 j j t
 j j | j d ƒ ƒ r° t d | | j f ƒ ‚ n  | j | | | ƒ | j  sÒ t ‚ | j  } | r@t | ƒ rù t ƒ  ‚ n$ t | ƒ rt | ƒ rt ƒ  ‚ n  | j r@| j r@t ƒ  ‚ q@n  | j d | ƒ } | rl| rlt ƒ  } n  y† |  j }	 t }
 | j  j rŸ|  j rŸ|  j }	 n  | j  j rÃ|	 rºt }
 qÃt  }
 n  t! | j  | j |	 |
 d | d | d	 |  j" ƒWnE t# j$ k
 r9} t j% d
 | | ƒ t& d | | | j  f ƒ ‚ n Xt' | ƒ } |  j( j) | ƒ  | j* | |  j+ ƒ Wd QX|  j, r| j  j- s| j. |  j ƒ qn  Wd QX| S(   sC   Prepare a requirement that would be obtained from req.link
        t   files   Processing %ss   Collecting %ss   setup.pysí   pip can't proceed with requirements '%s' due to a pre-existing build directory (%s). This is likely due to a previous installation that failed. pip is being responsible and not assuming it can delete this. Please delete it and try again.t   trust_internett   sessiont   hashesR!   s4   Could not install requirement %s because of error %ssD   Could not install requirement %s because of HTTP error %s for URL %sN(/   t   linkt   schemeR   t   urlR(   t   infoR   R   t   ensure_has_source_dirR   R$   R%   R&   t   joint
   source_dirR   t   populate_linkt   AssertionErrorR   R   R   R   R   t   original_linkt	   is_pinnedR	   R/   R   R   R'   t   is_wheelR    R*   R   R!   R    t	   HTTPErrorR)   R
   R   R   t   trackt   prepare_distribution_metadataR"   R+   t   is_artifactt   archive(   R#   t   reqR.   t   findert   upgrade_allowedt   require_hashesR%   R0   R/   R   t   autodelete_unpackedt   exct   abstract_dist(    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyt   prepare_linked_requirement_   sj    
$							c         C   sÔ   | j  s t d ƒ ‚ t j d | ƒ t ƒ    | rH t d | ƒ ‚ n  | j |  j ƒ | j |  j	 ƒ t
 | ƒ } |  j j | ƒ  | j | |  j ƒ Wd QX|  j	 r½ | j |  j ƒ n  | j | ƒ Wd QX| S(   s(   Prepare an editable requirement
        s-   cannot prepare a non-editable req as editables   Obtaining %sso   The editable requirement %s cannot be installed when requiring hashes, because there is no single file to hash.N(   t   editableR8   R(   R3   R   R
   R4   R   t   update_editableR+   R   R   R=   R>   R"   R@   R   t   check_if_exists(   R#   RA   RD   t   use_user_siteRB   RG   (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyt   prepare_editable_requirementß   s"    

	c         C   s‰   | j  s t d ƒ ‚ | d k	 s7 t d | j  f ƒ ‚ t j d | | | j  j ƒ t ƒ  ' | rs t j d ƒ n  t | ƒ } Wd QX| S(   s1   Prepare an already-installed requirement
        s(   req should have been satisfied but isn'tsA   did not get skip reason skipped but req.satisfied_by is set to %rs   Requirement %s: %s (%s)s§   Since it is already installed, we are trusting this package without checking its hash. To ensure a completely repeatable environment, install into an empty virtualenv.N(	   t   satisfied_byR8   t   NoneR(   R3   t   versionR   t   debugR   (   R#   RA   RD   t   skip_reasonRG   (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyt   prepare_installed_requirement  s    	

(	   t   __name__t
   __module__t   __doc__R   t   propertyR+   RH   RM   RS   (    (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyR   &   s   	&	€	$(/   RV   t   loggingR$   t   pip._vendorR    t   pip._internal.distributionsR   t%   pip._internal.distributions.installedR   t   pip._internal.downloadR   R   R   R   R   t   pip._internal.exceptionsR   R	   R
   R   R   t   pip._internal.utils.compatR   t   pip._internal.utils.hashesR   t   pip._internal.utils.loggingR   t   pip._internal.utils.miscR   R   t   pip._internal.utils.typingR   t   typingR   R   R   t   pip._internal.indexR   t   pip._internal.req.req_installR   t   pip._internal.req.req_trackerR   t	   getLoggerRT   R(   t   objectR   (    (    (    s?   lib/python2.7/site-packages/pip/_internal/operations/prepare.pyt   <module>   s*   ((