a
    sh3                     @  sv  d Z ddlm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 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l-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4 e5e6Z7e4j8e4j9e4j:gZ;dddddZ<G dd deZ=d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)#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   )funcreturnc                   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)r"   t r&   Y/var/www/html/assistant/venv/lib/python3.9/site-packages/pip/_internal/cli/req_command.pyconfigure_tempdir_registry;   s    z0with_cleanup.<locals>.configure_tempdir_registryRequirementCommandr   z	list[Any]z
int | None)selfoptions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   )r*   r+   r,   r(   r   r&   r'   wrapper?   s    

zwith_cleanup.<locals>.wrapperr&   )r   r1   r&   r0   r'   with_cleanup6   s    r2   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 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   r!   )r,   kwr    c                   s6   t  j|i | | jt  | jt  d S r-   )super__init__cmd_opts
add_optionr   dependency_groupsr/   )r*   r,   r3   	__class__r&   r'   r5   S   s    zRequirementCommand.__init__r   str)r+   r    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_enabledr+   r&   r&   r'   determine_resolver_variantY   s    
z-RequirementCommand.determine_resolver_variantNr   r   r   r   r   boolz
str | Noneintr   )	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|	|j||jt||j	|||j
||j||||
|jdS )	zQ
        Create a RequirementPreparer instance for the given parameters.
        NFr=   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_dirsrc_dirrH   build_isolationZbuild_isolation_installercheck_build_depsrD   rE   progress_barrF   require_hashesrG   
lazy_wheelrI   legacy_resolverresume_retries)pathr@   features_enabledloggerwarningr   rK   rL   r   rM   rN   rO   rR   )clsrC   r+   rD   rE   rF   rG   rH   rI   temp_build_dir_pathrQ   resolver_variantrP   r&   r&   r'   make_requirement_preparera   sD    


z,RequirementCommand.make_requirement_preparerFTto-satisfy-onlyzWheelCache | Nonezbool | Noneztuple[int, ...] | Noner   )preparerrF   r+   wheel_cacherG   ignore_installedignore_requires_pythonforce_reinstallupgrade_strategy
use_pep517py_version_infor    c                 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.
        )isolatedrb   r=   r   N)r\   rF   r]   make_install_reqrG   ignore_dependenciesr^   r_   r`   ra   rc   )r   r   isolated_moder@   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionr=   resolverResolverrf   (pip._internal.resolution.legacy.resolverr<   )rW   r\   rF   r+   r]   rG   r^   r_   r`   ra   rb   rc   re   rY   pipr&   r&   r'   make_resolver   sF    
z RequirementCommand.make_resolverz	list[str]zlist[InstallRequirement])r,   r+   rF   rE   r    c                 C  s  g }|j D ]6}t|d|||dD ]}t||jdd}|| q q
|D ].}	t|	d|j|jdt|ddd}|| qF|jrt	|jD ]"}	t
|	|j|jdd}|| q|jD ],}	t|	d|j|jt|ddd	}|| q|jD ]N}t||||d
D ]8}t||j|jd|jr|jdndd}|| qqtdd |D rNd|_|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)
constraintrF   r+   rE   F)rd   user_suppliedNconfig_settings)
comes_fromrd   rb   rq   rr   )rd   rb   rq   )rq   rd   rb   rr   )rF   r+   rE   )rd   rb   rq   rr   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   rg   appendr   rb   getattrr8   r   r   	editablesr   requirementsr+   getanyrO   ry   
find_linksr   formatdictjoin)r*   r,   r+   rF   rE   r   filename
parsed_req
req_to_addrv   optsr&   r&   r'   get_requirements   s    








z#RequirementCommand.get_requirements)rF   r    c                 C  s    | j }| }|rt| dS )zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrU   info)rF   r   	locationsr&   r&   r'   trace_basic_info:  s    z#RequirementCommand.trace_basic_infozTargetPython | None)r+   rE   target_pythonr_   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_binaryr_   )link_collectorselection_prefsr   )r   creater   r   prer   r   )r*   r+   rE   r   r_   r   r   r&   r&   r'   _build_package_finderE  s    z(RequirementCommand._build_package_finder)Nr   )NFTFFr[   NN)NN)__name__
__module____qualname__r5   staticmethodr@   classmethodrZ   ro   r   r   r   __classcell__r&   r&   r9   r'   r)   R   s.   	  "8        (:e  r)   )>__doc__
__future__r   logging	functoolsr   optparser   typingr   pip._internal.build_envr   pip._internal.cacher   Z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   rU   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr#   r2   r)   r&   r&   r&   r'   <module>   s>   
