a
    bai5                     @  s  d Z ddlm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 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$ 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l0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7 e8e9Z:dddddZ;e7j<e7j=e7j>gZ?edd d!Z@d"d"d#d$d%ZAG d&d  d eZBdS )'zContains the RequirementCommand base class.

This class is in a separate module so the commands that do not always
need PackageFinder capability don't unnecessarily import the
PackageFinder machinery and all its vendored dependencies, etc.
    )annotationsN)partial)Values)AnyCallableTypeVar)#SubprocessBuildEnvironmentInstaller)
WheelCache)
cmdoptions)IndexGroupCommand)SessionCommandMixin)CommandErrorPreviousBuildDirError)LinkCollector)PackageFinder)SelectionPreferences)TargetPython)
PipSession)BuildTracker)RequirementPreparer)install_req_from_editableinstall_req_from_line#install_req_from_parsed_requirementinstall_req_from_req_string)parse_dependency_groups)parse_requirements)InstallRequirement)BaseResolver)TempDirectoryTempDirectoryTypeRegistrytempdir_kindsr   booloptionsreturnc                 C  s   t jddkS )z
    Check if regular constraints should be ignored because
    we are in a isolated build process and build constraints
    feature is enabled but no build constraints were passed.
    Z _PIP_IN_BUILD_IGNORE_CONSTRAINTS1)osenvirongetr#    r*   W/var/www/html/SiteWeb/venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.py!should_ignore_regular_constraints0   s    r,   	_CommandTRequirementCommand)boundz-Callable[[_CommandT, Values, list[str]], int])funcr$   c                   s.   ddddd dddd	d
 fdd}|S )zNDecorator for common logic related to managing temporary
    directories.
    r   None)registryr$   c                 S  s   t D ]}| |d qd S )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)r2   tr*   r*   r+   configure_tempdir_registryK   s    z0with_cleanup.<locals>.configure_tempdir_registryr-   r   	list[str]int)selfr#   argsr$   c                   sP   | j d usJ |jr | j  z| ||W S  tyJ    | j   Y n0 d S N)tempdir_registryno_cleanr   )r9   r#   r:   r6   r0   r*   r+   wrapperO   s    

zwith_cleanup.<locals>.wrapperr*   )r0   r?   r*   r>   r+   with_cleanupD   s    r@   c                      s   e Zd Zdddd fddZedddd	d
Zed.dddddddddd	ddZed/dddddddddddddd Zd!dddd"d#d$d%Z	eddd&d'd(Z
d0ddd)d*dd+d,d-Z  ZS )1r.   r   r1   )r:   kwr$   c                   s6   t  j|i | | jt  | jt  d S r;   )super__init__cmd_opts
add_optionr
   dependency_groupsr=   )r9   r:   rA   	__class__r*   r+   rC   a   s    zRequirementCommand.__init__r   strr"   c                 C  s   d| j v rdS dS )zEDetermines which resolver should be used, based on the given options.zlegacy-resolverlegacy
resolvelib)deprecated_features_enabledr)   r*   r*   r+   determine_resolver_variantg   s    
z-RequirementCommand.determine_resolver_variantNr   r   r   r   r   r!   z
str | Noner8   r   )	temp_build_dirr#   build_trackersessionfinderuse_user_sitedownload_dir	verbosityr$   c	                 C  s   |j }	|	dusJ d}
| |}|dkrBd|jv }|r^td nd}
d}d|jv r^td t|dg }d	|jv }t|	|j||jt	|||d
|j
|||j||j||||
|jdS )zQ
        Create a RequirementPreparer instance for the given parameters.
        NFrK   z	fast-depszpip 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.Tz;fast-deps has no effect when used with the legacy resolver.build_constraintszbuild-constraint)rU    build_constraint_feature_enabled)	build_dirsrc_dirrS   build_isolationZbuild_isolation_installercheck_build_depsrO   rP   progress_barrQ   require_hashesrR   
