o
    ib@                     @  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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 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/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z?m@Z@mAZA eBeCZDd4d!d"ZEeAjFeAjGeAjHgZIed#d$d%ZJd5d(d)ZKd6d1d2ZLG d3d$ d$eZMdS )7zContains 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)BuildEnvironmentInstaller"InprocessBuildEnvironmentInstaller#SubprocessBuildEnvironmentInstaller)
WheelCache)
cmdoptions)make_target_python)IndexGroupCommand)SessionCommandMixin)CommandErrorPreviousBuildDirErrorUnsupportedPythonVersion)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)PEP723Exceptionpep723_metadata)parse_dependency_groups)parse_requirements)InstallRequirement)BaseResolver)check_requires_python)TempDirectoryTempDirectoryTypeRegistrytempdir_kindsoptionsr   returnboolc                 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.
     _PIP_IN_BUILD_IGNORE_CONSTRAINTS1)osenvirongetr(    r1   Z/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/pip/_internal/cli/req_command.py!should_ignore_regular_constraints;   s   r3   	_CommandTRequirementCommand)boundfunc-Callable[[_CommandT, Values, list[str]], int]c                   s   ddd d fdd}|S )zNDecorator for common logic related to managing temporary
    directories.
    registryr&   r)   Nonec                 S  s   t D ]}| |d qd S )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)r9   tr1   r1   r2   configure_tempdir_registryV   s   z0with_cleanup.<locals>.configure_tempdir_registryselfr4   r(   r   args	list[str]intc                   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>   r7   r1   r2   wrapperZ   s   

zwith_cleanup.<locals>.wrapperN)r9   r&   r)   r:   )r?   r4   r(   r   r@   rA   r)   rB   r1   )r7   rG   r1   rF   r2   with_cleanupO   s   
rH   constraint_filesrA   finderr   sessionr   list[InstallRequirement]c                 C  sD   g }| D ]}t |d|||dD ]}t||jdd}|| qq|S )NT)
constraintrJ   r(   rK   Fisolateduser_supplied)r!   r   isolated_modeappend)rI   rJ   r(   rK   requirementsfilename
parsed_req
req_to_addr1   r1   r2   parse_constraint_filesk   s"   
rW   c                      s   e Zd Zd: fddZed;ddZe		d<d=ddZe		 	!	 	 	"	d>d?d-d.Zd@d1d2Z	edAd3d4Z
		dBdCd8d9Z  ZS )Dr5   r@   r   kwr)   r:   c                   s6   t  j|i | | jt  | jt  d S rC   )super__init__cmd_opts
add_optionr   dependency_groupsrE   )r?   r@   rX   	__class__r1   r2   rZ      s   zRequirementCommand.__init__r(   r   strc                 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_enabledr0   r1   r1   r2   determine_resolver_variant   s   
z-RequirementCommand.determine_resolver_variantNr   temp_build_dirr%   build_trackerr   rK   r   rJ   r   use_user_siter*   download_dir
str | None	verbosityrB   r   c	                 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|dg }d	|jv }d
|jv rSt||||}t||||t|j	d}nt
|||d}t|	|j||j||j|||j||j||||
dS )zQ
        Create a RequirementPreparer instance for the given parameters.
        NFrb   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-constraintzinprocess-build-deps)rJ   rf   rk   rj   wheel_cache)rk    build_constraint_feature_enabled)	build_dirsrc_dirrh   build_isolationbuild_isolation_installercheck_build_depsrf   rK   progress_barrJ   require_hashesrg   
lazy_wheelrj   legacy_resolver)pathrd   features_enabledloggerwarninggetattrrW   r	   r   	cache_dirr
   r   ro   rp   rr   rs   rt   )clsre   r(   rf   rK   rJ   rg   rh   rj   temp_build_dir_pathrv   resolver_variantru   rk   rm   build_constraint_reqsenv_installerr1   r1   r2   make_requirement_preparer   sj   



z,RequirementCommand.make_requirement_preparerFTto-satisfy-onlypreparerrl   WheelCache | Noneignore_installedignore_requires_pythonforce_reinstallupgrade_strategypy_version_infotuple[int, ...] | Noner#   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.
        )rO   rb   r   N)r   rJ   rl   make_install_reqrg   ignore_dependenciesr   r   r   r   r   )r   r   rQ   rd   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionrb   resolverResolverr   (pip._internal.resolution.legacy.resolverra   )r}   r   rJ   r(   rl   rg   r   r   r   r   r   r   r   pipr1   r1   r2   make_resolver   sD   
z RequirementCommand.make_resolverrA   rL   c              
   C  sf  g }t |st|j|||}|| |D ]}| sqt|d|jdt|ddd}|| q|j	rHt
