a
    ýÓEbíH  ã                   @   sÂ  d Z ddlZddlZddl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 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# 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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7m8Z8 ddl9m:Z: e ;e<¡Z=G dd„ deƒZ>G dd„ dee>ƒZ?e8j@e8jAe8jBgZCddœdd „ZDe	e	d!œd"d#„ZEG d$d%„ d%e?ƒZFd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)ÚValues)ÚAnyÚListÚOptionalÚTuple)Ú
WheelCache)Ú
cmdoptions)ÚCommand)ÚCommandContextMixIn)ÚCommandErrorÚPreviousBuildDirError)ÚLinkCollector)ÚPackageFinder)ÚSelectionPreferences)ÚTargetPython)Ú
PipSession)ÚRequirementPreparer)Úinstall_req_from_editableÚinstall_req_from_lineÚ#install_req_from_parsed_requirementÚinstall_req_from_req_string)Úparse_requirements)ÚInstallRequirement)ÚRequirementTracker)ÚBaseResolver)Úpip_self_version_check)Ú
deprecated)ÚTempDirectoryÚTempDirectoryTypeRegistryÚtempdir_kinds)Úrunning_under_virtualenvc                       sp   e Zd ZdZddœ‡ fdd„Zeeeee	  dœdd„ƒZ
eedœd	d
„Zdeee ee edœdd„Z‡  ZS )ÚSessionCommandMixinzE
    A class mixin for command classes needing _build_session().
    N©Úreturnc                    s   t ƒ  ¡  d | _d S ©N)ÚsuperÚ__init__Ú_session)Úself©Ú	__class__© ú]/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pip/_internal/cli/req_command.pyr'   6   s    
zSessionCommandMixin.__init__©Úoptionsr$   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)Úclsr/   Ú
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)   r/   r,   r,   r-   Úget_default_sessionH   s    
z'SessionCommandMixin.get_default_session)r/   ÚretriesÚtimeoutr$   c                 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)Úcacher>   Útrusted_hostsr7   )r@   Úhttps)Ú	cache_dirÚosÚpathÚisabsr   Újoinr>   rB   r:   ÚcertÚverifyÚclient_certr?   ÚproxyÚproxiesÚno_inputÚauthZ	prompting)r)   r/   r>   r?   Úsessionr,   r,   r-   r<   R   s&    ú

þz"SessionCommandMixin._build_session)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   Úclassmethodr   r   r   Ústrr:   r   r=   Úintr<   Ú__classcell__r,   r,   r*   r-   r"   0   s     üûr"   c                   @   s    e Zd ZdZeddœ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.
    Nr.   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.
        r0   Nr   é   )r>   r?   )ÚhasattrÚdisable_pip_version_checkr0   r<   Úminr?   r   )r)   r/   rP   r,   r,   r-   Úhandle_pip_version_checkƒ   s    ÿz*IndexGroupCommand.handle_pip_version_check)rQ   rR   rS   rT   r   r^   r,   r,   r,   r-   rY   {   s   rY   r#   c                   C   sN   t ƒ r
dS ttdƒsdS tjdks,tjdkr0dS t ¡ dkr@dS t d¡ dS )züOutput a warning for sudo users on Unix.

    In a virtual environment, sudo pip still writes to virtualenv.
    On Windows, users may run pip as Administrator without issues.
    This warning only applies to Unix root users outside of virtualenv.
    NÚgetuidÚwin32Úcygwinr   zÔRunning pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv)r!   r[   rE   ÚsysÚplatformr_   ÚloggerÚwarningr,   r,   r,   r-   Úwarn_if_run_as_rootž   s    
ÿrf   )Úfuncr$   c                    s6   t ddœdd„‰ tttt tt dœ‡ ‡fdd„}|S )zNDecorator for common logic related to managing temporary
    directories.
    N)Úregistryr$   c                 S   s   t D ]}|  |d¡ qd S )NF)ÚKEEPABLE_TEMPDIR_TYPESÚ
