
    Kui\                        d dl mZ d dlZd dlZd dlZd dlZd dl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 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" 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-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4  ejj                  d      Z6 ejn                  e8      Z9d dZ: G d d      Z;e G d d             Z<d!dZ=	 	 	 	 	 	 d"dZ>	 	 	 	 	 	 	 	 	 	 d#dZ?d$dZ@y)%    )annotationsN)	dataclass)Callable)Version)parse)Group)escape)Text)LinkCollector)PackageFinder)get_default_environment)ReleaseControl)SelectionPreferences)
PipSession)WINDOWS)parse_iso_datetime) get_best_invocation_for_this_pip#get_best_invocation_for_this_python)adjacent_tmp_filecheck_path_ownercopy_directory_permissionsreplace)ExternallyManagedEnvironmentcheck_externally_managed
ensure_dir   )daysc                l    | j                         }t        j                  |      j                         }|S N)encodehashlibsha224	hexdigest)key	key_bytesnames      k/root/.openclaw/workspace/chatterbox_venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py_get_statefile_namer(   1   s)    

I>>)$..0DK    c                  6    e Zd ZddZedd       ZddZd	dZy)
SelfCheckStatec                Z   i | _         d | _        |rut        j                  j	                  |dt        | j                              | _        	 t        | j                  d      5 }t        j                  |      | _         d d d        y y # 1 sw Y   y xY w# t        t        t        f$ r Y y w xY w)N	selfcheckzutf-8)encoding)_state_statefile_pathospathjoinr(   r$   openjsonloadOSError
ValueErrorKeyError)self	cache_dir	statefiles      r'   __init__zSelfCheckState.__init__8   s    &(# #%77<<;(;DHH(E$D $..A 7Y"&))I"6DK7 7 
7 7Z2  s0   B "B=B BB B B*)B*c                "    t         j                  S r   )sysprefix)r:   s    r'   r$   zSelfCheckState.keyI   s    zzr)   c                    | j                   syd| j                   vryd| j                   vryt        | j                   d         }||z
  }|t        kD  ry| j                   d   S )z7Check if we have a not-outdated version loaded already.N
last_checkpypi_version)r/   r   _WEEK)r:   current_timerB   time_since_last_checks       r'   getzSelfCheckState.getM   sd    {{t{{*, (L(AB
 ,z 9 5({{>**r)   c                   | j                   sy t        j                  j                  | j                         }t	        |      sy t        |       | j                  |j                         |d}t        j                  |dd      }t        | j                         5 }|j                  |j                                t        ||       d d d        	 t        j                  | j                          y # 1 sw Y   +xY w# t         $ r Y y w xY w)N)r$   rB   rC   T),:)	sort_keys
separators)r0   r1   r2   dirnamer   r   r$   	isoformatr5   dumpsr   writer    r   r   r&   r7   )r:   rC   rE   statefile_directorystatetextfs          r'   setzSelfCheckState.set`   s    ## ggood.B.BC   34 	&'
 88&002(
 zz%4JGt334 	?GGDKKM"&':A>	?	 AFFD001	? 	?  		s   ,C/ C; /C8;	DDN)r;   strreturnNone)rW   rV   )rE   datetime.datetimerW   
str | None)rC   rV   rE   rY   rW   rX   )__name__
__module____qualname__r=   propertyr$   rG   rU    r)   r'   r+   r+   7   s%    "  +&#r)   r+   c                  *    e Zd ZU ded<   ded<   ddZy)UpgradePromptrV   oldnewc                   t         rt                d}n
t               }d}t        t	               t	        j
                  | d| j                   d| j                   d      t	        j
                  | dt        |       d            S )Nz -m pipz/[bold][[reset][blue]notice[reset][bold]][reset]z) A new release of pip is available: [red]z[reset] -> [green]z[reset]z To update, run: [green]z install --upgrade pip)	r   r   r   r   r
   from_markuprb   rc   r	   )r:   pip_cmdnotices      r'   __rich__zUpgradePrompt.__rich__   s    <>?wGG68GBF( z!3DHH:WF (  /**@B

 
	