lazy_wheelrT   legacy_resolverresume_retries)pathrM   features_enabledloggerwarninggetattrr   rX   rY   r   rZ   r[   r\   r_   )clsrN   r#   rO   rP   rQ   rR   rS   rT   temp_build_dir_pathr^   resolver_variantr]   rU   rV   r*   r*   r+   make_requirement_preparero   sR    


z,RequirementCommand.make_requirement_preparerFTto-satisfy-onlyzWheelCache | Noneztuple[int, ...] | Noner   )preparerrQ   r#   wheel_cacherR   ignore_installedignore_requires_pythonforce_reinstallupgrade_strategypy_version_infor$   c                 C  s   t t|jd}| |}|dkrRd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.
        )isolatedrK   r   N)rj   rQ   rk   make_install_reqrR   ignore_dependenciesrl   rm   rn   ro   rp   )r   r   isolated_moderM   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionrK   resolverResolverrs   (pip._internal.resolution.legacy.resolverrJ   )re   rj   rQ   r#   rk   rR   rl   rm   rn   ro   rp   rr   rg   pipr*   r*   r+   make_resolver   sD    
z RequirementCommand.make_resolverr7   zlist[InstallRequirement])r:   r#   rQ   rP   r$   c              
   C  s  g }t |sJ|jD ]6}t|d|||dD ]}t||jdd}|| q(q|D ]*}	t|	d|jdt|ddd}|| qN|jrt	|jD ]}	t
|	|jdd}|| q|jD ](}	t|	d|jt|ddd}|| q|jD ]J}t||||d	D ]4}t||jd|jr|jdndd
}|| qqtdd |D rFd|_|s|js|js|jsd| ji}
|jrt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)
constraintrQ   r#   rP   F)rq   user_suppliedNconfig_settings)
comes_fromrq   r~   r   )r~   rq   r   )rQ   r#   rP   )rq   r~   r   c                 s  s   | ]}|j V  qd S r;   )has_hash_options).0reqr*   r*   r+   	<genexpr>5      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}"))r,   constraintsr   r   rt   appendr   rd   rF   r   r   	editablesr   requirementsr#   r(   anyr\   r   
find_linksr   formatdictjoin)r9   r:   r#   rQ   rP   r   filename
parsed_req
req_to_addr   optsr*   r*   r+   get_requirements   s    









z#RequirementCommand.get_requirements)rQ   r$   c                 C  s    | j }| }|rt| dS )zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrb   info)rQ   r   	locationsr*   r*   r+   trace_basic_infoN  s    z#RequirementCommand.trace_basic_infozTargetPython | Nonezbool | None)r#   rP   target_pythonrm   r$   c                 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.
        r)   T)allow_yankedformat_controlallow_all_prereleasesprefer_binaryrm   )link_collectorselection_prefsr   )r   creater   r   prer   r   )r9   r#   rP   r   rm   r   r   r*   r*   r+   _build_package_finderY  s    z(RequirementCommand._build_package_finder)Nr   )NFTFFri   N)NN)__name__
__module____qualname__rC   staticmethodrM   classmethodrh   r|   r   r   r   __classcell__r*   r*   rG   r+   r.   `   s,   	  "B       &8c  )C__doc__
__future__r   loggingr&   	functoolsr   optparser   typingr   r   r   pip._internal.build_envr   pip._internal.cacher	   pip._internal.clir
   Zpip._internal.cli.index_commandr   r   pip._internal.exceptionsr   r   pip._internal.index.collectorr   "pip._internal.index.package_finderr   $pip._internal.models.selection_prefsr   "pip._internal.models.target_pythonr   pip._internal.network.sessionr   Z,pip._internal.operations.build.build_trackerr    pip._internal.operations.preparer   pip._internal.req.constructorsr   r   r   r   Z&pip._internal.req.req_dependency_groupr   Zpip._internal.req.req_filer   Zpip._internal.req.req_installr   pip._internal.resolution.baser   pip._internal.utils.temp_dirr   r   r    	getLoggerr   rb   r,   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr3   r-   r@   r.   r*   r*   r*   r+   <module>   sD   
