
    .Ph<                       d Z 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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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#  ej$        e%          Z& e	d          Z' e	d          Z( e	d          Z) e	d          Z*d Z+d Z,d Z-dZ.d Z/d Z0 G d d          Z1 G d d          Z2d  Z3d! Z4d" Z5d# Z6d$ Z7i Z8d% Z9d& Z:d' Z;d( Z<g d)Z=dS )*z%Periodically update bundled versions.    )annotationsN)datetime	timedeltatimezone)groupby)Path)copy2)DEVNULLPopen)dedent)Thread)URLError)urlopen)AppDataDiskFolder)BUNDLE_SUPPORT)Wheel)CREATE_NO_WINDOW   )hours   )days   c                @   |rt          | ||||           t          j        t          j                  fd}t
                              | |          }	|t          |	j        d           D ]\  }
}t          |          }t          fd|D                       }|D ]Q}|(t          |j                  j        |j        k    r|c c S |                    |          r ||          c c S Rn'|	j        D ]}|j        j        |k    r ||          c S  |S )Ntzc                    t          j        | j        z            }t                              d|rdnd|           |S )Nzusing %supdated wheel %szperiodically  )r   housefilenameLOGGERdebug)verupdated_wheelapp_datas     f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/virtualenv/seed/wheels/periodic_update.py_update_wheelz&periodic_update.<locals>._update_wheel/   sA    hns|;<</M1YWY[hiii    c                *    | j         j        dd         S )Nr      )wheelversion_tuple)vs    r%   <lambda>z!periodic_update.<locals>.<lambda>6   s    ag>STUVWTW>X r'   )keyc              3  F   K   | ]}|                               |V  d S N)use).0versionnows     r%   	<genexpr>z"periodic_update.<locals>.<genexpr>9   s8      +c+cRYR]R]^aRbRb+cG+c+c+c+c+c+cr'   )handle_auto_updater   r4   r   utc	UpdateLogfrom_app_datar   versionslistanyr   r   namer1   r*   r3   )distribution
of_versionfor_py_versionr*   search_dirsr$   do_periodic_updateenvr&   u_log_groupall_patchesignore_grace_period_minorr3   r4   s        `         @r%   periodic_updaterI       s     \<XWZ[[[
,(,
'
'
'C    
 ##HlNKKE4X4XYYY 	2 	2HAuu++K(++c+c+c+c;+c+c+c(c(c%& 2 2$g.>)?)?)D
)R)R LLLLL;;s$=>> 2(=111111122		2 ~ 	. 	.G}$
22$}W----- 3 Lr'   c           	     l   |                     | |          }t                              |                                          }|j        rjd|_        t          j        t          j	                  |_
        |                    |                                           t          | ||||d|           d S d S )NTr   )periodicrC   )embed_update_logr8   	from_dictreadneeds_updaterK   r   r4   r   r7   startedwriteto_dicttrigger_update)r>   r@   r*   rA   r$   rC   rL   rD   s           r%   r6   r6   G   s    00~NN 0 5 5 7 788E k 555u}}///|^UK\`fijjjjjj	k kr'   c                \    |                      j        |          }t                              d j        |j                   t                              |                                          }t           fd|j
        D                       r(t                              d j        |j                   d S t           j        t          j        t          j                  d d          }|j
                            |           |                    |                                           d S )Nzadding %s information to %sc              3  8   K   | ]}|j         j        k    V  d S r0   )r   r=   )r2   r3   r*   s     r%   r5   z*add_wheel_to_update_log.<locals>.<genexpr>U   s-      
H
Hg7uz)
H
H
H
H
H
Hr'   z%s already present in %sr   download)rL   r>   r    r!   r=   filer8   rM   rN   r<   r:   warning
NewVersionr   r4   r   r7   appendrQ   rR   )r*   r@   r$   rL   rD   r3   s   `     r%   add_wheel_to_update_logr[   Q   s    001C^TT
LL.
<L<QRRR 0 5 5 7 788E

H
H
H
H
H
H
HHH 15:?O?TUUUX\X\%B%B%BD*UUG	N'"""5==??+++++r'   z%Y-%m-%dT%H:%M:%S.%fZc                >    | d n|                      t                    S r0   )strftimeDATETIME_FMTvalues    r%   dump_datetimera   a   s    =44enn\&B&BBr'   c                z    | d n7t          j        | t                                        t          j                  S )Ntzinfo)r   strptimer^   replacer   r7   r_   s    r%   load_datetimerg   e   s2    =44h&7|&L&L&T&T\d\h&T&i&iir'   c                  d    e Zd ZddZed             Zd ZddZdd	Zd
 Z	d Z
