a
    Œ�éiG@  ã                   @   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
 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$ ddl%m&Z& e&�rZddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl#m8Z8m9Z9 e :e;¡Z<G dd„ deƒZ=G dd„ de
e=ƒZ>e$j?e$j@e$jAgZBdd „ ZCG d!d"„ d"e>ƒZDdS )#a  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.
é    N)Úpartial)ÚPY2)Ú
cmdoptions)ÚCommand)ÚCommandContextMixIn)ÚCommandErrorÚPreviousBuildDirError)ÚLinkCollector)ÚPackageFinder)ÚSelectionPreferences)Ú
PipSession)ÚRequirementPreparer)Úinstall_req_from_editableÚinstall_req_from_lineÚ#install_req_from_parsed_requirementÚinstall_req_from_req_string)Úparse_requirements)Úpip_self_version_check)Útempdir_kinds)ÚMYPY_CHECK_RUNNING)ÚValues)ÚAnyÚListÚOptionalÚTuple)Ú
WheelCache)ÚTargetPython)ÚInstallRequirement)ÚRequirementTracker)ÚBaseResolver)ÚTempDirectoryÚTempDirectoryTypeRegistryc                       s>   e Zd ZdZ‡ fdd„Zedd„ ƒZdd„ Zdd	d
„Z‡  Z	S )ÚSessionCommandMixinzE
    A class mixin for command classes needing _build_session().
    c                    s   t t| ƒ ¡  d | _d S ©N)Úsuperr"   Ú__init__Ú_session)Úself©Ú	__class__© úM/home/Claro/venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.pyr%   6   s    zSessionCommandMixin.__init__c                 C   sL   g }t |ddƒs*t |ddƒ}|r*| |¡ t |ddƒ}|rD| |¡ |pJdS )z7Return a list of index urls from user-provided options.Úno_indexFÚ	index_urlNÚextra_index_urls)ÚgetattrÚappendÚextend)ÚclsÚoptionsÚ
index_urlsÚurlÚurlsr*   r*   r+   Ú_get_index_urls;   s    

z#SessionCommandMixin._get_index_urlsc                 C   s0   | j du r*|  |  |¡¡| _ | j dus*J ‚| j S )zGet a default-managed session.N)r&   Úenter_contextÚ_build_session)r'   r3   r*   r*   r+   Úget_default_sessionJ   s    
z'SessionCommandMixin.get_default_sessionNc                 C   s´   |j rtj |j ¡sJ ‚t|j r0tj |j d¡nd |d ur>|n|j|j|  |¡d�}|j	rb|j	|_
|jrp|j|_	|jsz|rŽ|d ur†|n|j|_|jr¤|j|jdœ|_|j |j_|S )NÚhttp)ÚcacheÚretriesÚtrusted_hostsr4   )r;   Úhttps)Ú	cache_dirÚosÚpathÚisabsr   Újoinr=   r>   r7   ÚcertÚverifyÚclient_certÚtimeoutÚproxyÚproxiesÚno_inputÚauthÚ	prompting)r'   r3   r=   rH   Úsessionr*   r*   r+   r9   U   s,    ÿù
ÿþz"SessionCommandMixin._build_session)NN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   Úclassmethodr7   r:   r9   Ú__classcell__r*   r*   r(   r+   r"   1   s   
r"   c                   @   s   e Zd ZdZdd„ ZdS )ÚIndexGroupCommandz–
    Abstract base class for commands with the index_group options.

    This also corresponds to the commands that permit the pip version check.
    c                 C   sh   t |dƒsJ ‚|js|jrdS | j|dtd|jƒd�}|� t||ƒ W d  ƒ n1 sZ0    Y  dS )z€
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        r,   Nr   é   )r=   rH   )ÚhasattrÚdisable_pip_version_checkr,   r9   ÚminrH   r   )r'   r3   rN   r*   r*   r+   Úhandle_pip_version_check…   s    
ýz*IndexGroupCommand.handle_pip_version_checkN)rO   rP   rQ   rR   rZ   r*   r*   r*   r+   rU   }   s   rU   c                    s   dd„ ‰ ‡ ‡fdd„}|S )zNDecorator for common logic related to managing temporary
    directories.
    c                 S   s   t D ]}|  |d¡ qd S )NF)ÚKEEPABLE_TEMPDIR_TYPESÚ
