
    )h2                        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jh                  e5      Z6e3jn                  e3jp                  e3jr                  gZ:dedefdZ; G d de      Z<y)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           	      |     dt         ddfddt        dt        dt        t           dt
        t           f fd}|S )	zNDecorator for common logic related to managing temporary
    directories.
    registryr"   Nc                 >    t         D ]  }| j                  |d        y )NF)KEEPABLE_TEMPDIR_TYPES
set_delete)r$   ts     P/var/www/html/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.pyconfigure_tempdir_registryz0with_cleanup.<locals>.configure_tempdir_registry8   s!    ' 	*A5)	*    selfoptionsargsc                     | j                   J |j                  r | j                          	  | ||      S # t        $ r  | j                           w xY wN)tempdir_registryno_cleanr   )r,   r-   r.   r*   r!   s      r)   wrapperzwith_cleanup.<locals>.wrapper<   sd     $$000&t'<'<=	gt,,$ 	 't'<'<=	s	   	9 A)r   RequirementCommandr   r   r   r   int)r!   r3   r*   s   ` @r)   with_cleanupr6   3   sK    
*-F *4 * +19=c	#  Nr+   c                   h    e Zd Zdededdf fdZededef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       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       Zdee   deded
edee   f
dZededdfd       Z	 	 d ded
edee   dee   def
dZ xZS )!r4   r.   kwr"   Nc                     t        |   |i | | j                  j                  t	        j
                                | j                  j                  t	        j                                y r0   )super__init__cmd_opts
add_optionr
   dependency_groupsr2   )r,   r.   r8   	__class__s      r)   r;   zRequirementCommand.__init__P   sK    $%"%  !=!=!?@  !4!4!67r+   r-   c                 "    d| j                   v ryy)zEDetermines which resolver should be used, based on the given options.zlegacy-resolverlegacy
resolvelib)deprecated_features_enabledr-   s    r)   determine_resolver_variantz-RequirementCommand.determine_resolver_variantV   s      C CCr+   temp_build_dirbuild_trackersessionfinderuse_user_sitedownload_dir	verbosityc	                    |j                   }	|	J d}
| j                  |      }|dk(  r&d|j                  v }|r=t        j	                  d       n'd}
d}d|j                  v rt        j	                  d       t        |	|j                  ||j                  |j                  |||j                  ||j                  ||||
|j                        S )zQ
        Create a RequirementPreparer instance for the given parameters.
        FrB   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_dirrK   build_isolationcheck_build_depsrG   rH   progress_barrI   require_hashesrJ   
lazy_wheelrL   legacy_resolverresume_retries)pathrE   features_enabledloggerwarningr   rO   rP   rQ   rR   rS   rV   )clsrF   r-   rG   rH   rI   rJ   rK   rL   temp_build_dir_pathrU   resolver_variantrT   s                r)   make_requirement_preparerz,RequirementCommand.make_requirement_preparer^   s     -11"...99'B|+$(@(@@J" #OJg666Q #)OO%#33$55' --"11'!+"11
 	
r+   preparerwheel_cacheignore_installedignore_requires_pythonforce_reinstallupgrade_strategy
use_pep517py_version_info.c                    t        t        |j                  |
      }| j                  |      }|dk(  rRddl}|j
                  j                  j                  j                  j                  ||||||j                  ||||	|      S ddl}|j
                  j                  j                  j                  j                  ||||||j                  ||||	|      S )zF
        Create a Resolver instance for the given parameters.
        )isolatedre   rB   r   N)r_   rI   r`   make_install_reqrJ   ignore_dependenciesra   rb   rc   rd   rf   )r   r   isolated_moderE   ,pip._internal.resolution.resolvelib.resolver	_internal
