o
    !7h2                     @   sl  d 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" 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l0m1Z1m2Z2m3Z3 e4e5Z6e3j7e3j8e3j9gZ:dedef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.
    N)partial)Values)AnyListOptionalTuple)
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_kindsfuncreturnc              	      s>   dt ddfdd dtdtdtt dtt f fd	d
}|S )zNDecorator for common logic related to managing temporary
    directories.
    registryr!   Nc                 S   s   t D ]}| |d qd S )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)r"   t r&   r/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/pip/_internal/cli/req_command.pyconfigure_tempdir_registry8   s   z0with_cleanup.<locals>.configure_tempdir_registryselfoptionsargsc                    sH   | j d usJ |jr | j  z| ||W S  ty#    | j   w N)tempdir_registryno_cleanr   )r)   r*   r+   r(   r    r&   r'   wrapper<   s   

zwith_cleanup.<locals>.wrapper)r   RequirementCommandr   r   r   r   int)r    r0   r&   r/   r'   with_cleanup3   s   r3   c                       sH  e Zd Zdededdf fddZededefdd	Ze			
d)de
dedededededee dedefddZe									d*dedededee dedededededee deeedf  defd d!Zdee dedededee f
d"d#Zededdfd$d%Z		d+deded&ee dee def
d'd(Z  ZS ),r1   r+   kwr!   Nc                    s6   t  j|i | | jt  | jt  d S r,   )super__init__cmd_opts
add_optionr	   dependency_groupsr.   )r)   r+   r4   	__class__r&   r'   r6   P   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.zlegacy-resolverlegacy
resolvelib)deprecated_features_enabledr*   r&   r&   r'   determine_resolver_variantV   s   
z-RequirementCommand.determine_resolver_variantr   temp_build_dirbuild_trackersessionfinderuse_user_sitedownload_dir	verbosityc	                 C   s   |j }	|	dus	J d}
| |}|dkr!d|jv }|r td nd}
d}d|jv r/td t|	|j||j|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_dirrF   build_isolationcheck_build_depsrB   rC   progress_barrD   require_hashesrE   
lazy_wheelrG   legacy_resolverresume_retries)pathr@   features_enabledloggerwarningr   rI   rJ   rK   rL   rM   rP   )clsrA   r*   rB   rC   rD   rE   rF   rG   temp_build_dir_pathrO   resolver_variantrN   r&   r&   r'   make_requirement_preparer^   sD   


z,RequirementCommand.make_requirement_preparerFTto-satisfy-onlypreparerwheel_cacheignore_installedignore_requires_pythonforce_reinstallupgrade_strategy
use_pep517py_version_info.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`   r=   r   N)rZ   rD   r[   make_install_reqrE   ignore_dependenciesr\   r]   r^   r_   ra   )r   r   isolated_moder@   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionr=   resolverResolverrd   (pip._internal.resolution.legacy.resolverr<   )rU   rZ   rD   r*   r[   rE   r\   r]   r^   r_   r`   ra   rc   rW   pipr&   r&   r'   make_resolver   sF   
z RequirementCommand.make_resolverc                 C   s  g }|j D ]}t|d|||dD ]}t||jdd}|| qq|D ]}	t|	d|j|jdt|ddd}|| q#|jrUt	|jD ]}	t
|	|j|jdd}|| qC|jD ]}	t|	d|j|jt|ddd	}|| qX|jD ]&}t||||d
D ]}t||j|jd|jr|jdndd}|| q|qrtdd |D rd|_|s|js|js|jsd| ji}
|jrtdjdi t|
d|jdtdjdi |
|S )zS
        Parse command-line arguments into the corresponding requirements.
        T)
constraintrD   r*   rC   F)rb   user_suppliedNconfig_settings)
comes_fromrb   r`   ro   rp   )rb   r`   ro   )ro   rb   r`   rp   )rD   r*   rC   )rb   r`   ro   rp   c                 s   s    | ]}|j V  qd S r,   )has_hash_options).0reqr&   r&   r'   	<genexpr>  s    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   re   appendr   r`   getattrr9   r   r   	editablesr   requirementsr*   getanyrM   rv   
find_linksr   formatdictjoin)r)   r+   r*   rD   rC   r}   filename
parsed_req
req_to_addrt   optsr&   r&   r'   get_requirements   s   








z#RequirementCommand.get_requirementsc                 C   s$   | j }| }|rt| dS dS )zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrS   info)rD   r   	locationsr&   r&   r'   trace_basic_info6  s
   z#RequirementCommand.trace_basic_infotarget_pythonc                 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*   rC   r   r]   r   r   r&   r&   r'   _build_package_finderA  s   z(RequirementCommand._build_package_finder)Nr   )NFTFFrY   NN)NN)__name__
__module____qualname__r   r6   staticmethodr   strr@   classmethodr   r   r   r   boolr   r2   r   rX   r   r   r   rm   r   r   r   r   r   r   __classcell__r&   r&   r:   r'   r1   O   s    		
7	
:
er1   )=__doc__logging	functoolsr   optparser   typingr   r   r   r   pip._internal.cacher   pip._internal.clir	   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   ,pip._internal.operations.build.build_trackerr    pip._internal.operations.preparer   pip._internal.req.constructorsr   r   r   r   &pip._internal.req.req_dependency_groupr   pip._internal.req.req_filer   pip._internal.req.req_installr   pip._internal.resolution.baser   pip._internal.utils.temp_dirr   r   r   	getLoggerr   rS   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr#   r3   r1   r&   r&   r&   r'   <module>   s<    