ed             ZdS )rY   returnNonec                >    || _         || _        || _        || _        d S r0   r   
found_daterelease_datesource)selfr   rm   rn   ro   s        r%   __init__zNewVersion.__init__j   s#     $(r'   c                     | |d         t          |d                   t          |d                   |d                   S )Nr   rm   rn   ro   rl   )rg   cls
dictionarys     r%   rM   zNewVersion.from_dictp   sK    s
+$Z%=>>&z.'ABBh'	
 
 
 	
r'   c                l    | j         t          | j                  t          | j                  | j        dS )Nr   rn   rm   ro   )r   ra   rn   rm   ro   rp   s    r%   rR   zNewVersion.to_dicty   s6    )$*;<<'88k	
 
 	
r'   Fc                    | j         dk    rdS | j         dk    r5| j        |t          z
  k     s|r |s| j        p| j        }||z
  t          k    S dS dS )NmanualTrK   F)ro   rm   GRACE_PERIOD_CIrn   GRACE_PERIOD_MINOR)rp   r4   rH   ignore_grace_period_cicompare_froms        r%   r1   zNewVersion.use   sk    ;(""4;*$$$/C/<Q*Q*QUk*Q, @#0CDO\)-???4ur'   strc           
     `    | j         j         d| j         d| j         d| j         d| j         d
S )Nz
(filename=z), found_date=z, release_date=z	, source=))	__class____name__r   rm   rn   ro   rx   s    r%   __repr__zNewVersion.__repr__   sd    ~& G G$- G Gt G G -G G8<G G G	
r'   c                ~     t                     t                    k    ot           fddD                       S )Nc              3  \   K   | ]&}t          |          t          |          k    V  'd S r0   )getattr)r2   kotherrp   s     r%   r5   z$NewVersion.__eq__.<locals>.<genexpr>   sM       1
 1
67GD!q 1 111
 1
 1
 1
 1
 1
r'   rw   )typeallrp   r   s   ``r%   __eq__zNewVersion.__eq__   sY    DzzT%[[( 
S 1
 1
 1
 1
 1
;o1
 1
 1
 .
 .
 	
r'   c                    | |k     S r0    r   s     r%   __ne__zNewVersion.__ne__   s    EM""r'   c                D    t          t          | j                            S r0   )r   r   r   rx   s    r%   r*   zNewVersion.wheel   s    T$-(()))r'   Nri   rj   )FF)ri   r   )r   
__module____qualname__rq   classmethodrM   rR   r1   r   r   r   propertyr*   r   r'   r%   rY   rY   i   s            
 
 [

 
 
   
 
 
 

 
 

# # # * * X* * *r'   rY   c                  d    e Zd Zd
dZed             Zed             Zd Zed             Z	d Z
d	S )r8   ri   rj   c                >    || _         || _        || _        || _        d S r0   )rP   	completedr:   rK   )rp   rP   r   r:   rK   s        r%   rq   zUpdateLog.__init__   s"    "  r'   c           	        |i } | t          |                    d                    t          |                    d                    d |                    dg           D             |                    d                    S )NrP   r   c                B    g | ]}t                               |          S r   )rY   rM   r2   r,   s     r%   
<listcomp>z'UpdateLog.from_dict.<locals>.<listcomp>   s&    MMMZ!!!$$MMMr'   r:   rK   )rg   getrs   s     r%   rM   zUpdateLog.from_dict   s}    Js*..3344*..5566MMjnnZ.L.LMMMNN:&&	
 
 	
r'   c                |    |                     ||                                          }|                     |          S r0   )rL   rN   rM   )rt   r$   r>   r@   raw_jsons        r%   r9   zUpdateLog.from_app_data   s5    ,,\>JJOOQQ}}X&&&r'   c                    t          | j                  t          | j                  | j        d | j        D             dS )Nc                6    g | ]}|                                 S r   )rR   )r2   rs     r%   r   z%UpdateLog.to_dict.<locals>.<listcomp>   s     <<<<<<r'   )rP   r   rK   r:   )ra   rP   r   rK   r:   rx   s    r%   rR   zUpdateLog.to_dict   sC    $T\22&t~66<<dm<<<	
 
 	
r'   c                    t          j        t          j                  }| j        |                     |          S || j        z
  t          k    rdS |                     |          S )Nr   F)r   r4   r   r7   r   _check_startUPDATE_PERIODrp   r4   s     r%   rO   zUpdateLog.needs_update   s]    lhl+++>!$$S)))=005  %%%r'   c                :    | j         d u p|| j         z
  t          k    S r0   )rP   UPDATE_ABORTED_DELAYr   s     r%   r   zUpdateLog._check_start   s!    |t#PsT\'9<P'PPr'   Nr   )r   r   r   rq   r   rM   r9   rR   r   rO   r   r   r'   r%   r8   r8      s        ! ! ! ! 
 
 [
 ' ' ['
 
 
 & & X&Q Q Q Q Qr'   r8   c           
     0   |d nt          |j                  }t          j        dt	          d                                                              | ||t          |          d |D             |          g}|                    d          dk    }	|	rd nt          }
|
|
d}|	st          j	        dk    r
t          |d<   t          |fi |}t                              d	| |d
n	d|j         ||j                   |	r|                                 d S d|_        d S )Nz-cz
        from virtualenv.report import setup_report, MAX_LEVEL
        from virtualenv.seed.wheels.periodic_update import do_update
        setup_report(MAX_LEVEL, show_pid=True)
        do_update({!r}, {!r}, {!r}, {!r}, {!r}, {!r})
        c                ,    g | ]}t          |          S r   )r   r2   ps     r%   r   z"trigger_update.<locals>.<listcomp>   s    IfIfIfUV#a&&IfIfIfr'   "_VIRTUALENV_PERIODIC_UPDATE_INLINE1)stdoutstderrwin32creationflagszWtriggered periodic upgrade of %s%s (for python %s) via background process having PID %dr   z==r   )r   pathsys
executabler   stripformatr   r
   platformr   r   r    infor3   pidcommunicate
returncode)r>   r@   r*   rA   r$   rC   rK   
wheel_pathcmdr!   pipekwargsprocesss                r%   rS   rS      sD   C
OOJ	
 	
 
	nj#h--IfIfZeIfIfIfhp	q	qC GG899S@E%44gD--F 3S\W,,"2C""6""G
KKam!5em!5!5     r'   c                    d }	 t          || ||||          }t                              d| ||           n"# t                              d| ||           w xY w|S )Nzdone %s %s with %s)_run_do_updater    r!   )r>   r@   embed_filenamer$   rA   rK   r:   s          r%   	do_updater      sf    HS!(L..Zbdopp)<RRRR)<RRRROs	   6 Ac           	        ddl m} |d nt          |          }|d nt          |          j        }t          | t                    rt          |           n| } d |D             }| j        }	| 	                    ||          }
t                              |
                                          }t          j        t          j                  }g g }}|j        D ]6}|j        dv r|                    |           !|                    |           7|rd}nd}|r||d         _        |H|	|j        z  }|                                s*t-          t          |          t          |	                     d d g t/                      f\  }}}||                    |d	          s:t          j        t          j                  }|                    ||d nd
| ||| |	t4          j                  }||r|d         j        |j        k    rnt;          |j                  }t?          |j        j        |||          }t@          !                    d|t          j        t          j                  |z
             |                    |           "                    |j                   |j#        }|j$        }|||j        k    rn|"|                    |d	          :||_%        |j%        s||_&        fd|D             }||z   |z   |_        t          j        t          j                  |_'        |
(                    |)                                           |S )Nr   )acquirec                Z    g | ](}t          |t                    rt          |          n|)S r   )
isinstancer   r   r   s     r%   r   z"_run_do_update.<locals>.<listcomp>  s1    MMMAjC0074777aMMMr'   r   >   rz   rK   rK   rz   T)r}   <)r>   version_specr@   rA   r$   	to_folderrC   rw   zdetected %s in %sc                &    g | ]}|j         v|S r   )r   )r2   r3   	filenamess     r%   r   z"_run_do_update.<locals>.<listcomp>8  s'    aaa'w?OW`?`?`g?`?`?`r'   )*virtualenv.seed.wheelsr   r   r   r+   r   r   r   r   rL   r8   rM   rN   r   r4   r   r7   r:   ro   rZ   r=   existsr	   setr1   download_wheelosenvironr   release_date_for_wheel_pathr   rY   r    r   addr*   r3   rK   rP   r   rQ   rR   )r$   r>   r   r@   rK   rA   r   wheel_filenameembed_version
wheelhouserL   rD   r4   update_versionsother_versionsr3   ro   destlastlast_versionr:   download_timern   
last_wheelr   s                           @r%   r   r      sp    /.....+3TTn9M9MN*2DDn8M8M8[M.83.G.GU ***XHMMMMMKJ00~NN 0 5 5 7 788E
,(,
'
'
'C&("^O> + +>333""7++++!!'**** / 	/(.OA%!N//{{}} 	8#n%%s:777.2D"cee.C+D,)
,dhhs4hHH, 555%%%!-!5;M|;M;M)# 
 & 
 
 <O<0B0Kty0X0X249==49>Yfouvvv'x|x|/L/L/L}/\]]]dm$$$Z
!)$*:R)R)R+ ,dhhs4hHH,, EN> aaaa^aaaN/.@ENlhl333EO5==??+++Or'   c                \   t          |           }t          |j                  }|	 |d         |j                 d         d         }t	          j        |d                              t          j                  S # t          $ r&}t                              d||           Y d }~nd }~ww xY wd S )Nreleasesr   upload_timez%Y-%m-%dT%H:%M:%Src   z)could not load release date %s because %r)r   "_pypi_get_distribution_info_cachedr>   r3   r   re   rf   r   r7   	Exceptionr    error)r   r*   contentr   	exceptions        r%   r   r   ?  s    $KKE 11CDDG	Z!*-em<Q?NK$[2EFFNNV^VbNccc 	Z 	Z 	ZLLDgyYYYYYYYY	Z4s   AA9 9
B)B$$B)c               #  <   K   d V  t          j                    V  d S r0   )ssl_create_unverified_contextr   r'   r%   _request_contextr   M  s*      
JJJ

(
*
******r'   c                \    | t           vrt          |           t           | <   t           |          S r0   )_PYPI_CACHE_pypi_get_distribution_info)r>   s    r%   r   r   V  s*    ;&&$?$M$ML!|$$r'   c                   d d|  d}}	 t                      D ]t}	 t          ||          5 }t          j        |          }d d d            n# 1 swxY w Y    n3# t          $ r&}t
                              d||           Y d }~md }~ww xY wn3# t          $ r&}t
                              d||           Y d }~nd }~ww xY w|S )Nzhttps://pypi.org/pypi/z/json)contextzfailed to access %s because %r)r   r   jsonloadr   r    r   r   )r>   r   urlr   file_handlerr   s         r%   r   r   \  sK   E,EEESG	G')) 	O 	OGOS'222 6l"i55G6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 O O O=sINNNNNNNNO G G G5sIFFFFFFFFGNsc   B AAAA	AA	AB 
B
$B B B

B 
B>B99B>c           	         g }t          j                    D ]M\  }}|D ]E}t          t          | |||f          }|                                 |                    |           FN|D ]}|                                 d S )N)targetargs)r   itemsr   _run_manual_upgradestartrZ   join)r$   rC   threadsr@   distribution_to_packager>   threads          r%   manual_upgrader  k  s    G3A3G3I3I # #//3 	# 	#L#6hVdfi=jkkkFLLNNNNN6""""	#
    r'   c           	        t          j        t          j                  }ddlm}  ||d |g | d|          }t                              d|||dn|j                   t          |||j
        | g d          }||t          j        t          j                  |z
  g}|r2|                    d	                    d
 |D                                  |rdnd}	d|	 }
t          j        |
g|R   d S )Nr   r   )from_bundleF)r>   r3   r@   rA   r$   rB   rC   z(upgrade %s for python %s with current %sr   )r>   r@   r   r$   rA   rK   
c              3      K   | ]	}d | V  
dS )	Nr   r   s     r%   r5   z&_run_manual_upgrade.<locals>.<genexpr>  s(      991h1hh999999r'   znew entries found:
%szno new versions foundz upgraded %s for python %s in %s )r   r4   r   r7   bundler  r    rX   r=   r   r   rZ   r   )r$   r>   r@   rC   r   r  currentr:   r   
ver_updatemsgs              r%   r   r   y  sD   LHL)))E######k!%   G NN2o7<	   !%|  H 	%%%-D
  ;DII9999999:::-5R));RJ
9Z
9
9C
N3r'   )
rY   r8   r[   r   ra   rg   r  rI   r   rS   )>__doc__
__future__r   r   loggingr   r   r   r   r   r   	itertoolsr   pathlibr   shutilr	   
subprocessr
   r   textwrapr   	threadingr   urllib.errorr   urllib.requestr   virtualenv.app_datar   virtualenv.seed.wheels.embedr   virtualenv.seed.wheels.utilr   virtualenv.util.subprocessr   	getLoggerr   r    r{   r|   r   r   rI   r6   r[   r^   ra   rg   rY   r8   rS   r   r   r   r   r   r   r   r  r   __all__r   r'   r%   <module>r     s   + + " " " " " "   				 



 



 2 2 2 2 2 2 2 2 2 2                   % % % % % % % %             ! ! ! ! ! ! " " " " " " 1 1 1 1 1 1 7 7 7 7 7 7 - - - - - - 7 7 7 7 7 7		8	$	$)!$$$YB''' 	r""" yq))) $ $ $Nk k k
, 
, 
, 'C C Cj j j2* 2* 2* 2* 2* 2* 2* 2*j)Q )Q )Q )Q )Q )Q )Q )QX! ! !H  E E EP  + + + % % %    % % %P  r'   