
    3iC                       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# ddl$m%Z% erddl&m'Z' ddl(m)Z)  ejT                  e+      Z, e	d      Z- e	d      Z. e	d      Z/ e	d      Z0	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-dZ1	 	 	 	 	 	 	 	 	 	 	 	 	 	 d.dZ2d/dZ3dZ4d0dZ5d1dZ6 G d d       Z7 G d! d"      Z8	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2d#Z9	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d$Z:	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d%Z;d5d&Z<d6d'Z=i Z>d7d(Z?d7d)Z@d8d*ZAd9d+ZBg d,ZCy):z%Periodically update bundled versions.    )annotationsN)datetime	timedeltatimezone)groupby)Path)copy2)DEVNULLPopen)dedent)Thread)TYPE_CHECKING)URLError)urlopen)AppDataDiskFolder)BUNDLE_SUPPORT)Wheel)CREATE_NO_WINDOW)	Generator)AppData   )hours   )days   c                P   |rt        | ||||       t        j                  t        j                        dfd}t
        j                  | |      }	|t        |	j                  d       D ]}  \  }
}t        |      }t        fd|D              }|D ]T  }|2t        |j                        j                  |j                  k(  r|c c S |j                  |      sJ ||      c c S   |S |	j                  D ]%  }|j                  j                   |k(  s ||      c S  |S )Ntzc                    t        j                  | j                  z        }t        j	                  d|rdnd|       |S )Nzusing %supdated wheel %szperiodically  )r   housefilenameLOGGERdebug)verupdated_wheelapp_datas     Y/var/www/opsc/venv/lib/python3.12/site-packages/virtualenv/seed/wheels/periodic_update.py_update_wheelz&periodic_update.<locals>._update_wheel5   s7    hnns||;</MWY[hi    c                4    | j                   j                  dd S )Nr      )wheelversion_tuple)vs    r(   <lambda>z!periodic_update.<locals>.<lambda><   s    agg>S>STUVW>X r*   )keyc              3  F   K   | ]  }|j                        s|  y wN)use).0versionnows     r(   	<genexpr>z"periodic_update.<locals>.<genexpr>?   s      +cRYR]R]^aRbG+cs   !!)r%   
NewVersionreturnr   )handle_auto_updater   r7   r   utc	UpdateLogfrom_app_datar   versionslistanyr   r"   namer4   r-   r6   )distribution
of_versionfor_py_versionr-   search_dirsr'   do_periodic_updateenvr)   u_log_groupall_patchesignore_grace_period_minorr6   r7   s        `         @r(   periodic_updaterN   &   s    <XWZ[
,,(,,
'C
 ##HlNKE4XY 	2HAuu+K(++c;+c(c%& 2$g.>.>)?)D)D

)R L;;s$=>(11	2		2 L	 ~~ 	.G}}$$
2$W--	. Lr*   c           	     J   |j                  | |      }t        j                  |j                               }|j                  rbd|_        t        j                  t        j                        |_
        |j                  |j                                t        | ||||d|       y y )NTr   )periodicrH   )embed_update_logr=   	from_dictreadneeds_updaterP   r   r7   r   r<   startedwriteto_dicttrigger_update)rC   rE   r-   rF   r'   rH   rQ   rI   s           r(   r;   r;   M   s      00~N 0 5 5 78E 5u}}/|^UK\`fij	 r*   c                V    |j                   j                  |      }t        j                  d j                  |j
                         t        j                  |j                               }t         fd|j                  D              r,t        j                  d j                  |j
                         y t         j                  t        j                  t        j                         d d      }|j                  j#                  |       |j%                  |j'                                y )Nzadding %s information to %sc              3  P   K   | ]  }|j                   j                  k(    y wr3   )r"   rB   )r5   r6   r-   s     r(   r8   z*add_wheel_to_update_log.<locals>.<genexpr>b   s      
Hg7uzz)
H   #&z%s already present in %sr   download)rQ   rC   r#   r$   rB   filer=   rR   rS   rA   r?   warningr9   r   r7   r   r<   appendrV   rW   )r-   rE   r'   rQ   rI   r6   s   `     r(   add_wheel_to_update_logr`   ^   s    001C1C^T
LL.

<L<Q<QR 0 5 5 78E