set_delete)rh   Útr,   r,   r-   Úconfigure_tempdir_registryÁ   s    z0with_cleanup.<locals>.configure_tempdir_registry)r)   r/   Úargsr$   c                    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)   r/   rm   ©rl   rg   r,   r-   ÚwrapperÅ   s    

zwith_cleanup.<locals>.wrapper)r   ÚRequirementCommandr   r   r   r   rW   )rg   rq   r,   rp   r-   Úwith_cleanup¼   s
    
þrs   c                       s  e Zd Zeeddœ‡ fdd„Zeeedœdd„ƒZeee	dœdd	„ƒZ
edeeeeee	ee eedœ	dd„ƒZedeeeee e	e	e	e	eee	 eeedf  edœdd„ƒZee eeeee dœdd„Zeeddœdd„ƒZd eeee ee	 edœdd„Z‡  ZS )!rr   N)rm   Úkwr$   c                    s&   t ƒ j|i |¤Ž | j t ¡ ¡ d S r%   )r&   r'   Úcmd_optsÚ
add_optionr	   ro   )r)   rm   rt   r*   r,   r-   r'   Ù   s    zRequirementCommand.__init__r.   c                 C   s   d| j v rdS dS )zEDetermines which resolver should be used, based on the given options.úlegacy-resolverÚlegacyú2020-resolver)Údeprecated_features_enabled©r/   r,   r,   r-   Údetermine_resolver_variantÞ   s    
z-RequirementCommand.determine_resolver_variantc                 C   s6   d| j vrdS d| j v r tdƒ‚tdddddd	� d
S )zJDetermines whether build failures should be suppressed and backtracked on.zbacktrack-on-build-failuresFrw   z&Cannot backtrack with legacy resolver.z”Backtracking on build failures can mask issues related to how a package generates metadata or builds a wheel. This flag will be removed in pip 22.2.Nz�avoiding known-bad versions by explicitly telling pip to ignore them (either directly as requirements, or via a constraints file)iŸ)  )ÚreasonÚgone_inÚreplacementÚfeature_flagÚissueT)rz   r   r   r{   r,   r,   r-   Ú#determine_build_failure_suppressionæ   s    

ôz6RequirementCommand.determine_build_failure_suppressionr   )	Útemp_build_dirr/   Úreq_trackerrP   ÚfinderÚuse_user_siteÚdownload_dirÚ	verbosityr$   c	                 C   sÒ   |j }	|	dusJ ‚|  |¡}
|
dkr>d|jv }|rVt d¡ nd}d|jv rVt d¡ d|jv}d|jv rxtd	d
dd� d|jv r�tdddd� |jdvr¨tdddd� t|	|j	||j
|||j||j||||d�S )zQ
        Create a RequirementPreparer instance for the given parameters.
        Nry   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.zout-of-tree-buildzin-tree-buildz#In-tree builds are now the default.z.to remove the --use-feature=in-tree-build flagz22.1)r}   r   r~   z"Out-of-tree builds are deprecated.>   ÚonÚoffz)Custom progress bar styles are deprecatedz&to use the default progress bar style.)Z	build_dirÚsrc_dirr‡   Úbuild_isolationr„   rP   Úprogress_barr…   Úrequire_hashesr†   Ú
lazy_wheelrˆ   Úin_tree_build)rF   r|   Úfeatures_enabledrd   re   rz   r   r�   r   r‹   rŒ   rŽ   )r6   rƒ   r/   r„   rP   r…   r†   r‡   rˆ   Ztemp_build_dir_pathÚresolver_variantr�   r�   r,   r,   r-   Úmake_requirement_preparerÿ   s`    

ÿ
ÿ

ý
ý
ýóz,RequirementCommand.make_requirement_preparerFTúto-satisfy-only.)Úpreparerr…   r/   Úwheel_cacher†   Úignore_installedÚignore_requires_pythonÚforce_reinstallÚupgrade_strategyÚ
use_pep517Úpy_version_infor$   c                 C   s’   t t|j|
d�}|  |¡}|  |¡}|dkr`d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.
        )Úisolatedr›   ry   r   N)r•   r…   r–   Úmake_install_reqr†   Úignore_dependenciesr—   r˜   r™   rš   rœ   Úsuppress_build_failures)r•   r…   r–   rž   r†   rŸ   r—   r˜   r™   rš   rœ   )r   r   Úisolated_moder‚   r|   Z,pip._internal.resolution.resolvelib.resolverÚ	_internalÚ
