
j^c           @   sV  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
 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 m Z m Z m Z d d l m Z d d l m  Z  d d l! m" Z" m# Z# d d l$ m% Z% d d l& m' Z' e' rd d l( m) Z) d d l* m+ Z+ m, Z, m- Z- m. Z. d d l/ m0 Z0 d d l1 m2 Z2 d d l3 m4 Z4 d d l5 m6 Z6 d d l7 m8 Z8 d d l$ m9 Z9 m: Z: n  e j; e<  Z= d e
 f d     YZ> d e e> f d     YZ? e% j@ e% jA e% jB g ZC d   ZD d  e? f d!     YZE d S("   s  Contains the Command base classes that depend on PipSession.

The classes in this module are in a separate module so the commands not
needing download / PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
iN(   t   partial(   t
   cmdoptions(   t   Command(   t   CommandContextMixIn(   t   CommandErrort   PreviousBuildDirError(   t   PackageFinder(   t   SelectionPreferences(   t
   Downloader(   t
   PipSession(   t   RequirementPreparer(   t   install_req_from_editablet   install_req_from_linet#   install_req_from_parsed_requirementt   install_req_from_req_string(   t   parse_requirements(   t   RequirementSet(   t   make_link_collectort   pip_self_version_check(   t   tempdir_kinds(   t   MYPY_CHECK_RUNNING(   t   Values(   t   Anyt   Listt   Optionalt   Tuple(   t
   WheelCache(   t   TargetPython(   t   InstallRequirement(   t   RequirementTracker(   t   BaseResolver(   t   TempDirectoryt   TempDirectoryTypeRegistryt   SessionCommandMixinc           B   s>   e  Z d  Z d   Z e d    Z d   Z d d d  Z RS(   sE   
    A class mixin for command classes needing _build_session().
    c         C   s    t  t |   j   d  |  _ d  S(   N(   t   superR!   t   __init__t   Nonet   _session(   t   self(    (    s.   site-packages/pip/_internal/cli/req_command.pyR#   ;   s    c         C   su   g  } t  | d t  sC t  | d d  } | rC | j |  qC n  t  | d d  } | rk | j |  n  | pt d S(   s7   Return a list of index urls from user-provided options.t   no_indext	   index_urlt   extra_index_urlsN(   t   getattrt   FalseR$   t   appendt   extend(   t   clst   optionst
   index_urlst   urlt   urls(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   _get_index_urls@   s    c         C   sI   |  j  d k rB |  j |  j |   |  _  |  j  d k	 sB t  n  |  j  S(   s   Get a default-managed session.N(   R%   R$   t   enter_contextt   _build_sessiont   AssertionError(   R&   R/   (    (    s.   site-packages/pip/_internal/cli/req_command.pyt   get_default_sessionO   s    c      
   C   s%  | j  s% t j j | j   s% t  t d | j  rL t j j | j  d  n d  d | d  k	 rd | n | j d | j	 d |  j
 |   } | j r | j | _ n  | j r | j | _ n  | j s | r | d  k	 r | n | j | _ n  | j ri | j d 6| j d 6| _ n  | j | j _ | S(   Nt   cachet   httpt   retriest   trusted_hostsR0   t   https(   t	   cache_dirt   ost   patht   isabsR6   R	   t   joinR$   R:   R;   R3   t   certt   verifyt   client_certt   timeoutt   proxyt   proxiest   no_inputt   autht	   prompting(   R&   R/   R:   RE   t   session(    (    s.   site-packages/pip/_internal/cli/req_command.pyR5   Z   s$    %'			!	
N(	   t   __name__t
   __module__t   __doc__R#   t   classmethodR3   R7   R$   R5   (    (    (    s.   site-packages/pip/_internal/cli/req_command.pyR!   6   s
   		t   IndexGroupCommandc           B   s   e  Z d  Z d   Z RS(   s   
    Abstract base class for commands with the index_group options.

    This also corresponds to the commands that permit the pip version check.
    c         C   sp   t  | d  s t  | j s' | j r+ d S|  j | d d d t d | j  } |  t | |  Wd QXd S(   s   
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        R'   NR:   i    RE   i   (   t   hasattrR6   t   disable_pip_version_checkR'   R5   t   minRE   R   (   R&   R/   RK   (    (    s.   site-packages/pip/_internal/cli/req_command.pyt   handle_pip_version_check   s    (   RL   RM   RN   RT   (    (    (    s.   site-packages/pip/_internal/cli/req_command.pyRP      s   c            s   d        f d   } | S(   sN   Decorator for common logic related to managing temporary
    directories.
    c         S   s%   x t  D] } |  j | t  q Wd  S(   N(   t   KEEPABLE_TEMPDIR_TYPESt
   set_deleteR+   (   t   registryt   t(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   configure_tempdir_registry   s    c            sj   |  j  d  k	 s t  | j r.   |  j   n  y  |  | |  SWn! t k
 re   |  j     n Xd  S(   N(   t   tempdir_registryR$   R6   t   no_cleanR   (   R&   R/   t   args(   RY   t   func(    s.   site-packages/pip/_internal/cli/req_command.pyt   wrapper   s    	(    (   R]   R^   (    (   RY   R]   s.   site-packages/pip/_internal/cli/req_command.pyt   with_cleanup   s    	t   RequirementCommandc        
   B   sw   e  Z d    Z e d d d   Z e d e e e e d d d d   Z e d  Z	 e d    Z
 d d d  Z RS(   c         O   s3   t  t |   j | |   |  j j t j    d  S(   N(   R"   R`   R#   t   cmd_optst
   add_optionR   R[   (   R&   R\   t   kw(    (    s.   site-packages/pip/_internal/cli/req_command.pyR#      s    c   
      C   s|   t  | d | j } |  j }	 |	 d k	 s0 t  t d |	 d | j d | d | d | j d | d | d	 | d
 | j d |  
S(   sQ   
        Create a RequirementPreparer instance for the given parameters.
        t   progress_bart	   build_dirt   src_dirt   download_dirt   wheel_download_dirt   build_isolationt   req_trackert
   downloadert   findert   require_hashest   use_user_siteN(	   R   Rd   R?   R$   R6   R
   Rf   Ri   Rm   (
   t   temp_build_dirR/   Rj   RK   Rl   Rn   Rg   Rh   Rk   t   temp_build_dir_path(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   make_requirement_preparer   s    				s   to-satisfy-onlyc         C   s   t  t d | j d |	 } d | j k r d d l } | j j j j j	 d |  d | d | d	 | d
 | d | j
 d | d | d | d | d |
  Sd d l } | j j j j j	 d |  d | d | d	 | d
 | d | j
 d | d | d | d | d |
  S(   sF   
        Create a Resolver instance for the given parameters.
        t   isolatedt
   use_pep517t   resolveriNt   preparerRl   t   wheel_cachet   make_install_reqRn   t   ignore_dependenciest   ignore_installedt   ignore_requires_pythont   force_reinstallt   upgrade_strategyt   py_version_info(   R    R   t   isolated_modet   unstable_featurest,   pip._internal.resolution.resolvelib.resolvert	   _internalt
   resolutiont
   resolvelibRt   t   ResolverRx   t(   pip._internal.resolution.legacy.resolvert   legacy(   Ru   Rl   R/   Rv   Rn   Ry   Rz   R{   R|   Rs   R}   Rw   t   pip(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   make_resolver   s>    				c         C   s&  t  d |  } xk | j D]` } xW t | d t d | d | d | D]1 } t | d | j }	 t |	 _ | j |	  qD Wq WxE | D]= }
 t |
 d d | j d | j
 }	 t |	 _ | j |	  q WxE | j D]: }
 t |
 d | j d | j
 }	 t |	 _ | j |	  q Wxn | j D]c } xZ t | d | d | d | D]: } t | d | j d | j
 }	 t |	 _ | j |	  q<WqW| j } t d   | D  rt | _ n  | p| j p| j s"i |  j d	 6} | j r
t d
 j t | d d j | j      q"t d j |     n  | S(   sS   
        Parse command-line arguments into the corresponding requirements.
        t   check_supported_wheelst
   constraintRl   R/   RK   Rr   Rs   c         s   s   |  ] } | j  Vq d  S(   N(   t   has_hash_options(   t   .0t   req(    (    s.   site-packages/pip/_internal/cli/req_command.pys	   <genexpr>`  s    t   namesX   You must give at least one requirement to {name} (maybe you meant "pip {name} {links}"?)t   linkst    sH   You must give at least one requirement to {name} (see "pip help {name}")N(   R   t   constraintsR   t   TrueR   R~   t	   is_directt   add_requirementR   R$   Rs   t	   editablesR   t   requirementst   all_requirementst   anyRm   R   t
   find_linksR   t   formatt   dictRA   (   R&   R\   R/   Rl   RK   R   t   requirement_sett   filenamet
   parsed_reqt
   req_to_addR   R   t   opts(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   get_requirements%  s`    									'c         C   s/   |  j  } | j   } | r+ t j |  n  d S(   sE   
        Trace basic information about the provided objects.
        N(   t   search_scopet   get_formatted_locationst   loggert   info(   Rl   R   t	   locations(    (    s.   site-packages/pip/_internal/cli/req_command.pyt   trace_basic_infoq  s    	c         C   s^   t  | d | } t d t d | j d | j d | j d |  } t j d | d | d	 |  S(
   s   
        Create a package finder appropriate to this requirement command.

        :param ignore_requires_python: Whether to ignore incompatible
            "Requires-Python" values in links. Defaults to False.
        R/   t   allow_yankedt   format_controlt   allow_all_prereleasest   prefer_binaryRz   t   link_collectort   selection_prefst   target_python(   R   R   R   R   t   preR   R   t   create(   R&   R/   RK   R   Rz   R   R   (    (    s.   site-packages/pip/_internal/cli/req_command.pyt   _build_package_finder}  s    					N(   RL   RM   R#   t   staticmethodR$   Rq   R+   R   R   R   R   R   (    (    (    s.   site-packages/pip/_internal/cli/req_command.pyR`      s"   	2F(F   RN   t   loggingR>   t	   functoolsR    t   pip._internal.cliR   t   pip._internal.cli.base_commandR   t!   pip._internal.cli.command_contextR   t   pip._internal.exceptionsR   R   t"   pip._internal.index.package_finderR   t$   pip._internal.models.selection_prefsR   t   pip._internal.network.downloadR   t   pip._internal.network.sessionR	   t    pip._internal.operations.prepareR
   t   pip._internal.req.constructorsR   R   R   R   t   pip._internal.req.req_fileR   t   pip._internal.req.req_setR   t!   pip._internal.self_outdated_checkR   R   t   pip._internal.utils.temp_dirR   t   pip._internal.utils.typingR   t   optparseR   t   typingR   R   R   R   t   pip._internal.cacheR   t"   pip._internal.models.target_pythonR   t   pip._internal.req.req_installR   t   pip._internal.req.req_trackerR   t   pip._internal.resolution.baseR   R   R    t	   getLoggerRL   R   R!   RP   t	   BUILD_ENVt   EPHEM_WHEEL_CACHEt	   REQ_BUILDRU   R_   R`   (    (    (    s.   site-packages/pip/_internal/cli/req_command.pyt   <module>   sF   ""L 	