H
HH15::?O?T?TUX\\X\\%BD*UG	NN'"5==?+r*   z%Y-%m-%dT%H:%M:%S.%fZc                4    | d S | j                  t              S r3   )strftimeDATETIME_FMTvalues    r(   dump_datetimerf   n   s    =4Benn\&BBr*   c                z    | d S t        j                  | t              j                  t        j
                        S )Ntzinfo)r   strptimerc   replacer   r<   rd   s    r(   load_datetimerl   r   s3    =4ih&7&7|&L&T&T\d\h\h&T&iir*   c                  b    e Zd Zd
dZedd       ZddZdddZddZddZ	ddZ
edd       Zy	)r9   c                <    || _         || _        || _        || _        y r3   r"   
found_daterelease_datesource)selfr"   rp   rq   rr   s        r(   __init__zNewVersion.__init__w   s     $(r*   c                V     | |d   t        |d         t        |d         |d         S )Nr"   rp   rq   rr   ro   )rl   )cls
dictionarys     r(   rR   zNewVersion.from_dict}   s9    
+$Z%=>&z.'ABh'	
 	
r*   c                    | j                   t        | j                        t        | j                        | j                  dS )Nr"   rq   rp   rr   )r"   rf   rq   rp   rr   rs   s    r(   rW   zNewVersion.to_dict   s4    )$*;*;<'8kk	
 	
r*   c                    | j                   dk(  ry| j                   dk(  rA| j                  |t        z
  k  s|r)|s&| j                  xs | j                  }||z
  t        k\  S yy)NmanualTrP   F)rr   rp   GRACE_PERIOD_CIrq   GRACE_PERIOD_MINOR)rs   r7   rM   ignore_grace_period_cicompare_froms        r(   r4   zNewVersion.use   s^    ;;(";;*$$//C/<Q*QUk,#00CDOO\)-???r*   c           
         | 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"   rp   rq   rr   rz   s    r(   __repr__zNewVersion.__repr__   sP    ~~&&'z$--tN_ ` --.i}AG	
r*   c                b     t               t              k(  xr t         fddD              S )Nc              3  P   K   | ]  }t        |      t        |      k(    y wr3   )getattr)r5   kotherrs   s     r(   r8   z$NewVersion.__eq__.<locals>.<genexpr>   s)      1
67GD!q 111
r[   ry   )typeallrs   r   s   ``r(   __eq__zNewVersion.__eq__   s1    DzT%[( 
S 1
;o1
 .
 	
r*   c                    | |k(   S r3    r   s     r(   __ne__zNewVersion.__ne__   s    EM""r*   c                >    t        t        | j                              S r3   )r   r   r"   rz   s    r(   r-   zNewVersion.wheel   s    T$--())r*   N)
r"   strrp   r   rq   datetime | Nonerr   r   r:   None)rw   dict[str, str | None]r:   r9   )r:   r   )FF)r7   r   rM   boolr   r   r:   r   )r:   r   )r   objectr:   r   )r:   r   )r   
__module____qualname__rt   classmethodrR   rW   r4   r   r   r   propertyr-   r   r*   r(   r9   r9   v   sH     
 




# * *r*   r9   c                  n    e Zd Z	 	 	 	 	 	 	 	 	 	 ddZed	d       Zed
d       ZddZedd       Z	ddZ
y)r=   c                <    || _         || _        || _        || _        y r3   )rU   	completedr?   rP   )rs   rU   r   r?   rP   s        r(   rt   zUpdateLog.__init__   s      "  r*   c           
     
   |i } | t        |j                  d            t        |j                  d            |j                  dg       D cg c]  }t        j                  |       c}|j                  d            S c c}w )NrU   r   r?   rP   )rl   getr9   rR   )rv   rw   r/   s      r(   rR   zUpdateLog.from_dict   sr    J*..34*..56.8nnZ.LMZ!!!$MNN:&	
 	
 Ns   B c                d    |j                  ||      j                         }| j                  |      S r3   )rQ   rS   rR   )rv   r'   rC   rE   raw_jsons        r(   r>   zUpdateLog.from_app_data   s,    ,,\>JOOQ}}X&&r*   c                    t        | j                        t        | j                        | j                  | j                  D cg c]  }|j                          c}dS c c}w )N)rU   r   rP   r?   )rf   rU   r   rP   r?   rW   )rs   rs     r(   rW   zUpdateLog.to_dict   sH    $T\\2&t~~6.2mm<<	
 	
 =s   A
c                    t        j                  t        j                        }| j                  | j                  |      S || j                  z
  t        k  ry| j                  |      S )Nr   F)r   r7   r   r<   r   _check_startUPDATE_PERIODrs   r7   s     r(   rT   zUpdateLog.needs_update   sT    llhll+>>!$$S))=0  %%r*   c                N    | j                   d u xs || j                   z
  t        kD  S r3   )rU   UPDATE_ABORTED_DELAYr   s     r(   r   zUpdateLog._check_start   s%    ||t#PsT\\'9<P'PPr*   N)
rU   r   r   r   r?   list[NewVersion]rP   zbool | Noner:   r   )rw   dict[str, object] | Noner:   r=   )r'   r   rC   r   rE   r   r:   r=   )r:   zdict[str, object])r:   r   )r7   r   r:   r   )r   r   r   rt   r   rR   r>   rW   r   rT   r   r   r*   r(   r=   r=      sv    !&!3B!N^!ju!	! 
 
 ' '
 & &Qr*   r=   c                2   |d nt        |j                        }t        j                  dt	        d      j                         j                  | ||t        |      |D cg c]  }t        |       c}|      g}	|j                  d      dk(  }