resolutionrB   resolverResolverrj   (pip._internal.resolution.legacy.resolverrA   )r[   r_   rI   r-   r`   rJ   ra   rb   rc   rd   re   rf   ri   r]   pips                  r)   make_resolverz RequirementCommand.make_resolver   s    $ #'**!

 99'B |+?==++66??HH!'!1+$+$?$?!1'= /!1 / I   	8}}''..77@@#-' ' ; ;-#9+-+ A 
 	
r+   c                    g }|j                   D ]@  }t        |d|||      D ]+  }t        ||j                  d      }|j	                  |       - B |D ]C  }	t        |	d|j                  |j                  dt        |dd            }|j	                  |       E |j                  rNt        |j                        D ]6  }	t        |	|j                  |j                  d      }|j	                  |       8 |j                  D ]B  }	t        |	d|j                  |j                  t        |dd      	      }|j	                  |       D |j                  D ]r  }t        ||||
      D ]^  }t        ||j                  |j                  d|j                  r|j                  j                  d      nd      }|j	                  |       ` t t!        d |D              rd|_        |s|j                  s|j                  s|j                  std| j$                  i}
|j&                  r?t)         dj*                  di t-        |
dj/                  |j&                                    t)         dj*                  di |
      |S )zS
        Parse command-line arguments into the corresponding requirements.
        T)
constraintrI   r-   rH   F)rh   user_suppliedNconfig_settings)
comes_fromrh   re   rv   rw   )rh   re   rv   )rv   rh   re   rw   )rI   r-   rH   )rh   re   rv   rw   c              3   4   K   | ]  }|j                     y wr0   )has_hash_options).0reqs     r)   	<genexpr>z6RequirementCommand.get_requirements.<locals>.<genexpr>  s     <s##<s   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   rk   appendr   re   getattrr>   r   r   	editablesr   requirementsr-   getanyrS   r~   
find_linksr   formatdictjoin)r,   r.   r-   rI   rH   r   filename
parsed_req
req_to_addr|   optss              r)   get_requirementsz#RequirementCommand.get_requirements   s    24++ 	0H0 0
 A$22"'

 ##J/0	0  		,C. .."--" '1BD IJ 
+		, $$.w/H/HI 08$22&11"&	
 ##J/0 $$ 	,C2" .."-- '1BD IJ 
+	,  ,, 	0H0' 0
 A$22&11"& &-- #**../@A!

 ##J/0	0$ <|<<%)G"   ##((DII&D!!"E >>Dft388G4F4F+GH  #5 ..4f=7;= 
 r+   c                 l    | j                   }|j                         }|rt        j                  |       yy)zE
        Trace basic information about the provided objects.
        N)search_scopeget_formatted_locationsrY   info)rI   r   	locationss      r)   trace_basic_infoz#RequirementCommand.trace_basic_info6  s1     ** 88:	KK	" r+   target_pythonc                     t        j                  ||      }t        d|j                  |j                  |j
                  |      }t        j                  |||      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.
        rD   T)allow_yankedformat_controlallow_all_prereleasesprefer_binaryrb   )link_collectorselection_prefsr   )r   creater   r   prer   r   )r,   r-   rH   r   rb   r   r   s          r)   _build_package_finderz(RequirementCommand._build_package_finderA  s]     '--gwG."11")++!//#9
 ##)+'
 	
r+   )Nr   )NFTFFzto-satisfy-onlyNN)NN)__name__
__module____qualname__r   r;   staticmethodr   strrE   classmethodr   r   r   r   boolr   r5   r   r^   r	   r   r   rs   r   r   r   r   r   r   __classcell__)r?   s   @r)   r4   r4   O   s!   8c 8 8 8 F s    '+5
%5
 5
 $	5

 5
 5
 5
 sm5
 5
 
5
 5
n  -1#!%', % 1%)598
%8
 8
 	8

 j)8
 8
 8
 !%8
 8
 8
 TN8
 "%S/28
 
8
 8
tc3ic c 	c
 c 
 	!cJ # #4 # # 1515

 
  -	

 !)
 

r+   r4   )=__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   rY   	BUILD_ENVEPHEM_WHEEL_CACHE	REQ_BUILDr&   r6   r4   r   r+   r)   <module>r      s       - - * ( = V H 7 < E ; 4 E @  K 9 < 6  
		8	$ ## s s 8L
* L
r+   