set_delete)ÚregistryÚtr*   r*   r+   Úconfigure_tempdir_registry¨   s    z0with_cleanup.<locals>.configure_tempdir_registryc                    sP   | j d usJ ‚|jrˆ | j ƒ zˆ| ||ƒW S  tyJ   ˆ | j ƒ ‚ Y n0 d S r#   )Útempdir_registryÚno_cleanr   )r'   r3   Úargs©r_   Úfuncr*   r+   Úwrapper­   s    

zwith_cleanup.<locals>.wrapperr*   )rd   re   r*   rc   r+   Úwith_cleanup£   s    rf   c                	       sb   e Zd Z‡ fdd„Zedd„ ƒZeddd„ƒZeddd„ƒZdd„ Z	edd„ ƒZ
ddd„Z‡  ZS )ÚRequirementCommandc                    s*   t t| ƒj|i |¤Ž | j t ¡ ¡ d S r#   )r$   rg   r%   Úcmd_optsÚ
add_optionr   ra   )r'   rb   Úkwr(   r*   r+   r%   Á   s    zRequirementCommand.__init__c                 C   s(   t rd| jv rdS dS d| jv r$dS dS )zEDetermines which resolver should be used, based on the given options.ú2020-resolverÚlegacyzlegacy-resolver)r   Úfeatures_enabledÚdeprecated_features_enabled©r3   r*   r*   r+   Údetermine_resolver_variantÇ   s    

z-RequirementCommand.determine_resolver_variantNc                 C   s|   |j }|dusJ ‚|  |¡}	|	dkr>d|jv }
|
rVt d¡ nd}
d|jv rVt d¡ t||j||j|||j||j	||
d�S )zQ
        Create a RequirementPreparer instance for the given parameters.
        Nrk   z	fast-depszÊpip is using lazily downloaded wheels using HTTP range requests to obtain dependency information. This experimental feature is enabled through --use-feature=fast-deps and it is not ready for production.Fz;fast-deps has no effect when used with the legacy resolver.)Ú	build_dirÚsrc_dirÚdownload_dirÚbuild_isolationÚreq_trackerrN   Úprogress_barÚfinderÚrequire_hashesÚuse_user_siteÚ
lazy_wheel)
rB   rp   rm   ÚloggerÚwarningr   rr   rt   rv   rx   )r2   Útemp_build_dirr3   ru   rN   rw   ry   rs   Útemp_build_dir_pathÚresolver_variantrz   r*   r*   r+   Úmake_requirement_preparerØ   s6    

ÿ
ÿõz,RequirementCommand.make_requirement_preparerFTúto-satisfy-onlyc                 C   s†   t t|j|
d�}|  |¡}|dkrTddl}|jjjjj	||||||j
||||	|d�S ddl}|jjjjj	||||||j
||||	|d�S )zF
        Create a Resolver instance for the given parameters.
        )ÚisolatedÚ
use_pep517rk   r   N)Úpreparerrw   Úwheel_cacheÚmake_install_reqry   Úignore_dependenciesÚignore_installedÚignore_requires_pythonÚforce_reinstallÚupgrade_strategyÚpy_version_info)r   r   Úisolated_moderp   Ú,pip._internal.resolution.resolvelib.resolverÚ	_internalÚ
resolutionÚ
resolvelibÚresolverÚResolverr‡   Ú(pip._internal.resolution.legacy.resolverrl   )r2   r„   rw   r3   r…   ry   rˆ   r‰   rŠ   r‹   rƒ   rŒ   r†   r   Úpipr*   r*   r+   Úmake_resolver
  sF    ý