resolutionZ
resolvelibÚresolverZResolverrŸ   Z(pip._internal.resolution.legacy.resolverrx   )r6   r•   r…   r/   r–   r†   r—   r˜   r™   rš   r›   rœ   rž   r    r’   Úpipr,   r,   r-   Úmake_resolverH  sJ    ý

ôõz RequirementCommand.make_resolver)rm   r/   r…   rP   r$   c              	   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)Z
constraintr…   r/   rP   F)r�   Úuser_suppliedN)r�   r›   r§   )r§   r�   r›   )r…   r/   rP   c                 s   s   | ]}|j V  qd S r%   )Z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¡   r4   r   r›   Ú	editablesr   ÚrequirementsÚanyrŽ   r¬   Ú
find_linksr   ÚformatÚdictrH   )r)   rm   r/   r…   rP   r±   ÚfilenameZ
parsed_reqZ
req_to_addr©   Úoptsr,   r,   r-   Úget_requirements…  sv    

û
ýû
ü
ÿ
ü
þÿÿÿz#RequirementCommand.get_requirements)r…   r$   c                 C   s    | j }| ¡ }|rt |¡ dS )zE
        Trace basic information about the provided objects.
        N)Úsearch_scopeZget_formatted_locationsrd   Úinfo)r…   r¹   Ú	locationsr,   r,   r-   Útrace_basic_infoÔ  s    z#RequirementCommand.trace_basic_info)r/   rP   Útarget_pythonr˜   r$   c                 C   s>   t j||d�}td|j|j|j|d�}tj|||d|jv 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.
        r{   T)Zallow_yankedÚformat_controlZallow_all_prereleasesÚprefer_binaryr˜   Úhtml5lib)Úlink_collectorÚselection_prefsr½   Zuse_deprecated_html5lib)r   Úcreater   r¾   Úprer¿   r   rz   )r)   r/   rP   r½   r˜   rÁ   rÂ   r,   r,   r-   Ú_build_package_finderß  s    ûüz(RequirementCommand._build_package_finder)Nr   )NFTFFr”   NN)NN)rQ   rR   rS   r   r'   Ústaticmethodr   rV   r|   Úboolr‚   rU   r   r   r   r   r   rW   r   r“   r   r   r   r¦   r   r   r¸   r¼   r   rÅ   rX   r,   r,   r*   r-   rr   Ø   sv   	  ÷öH        ôó>úO  ûúrr   )GrT   ÚloggingrE   rb   Ú	functoolsr   Úoptparser   Útypingr   r   r   r   Úpip._internal.cacher   Úpip._internal.clir	   Úpip._internal.cli.base_commandr
   Ú!pip._internal.cli.command_contextr   Úpip._internal.exceptionsr   r   Zpip._internal.index.collectorr   Z"pip._internal.index.package_finderr   Z$pip._internal.models.selection_prefsr   Ú"pip._internal.models.target_pythonr   Zpip._internal.network.sessionr   Z pip._internal.operations.preparer   Zpip._internal.req.constructorsr   r   r   r   Zpip._internal.req.req_filer   Úpip._internal.req.req_installr   Úpip._internal.req.req_trackerr   Zpip._internal.resolution.baser   Z!pip._internal.self_outdated_checkr   Úpip._internal.utils.deprecationr   Úpip._internal.utils.temp_dirr   r   r    Úpip._internal.utils.virtualenvr!   Ú	getLoggerrQ   rd   r"   rY   Ú	BUILD_ENVÚEPHEM_WHEEL_CACHEÚ	REQ_BUILDri   rf   rs   rr   r,   r,   r,   r-   Ú<module>   sH   
Ký