|
rd nt        }||d}|
st        j                  dk(  r	t        |d<   t        |	fi |}t        j                  d| |d	nd
|j                   ||j                         |
r|j!                          y d|_        y c c}w )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})
        "_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#   infor6   pidcommunicate
returncode)rC   rE   r-   rF   r'   rH   rP   
wheel_pathpcmdr$   pipekwargsprocesss                 r(   rX   rX      s
    C

OJ	
 
	nj#h-ZeIfUV#a&Ifhp	qC GG89S@E4gD-FS\\W,"2C"6"G
KKam2emm_!5  ' Jgs   Dc                    d }	 t        || ||||      }t        j                  d| ||       |S # t        j                  d| ||       w xY w)Nzdone %s %s with %s)_run_do_updater#   r$   )rC   rE   embed_filenamer'   rF   rP   r?   s          r(   	do_updater     sT     HS!(L..Zbdop)<RO 	)<Rs	   . Ac           	        ddl m} |d n
t        |      }|d nt        |      j                  }t        | t              rt        |       n| } |D 	cg c]  }	t        |	t              rt        |	      n|	! }}	| j                  }
| j                  ||      }t        j                  |j                               }t        j                  t        j                         }g g }}|j"                  D ]3  }|j$                  dv r|j'                  |       #|j'                  |       5 |rd}nd}|r
||d   _        |=|
|j(                  z  }|j+                         st-        t        |      t        |
             d d g t/               f\  }}}}||j1                  |d      sUt        j                  t        j                         }|j3                  ||d nd	| ||| |
t4        j6                  
      }||r|d   j8                  |j(                  k(  rnt;        |j<                        }t?        |j<                  j(                  |||      }t@        jC                  d|t        j                  t        j                         |z
         |j'                  |       |jE                  |j8                         |jF                  }|jH                  }|||j                  k\  rn|@|j1                  |d      sU||_%        |jJ                  s||_&        |D cg c]  }|j8                  |vs| }}||z   |z   |_        t        j                  t        j                         |_'        |jQ                  |jS                                |S c c}	w c c}w )Nr   )acquirer   >   r|   rP   rP   r|   T)r   <)rC   version_specrE   rF   r'   	to_folderrH   ry   zdetected %s in %s)*virtualenv.seed.wheelsr   r   r   r.   
isinstancer   r   r!   rQ   r=   rR   rS   r   r7   r   r<   r?   rr   r_   rB   existsr	   setr4   download_wheelosenvironr"   release_date_for_wheel_pathr   r9   r#   r   addr-   r6   rP   rU   r   rV   rW   )r'   rC   r   rE   rP   rF   r   wheel_filenameembed_versionr   
wheelhouserQ   rI   r7   update_versionsother_versionsr6   rr   destlastlast_versionr?   	filenamesdownload_timerq   
last_wheels                             r(   r   r     s    /+3Tn9MN*2Dn8M8[8[M.83.G *XHALMAjC047a7MKMJ00~N 0 5 5 78E
,,(,,
'C&("^O>> +>>33""7+!!'*	+ (.OA%!N///{{}#n%s:7.2D"ce.C+D,)
,dhhs4hH 5%%%!-!5Q|n;M)# 

 & 
 <O0B0K0Ktyy0X2499=499>>Yfouv'x||x||/L}/\]dmm$ZZ
!))$*:R:R)R+ ,dhhs4hH, EN>>-;a'w?O?OW`?`gaNa/.@ENllhll3EO5==?+Oq Nh bs   $N N#Nc                <   t        |       }t        |j                        }|M	 |d   |j                     d   d   }t	        j
                  |d      j                  t        j                        S y # t        $ r!}t        j                  d||       Y d }~y d }~ww xY w)Nreleasesr   upload_timez%Y-%m-%dT%H:%M:%Srh   z)could not load release date %s because %r)r   "_pypi_get_distribution_info_cachedrC   r6   r   rj   rk   r   r<   	Exceptionr#   error)r   r-   contentr   	exceptions        r(   r   r   ]  s    $KE 11C1CDG	Z!*-emm<Q?NK$$[2EFNNV^VbVbNcc   	ZLLDgyYY	Zs   AA1 1	B:BBc               #  @   K   d  t        j                          y wr3   )ssl_create_unverified_contextr   r*   r(   _request_contextr   k  s     
J

(
(
**s   c                H    | t         vrt        |       t         | <   t         |    S r3   )_PYPI_CACHE_pypi_get_distribution_info)rC   s    r(   r   r   t  s$    ;&$?$ML!|$$r*   c                b   d d|  d}}	 t               D ]0  }	 t        ||      5 }t        j                  |      }d d d         |S  	 |S # 1 sw Y   xY w# t        $ r!}t
        j                  d||       Y d }~gd }~ww xY w# t        $ r"}t
        j                  d||       Y d }~|S d }~ww xY w)Nzhttps://pypi.org/pypi/z/json)contextzfailed to access %s because %r)r   r   jsonloadr   r#   r   r   )rC   r   urlr   file_handlerr   s         r(   r   r   z  s    1,uESG	G') 	OGOS'2 6l"ii5G6
 N	O N6 6  O=sINNO G5sIFFNGs\   B AA
