o
    ~#gH                     @   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 ZDd!e	de	f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                	       sz   e Zd ZdZd fddZededeee	  fddZ
dedefd	d
Z		ddedee dee defddZ  ZS )SessionCommandMixinzE
    A class mixin for command classes needing _build_session().
    returnNc                    s   t    d | _d S N)super__init___session)self	__class__ /var/www/static.ux5.de/https/Moving-Object-Detection-with-OpenCV/env/lib/python3.10/site-packages/pip/_internal/cli/req_command.pyr&   6   s   

zSessionCommandMixin.__init__optionsc                 C   sL   g }t |ddst |dd}|r|| t |dd}|r"|| |p%d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retriestimeoutc                 C   s   |j rtj|j sJ t|j rtj|j dnd |d ur|n|j|j| |d}|j	r1|j	|_
|jr8|j|_	|js=|rG|d urC|n|j|_|jrR|j|jd|_|j |j_|S )Nhttp)cacher<   trusted_hostsr5   )r>   https)	cache_dirospathisabsr   joinr<   r@   r8   certverifyclient_certr=   proxyproxiesno_inputauth	prompting)r(   r-   r<   r=   sessionr+   r+   r,   r:   R   s&   

z"SessionCommandMixin._build_sessionr#   NNN)__name__
__module____qualname____doc__r&   classmethodr   r   r   strr8   r   r;   intr:   __classcell__r+   r+   r)   r,   r"   0   s"    r"   c                   @   s"   e Zd ZdZdeddf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.
    r-   r#   Nc                 C   sj   t |dsJ |js|jrdS | j|dtd|jd}| t|| W d   dS 1 s.w   Y  dS )z
        Do the pip version check if not disabled.

        This overrides the default behavior of not doing the check.
        r.   Nr      )r<   r=   )hasattrdisable_pip_version_checkr.   r:   minr=   r   )r(   r-   rO   r+   r+   r,   handle_pip_version_check   s   "z*IndexGroupCommand.handle_pip_version_check)rR   rS   rT   rU   r   r_   r+   r+   r+   r,   rZ   {   s    rZ   r#   c                   C   sN   t  rdS ttdsdS tjdkstjdkrdS t dkr dS td dS )zOutput 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   zRunning 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\   rC   sysplatformr`   loggerwarningr+   r+   r+   r,   warn_if_run_as_root   s   
rg   funcc              	      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)ri   tr+   r+   r,   configure_tempdir_registry   s   z0with_cleanup.<locals>.configure_tempdir_registryr(   r-   argsc                    sH   | j d usJ |jr | j  z| ||W S  ty#    | j   w r$   )tempdir_registryno_cleanr   )r(   r-   rn   rm   rh   r+   r,   wrapper   s   

zwith_cleanup.<locals>.wrapper)r   RequirementCommandr   r   r   r   rX   )rh   rr   r+   rq   r,   with_cleanup   s   rt   c                       s^  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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 ).rs   rn   kwr#   Nc                    s&   t  j|i | | jt  d S r$   )r%   r&   cmd_opts
add_optionr	   rp   )r(   rn   ru   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-failuresFrx   z&Cannot backtrack with legacy resolver.zBacktracking 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.Nzavoiding 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)r{   r   r   r|   r+   r+   r,   #determine_build_failure_suppression   s   

z6RequirementCommand.determine_build_failure_suppressionr   temp_build_dirreq_trackerrO   finderuse_user_sitedownload_dir	verbosityc	                 C   s   |j }	|	dus	J | |}
|
dkrd|jv }|rtd nd}d|jv r+td d|jv}d|jv r<td	d
dd d|jv rHtdddd |jdvrTtdddd t|	|j	||j
|||j||j||||dS )zQ
        Create a RequirementPreparer instance for the given parameters.
        Nrz   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.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.)	build_dirsrc_dirr   build_isolationr   rO   progress_barr   require_hashesr   
lazy_wheelr   in_tree_build)rD   r}   features_enabledre   rf   r{   r   r   r   r   r   r   )r4   r   r-   r   rO   r   r   r   r   temp_build_dir_pathresolver_variantr   r   r+   r+   r,   make_requirement_preparer   sb   






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r0d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   rz   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}   ,pip._internal.resolution.resolvelib.resolver	_internal
resolution
resolvelibresolverResolverr   (pip._internal.resolution.legacy.resolverry   )r4   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   pipr+   r+   r,   make_resolverH  sJ   

z RequirementCommand.make_resolverc              	   C   sJ  g }|j D ]}t|d|||dD ]}t||jdd}|| qq|D ]}	t|	d|j|jdd}|| q#|jD ]}	t|	d|j|jd}|| q9|j	D ]}t||||dD ]}t||j|jdd}|| qXqNt
d	d
 |D rwd|_|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)
constraintr   r-   rO   F)r   user_suppliedN)r   r   r   )r   r   r   )r   r-   rO   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   r   r2   r   r   	editablesr   requirementsanyr   r   
find_linksr   formatdictrF   )r(   rn   r-   r   rO   r   filename
parsed_req
req_to_addr   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_locationsre   info)r   r   	locationsr+   r+   r,   trace_basic_info  s
   z#RequirementCommand.trace_basic_infotarget_pythonc                 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)allow_yankedformat_controlallow_all_prereleasesprefer_binaryr   html5lib)link_collectorselection_prefsr   use_deprecated_html5lib)r   creater   r   prer   r   r{   )r(   r-   rO   r   r   r   r   r+   r+   r,   _build_package_finder  s   z(RequirementCommand._build_package_finder)Nr   )NFTFFr   NNrQ   )rR   rS   rT   r   r&   staticmethodr   rW   r}   boolr   rV   r   r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   rY   r+   r+   r)   r,   rs      s    		
H	
<
Ors   rP   )GrU   loggingrC   rc   	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   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.preparer   pip._internal.req.constructorsr   r   r   r   pip._internal.req.req_filer   pip._internal.req.req_installr   pip._internal.req.req_trackerr   pip._internal.resolution.baser   !pip._internal.self_outdated_checkr   pip._internal.utils.deprecationr   pip._internal.utils.temp_dirr   r   r    pip._internal.utils.virtualenvr!   	getLoggerrR   re   r"   rZ   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDrj   rg   rt   rs   r+   r+   r+   r,   <module>   sJ    
K