r)   N)rW   r   )r[   r\   r]   __annotations__rh   r_   r)   r'   ra   ra      s    	H	H
r)   ra   c                ^    t               j                  |       }|duxr d|j                  k(  S )zChecks whether pkg was installed by pip

    This is used not to display the upgrade message when pip is in fact
    installed by system package manager, such as dnf on Fedora.
    Npip)r   get_distribution	installer)pkgdists     r'   was_installed_by_piprp      s0     #$55c:Dt7 77r)   c                    t        j                  | |d      }t        dt        dh            }t	        j                  ||      }|j                  d      j                  }|y t        |j                        S )NT)optionssuppress_no_indexFrk   )
only_final)allow_yankedrelease_control)link_collectorselection_prefs)	r   creater   r   r   find_best_candidatebest_candidaterV   version)sessionrr   rw   rx   finderr{   s         r'   _get_current_remote_pip_versionr      s     #))N +&5':O
 !!%'F //6EEN~%%&&r)   c                   | j                  |      }|1 |       }|t        j                  d       y | j                  ||       t	        |      }t        j                  d|       t        j                  d|       t        d      }t        j                  d|       |sy ||k  xr |j                  |j                  k7  }|rt        t        |      |      S y )NzNo remote pip version foundzRemote version of pip: %szLocal version of pip:  %srk   zWas pip installed by pip? %s)rb   rc   )	rG   loggerdebugrU   parse_versionrp   base_versionra   rV   )rR   rE   local_versionget_remote_versionremote_version_strremote_versionpip_installed_by_piplocal_version_is_olders           r'   _self_version_check_logicr      s     <0!/1%LL67		$l3"#56N
LL,n=
LL,m</6
LL/1EF 	& 	F&&.*E*EE  ]!39KLLr)   c           
        t               j                  d      }|sy	 t                t	        t        |j                        t        j                  j                  t        j                  j                        |j                  t        j                  t        | |            }|t        j!                  d|ddi       yy# t        $ r Y yw xY w)	zCheck for an update for pip.

    Limit the frequency of checks to once per week. State is stored either in
    the active virtualenv or in the user's USER_CACHE_DIR keyed off the prefix
    of the pip script path.
    rk   N)r;   )rR   rE   r   r   z%srichT)extra)r   rl   r   r   r   r+   r;   datetimenowtimezoneutcr|   	functoolspartialr   r   warning)r}   rr   installed_distupgrade_prompts       r'   pip_self_version_checkr      s     -.??FN " /w'8'89&&**8+<+<+@+@A$,,$,,+Wg
	N !t^FD>B " ( s   
C 	CC)r$   rV   rW   rV   )rn   rV   rW   bool)r}   r   rr   optparse.ValuesrW   rZ   )
rR   r+   rE   rY   r   r   r   zCallable[[], str | None]rW   zUpgradePrompt | None)r}   r   rr   r   rW   rX   )A
__future__r   r   r   r!   r5   loggingoptparseos.pathr1   r?   dataclassesr   typingr   pip._vendor.packaging.versionr   r   r   pip._vendor.rich.consoler   pip._vendor.rich.markupr	   pip._vendor.rich.textr
   pip._internal.index.collectorr   "pip._internal.index.package_finderr   pip._internal.metadatar   $pip._internal.models.release_controlr   $pip._internal.models.selection_prefsr   pip._internal.network.sessionr   pip._internal.utils.compatr   pip._internal.utils.datetimer   pip._internal.utils.entrypointsr   r   pip._internal.utils.filesystemr   r   r   r   pip._internal.utils.miscr   r   r   	timedeltarD   	getLoggerr[   r   r(   r+   ra   rp   r   r   r   r_   r)   r'   <module>r      s   "        
 !  1 @ * * & 7 < : ? E 4 . ;   	"			8	$L L^ 
 
 
08''"1''8 $ 	
 1 DCr)   