AB B 
A	A	B A;6B ;B  B 	B.B))B.c           	         g }t        j                         D ]B  \  }}|D ]8  }t        t        | |||f      }|j	                          |j                  |       : D |D ]  }|j                           y )N)targetargs)r   itemsr   _run_manual_upgradestartr_   join)r'   rH   threadsrE   distribution_to_packagerC   threads          r(   manual_upgrader    s{    G3A3G3G3I #//3 	#L#6hVdfi=jkFLLNNN6"	##  r*   c           	        t        j                  t        j                        }ddlm}  ||d |g | d|      }t        j                  d|||dn|j                         t        |||j                  | g d      }||t        j                  t        j                        |z
  g}|r'|j                  d	j                  d
 |D                     |rdnd}	d|	 }
t        j                  |
g|  y )Nr   r   )from_bundleF)rC   r6   rE   rF   r'   rG   rH   z(upgrade %s for python %s with current %sr    )rC   rE   r   r'   rF   rP   
c              3  &   K   | ]	  }d |   yw)	Nr   )r5   r/   s     r(   r8   z&_run_manual_upgrade.<locals>.<genexpr>  s     911#h9s   znew entries found:
%szno new versions foundz upgraded %s for python %s in %s )r   r7   r   r<   bundler  r#   r^   rB   r   r   r_   r   )r'   rC   rE   rH   r   r  currentr?   r   
ver_updatemsgs              r(   r   r     s    LLHLL)E#!% G NN2o7<<	 !%||H 	%-D
 DII999:-5);RJ,ZL
9C
NN3r*   )
r9   r=   r`   r   rf   rl   r  rN   r   rX   )rC   r   rD   
str | NonerE   r   r-   Wheel | NonerF   
list[Path]r'   r   rG   r   rH   dict[str, str]r:   r  )rC   r   rE   r   r-   r  rF   r  r'   r   rH   r  r:   r   )r-   r   rE   r   r'   r   r:   r   )re   r   r:   r  )re   r  r:   r   )rC   r   rE   r   r-   r  rF   r  r'   r   rH   r  rP   r   r:   r   )rC   r   rE   r   r   r  r'   str | AppDatarF   list[str] | list[Path]rP   r   r:   zlist[NewVersion] | None)r'   r  rC   r   r   r  rE   r   rP   r   rF   r  r:   r   )r   r   r:   r   )r:   z,Generator[ssl.SSLContext | None, None, None])rC   r   r:   r   )r'   r   rH   r  r:   r   )
r'   r   rC   r   rE   r   rH   r  r:   r   )D__doc__
__future__r   r   loggingr   r   r   r   r   r   	itertoolsr   pathlibr   shutilr	   
subprocessr
   r   textwrapr   	threadingr   typingr   urllib.errorr   urllib.requestr   virtualenv.app_datar   virtualenv.seed.wheels.embedr   virtualenv.seed.wheels.utilr   virtualenv.util.subprocessr   collections.abcr   virtualenv.app_data.baser   	getLoggerr   r#   r}   r~   r   r   rN   r;   r`   rc   rf   rl   r9   r=   rX   r   r   r   r   r   r   r   r  r   __all__r   r*   r(   <module>r%     s}   + "   	 
 
 2 2    %     ! " 1 7 - 7)0			8	$!$B' r" q) $$$ $ 	$
 $ $ $ 
$ $Nkkk k 	k
 k 
k 
k"
, 'Cj2* 2*j+Q +Q\))) ) 	)
 ) 
) ) 
)X  	
 (   EEE E 	E
 E (E EP+ %%Pr*   