õõz RequirementCommand.make_resolverc              	   C   sT  g }|j D ]6}t|d|||d�D ]}t||jdd�}| |¡ q q
|D ]$}	t|	d|j|jdd�}| |¡ qF|jD ]"}	t|	d|j|jd�}| |¡ qr|j	D ]8}t||||d�D ]"}t||j|jdd�}| |¡ q°qœt
d	d
„ |D ƒƒrîd|_|�sP|j�sP|j	�sPd| ji}
|j�r<tdjf i t|
d |j¡d�¤Žƒ‚ntdjf i |
¤Žƒ‚|S )zS
        Parse command-line arguments into the corresponding requirements.
        T)Ú
constraintrw   r3   rN   F)r‚   Úuser_suppliedN)r‚   rƒ   r˜   )r˜   r‚   rƒ   )rw   r3   rN   c                 s   s   | ]}|j V  qd S r#   )Úhas_hash_options)Ú.0Úreqr*   r*   r+   Ú	<genexpr>|  ó    z6RequirementCommand.get_requirements.<locals>.<genexpr>ÚnamezXYou must give at least one requirement to {name} (maybe you meant "pip {name} {links}"?)ú )ÚlinkszHYou must give at least one requirement to {name} (see "pip help {name}"))Úconstraintsr   r   r�   r0   r   rƒ   Ú	editablesr   ÚrequirementsÚanyrx   rž   Ú
find_linksr   ÚformatÚdictrD   )r'   rb   r3   rw   rN   r£   ÚfilenameÚ
parsed_reqÚ
req_to_addr›   Úoptsr*   r*   r+   Úget_requirementsE  sp    
ý
ýý
ü
þ
ü
þÿÿÿz#RequirementCommand.get_requirementsc                 C   s    | j }| ¡ }|rt |¡ dS )zE
        Trace basic information about the provided objects.
        N)Úsearch_scopeÚget_formatted_locationsr{   Úinfo)rw   r­   Ú	locationsr*   r*   r+   Útrace_basic_info�  s    z#RequirementCommand.trace_basic_infoc                 C   s6   t j||d�}td|j|j|j|d�}tj|||d�S )zÛ
        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.
        ro   T)Úallow_yankedÚformat_controlÚallow_all_prereleasesÚprefer_binaryr‰   )Úlink_collectorÚselection_prefsÚtarget_python)r	   Úcreater   r³   Úprerµ   r
   )r'   r3   rN   r¸   r‰   r¶   r·   r*   r*   r+   Ú_build_package_finder™  s    ûýz(RequirementCommand._build_package_finder)N)NFTFFr�   NN)NN)rO   rP   rQ   r%   Ústaticmethodrp   rS   r€   r–   r¬   r±   r»   rT   r*   r*   r(   r+   rg   ¿   s,   
	 ø1        ô:H
  ûrg   )ErR   ÚloggingrA   Ú	functoolsr   Zpip._vendor.sixr   Zpip._internal.clir   Úpip._internal.cli.base_commandr   Ú!pip._internal.cli.command_contextr   Úpip._internal.exceptionsr   r   Úpip._internal.index.collectorr	   Ú"pip._internal.index.package_finderr
   Ú$pip._internal.models.selection_prefsr   Úpip._internal.network.sessionr   Ú pip._internal.operations.preparer   Úpip._internal.req.constructorsr   r   r   r   Zpip._internal.req.req_filer   Ú!pip._internal.self_outdated_checkr   Úpip._internal.utils.temp_dirr   Úpip._internal.utils.typingr   Úoptparser   Útypingr   r   r   r   Úpip._internal.cacher   Ú"pip._internal.models.target_pythonr   Zpip._internal.req.req_installr   Úpip._internal.req.req_trackerr   Úpip._internal.resolution.baser   r    r!   Ú	getLoggerrO   r{   r"   rU   Ú	BUILD_ENVÚEPHEM_WHEEL_CACHEÚ	REQ_BUILDr[   rf   rg   r*   r*   r*   r+   Ú<module>   sH   
L ý