|j	D ]}t||jdd}|| q8|jD ]}t|d|jt|ddd}|| qK|jD ]$}	t|	|||dD ]}
t|
|jd|
jr}|
jdndd}|| qmqc|jrt|jd	krtd
|jd }zt|}W n ty } zt|jd}~ww |dd}|r|jst|}t||jdstd|d|j d||dg D ]}t||jdd}|| qtdd |D rd|_ |s1|js1|js1|j	s1|js1d| j!i}|j"r'tdj#di t$|d%|j"dtdj#di ||S )zS
        Parse command-line arguments into the corresponding requirements.
        NTconfig_settings)
comes_fromrO   rP   r   rN   )rP   rO   r   )rJ   r(   rK   )rO   rP   r      z1--requirements-from-script can only be given oncer   zrequires-python )requires_pythonversion_infozScript z requires a different Python: z not in dependenciesc                 s  s    | ]}|j V  qd S rC   )has_hash_options).0reqr1   r1   r2   	<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}")r1   )&r3   rW   constraintsextendstripr   rQ   r{   rR   r]   r    r   	editablesr   rS   r!   r   r(   r/   requirements_from_scriptslenr   r   r   msgr   r   r$   r   r   
py_versionanyrt   r   
find_linksformatdictjoin)r?   r@   r(   rJ   rK   rS   r   r   rV   rT   rU   scriptscript_metadataexcscript_requires_pythontarget_pythonoptsr1   r1   r2   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_locationsry   info)rJ   r   	locationsr1   r1   r2   trace_basic_info  s
   z#RequirementCommand.trace_basic_infor   TargetPython | Nonebool | Nonec                 C  s:   t j||d}td|j|j|j|d}tj||||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.
        r0   T)allow_yankedformat_controlrelease_controlprefer_binaryr   )link_collectorselection_prefsr   uploaded_prior_to)r   creater   r   r   r   r   r   )r?   r(   rK   r   r   r   r   r1   r1   r2   _build_package_finder  s   z(RequirementCommand._build_package_finder)r@   r   rX   r   r)   r:   )r(   r   r)   r`   )Nr   )re   r%   r(   r   rf   r   rK   r   rJ   r   rg   r*   rh   ri   rj   rB   r)   r   )NFTFFr   N)r   r   rJ   r   r(   r   rl   r   rg   r*   r   r*   r   r*   r   r*   r   r`   r   r   r)   r#   )
r@   rA   r(   r   rJ   r   rK   r   r)   rL   )rJ   r   r)   r:   )NN)
r(   r   rK   r   r   r   r   r   r)   r   )__name__
__module____qualname__rZ   staticmethodrd   classmethodr   r   r   r   r   __classcell__r1   r1   r^   r2   r5      s.    	P
8|)r(   r   r)   r*   )r7   r8   r)   r8   )
rI   rA   rJ   r   r(   r   rK   r   r)   rL   )N__doc__
__future__r   loggingr-   	functoolsr   optparser   typingr   r   r   pip._internal.build_envr   r	   r
   pip._internal.cacher   pip._internal.clir   pip._internal.cli.cmdoptionsr   pip._internal.cli.index_commandr   r   pip._internal.exceptionsr   r   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.pep723r   r   &pip._internal.req.req_dependency_groupr    pip._internal.req.req_filer!   pip._internal.req.req_installr"   pip._internal.resolution.baser#   pip._internal.utils.packagingr$   pip._internal.utils.temp_dirr%   r&   r'   	getLoggerr   ry   r3   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr;   r4   rH   rW   r5   r1   r1   r1   r2   <module>   sN    



