<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    a<                 @   s  d Z ddlmZ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
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 ddlmZm Z  ddl!m"Z" ddl#m$Z$ eryddl%Z%W n e&k
r   Y nX eddZ'eddZ(eddZ)eddZ*dd Z+dd Z,dd Z-dZ.dd Z/d d! Z0G d"d# d#e1Z2G d$d% d%e1Z3d&d' Z4d(d) Z5d*d+ Z6d,d- Z7d.d/ Z8i Z9d0d1 Z:d2d3 Z;d4d5 Z<d6d7 Z=d8Z>dS )9z'
Periodically update bundled versions.
    )absolute_importunicode_literalsN)datetime	timedelta)groupby)copy2)dedent)Thread)URLError)urlopen)AppDataDiskFolder)PY2)Path)CREATE_NO_WINDOWPopen   )BUNDLE_SUPPORT)Wheel   )hours   )days   c                s   |rt | ||| | t  fdd}t | |}	|d krxt|	jdd dD ]f\}
}t|}tfdd|D }x>|D ]6}|d k	rt	|j
j|jkr|S ||r||S qW qTW n$x"|	jD ]}|jj|kr||S qW |S )Nc                s*   t  j| j }td|rdnd| |S )Nzusing %supdated wheel %szperiodically  )r   housefilenameloggingdebug)verZupdated_wheel)app_data W/opt/alt/python37/lib/python3.7/site-packages/virtualenv/seed/wheels/periodic_update.py_update_wheel3   s    z&periodic_update.<locals>._update_wheelc             S   s   | j jdd S )Nr   r   )wheelversion_tuple)vr    r    r!   <lambda>:       z!periodic_update.<locals>.<lambda>)keyc             3   s   | ]}|  r|V  qd S )N)use).0version)nowr    r!   	<genexpr>=   s    z"periodic_update.<locals>.<genexpr>)handle_auto_updater   r,   	UpdateLogfrom_app_datar   versionslistanyr   r   namer)   r#   r+   )distributionZ
of_versionfor_py_versionr#   search_dirsr   do_periodic_updateenvr"   u_log_groupZall_patchesignore_grace_period_minorr+   r    )r   r,   r!   periodic_update-   s$    
r>   c          	   C   sX   | | |}t| }|jrTd|_t |_|	|
  t| ||||d|d d S )NT)periodicr9   )embed_update_logr/   	from_dictreadneeds_updater?   r   r,   startedwriteto_dicttrigger_update)r5   r6   r#   r7   r   r9   r@   r:   r    r    r!   r.   K   s    
r.   c                s   |  j|}td j|j t| }t	 fdd|j
D r\td j|j d S t jt d d}|j
| ||  d S )Nzadding %s information to %sc             3   s   | ]}|j  jkV  qd S )N)r   r4   )r*   r+   )r#   r    r!   r-   Y   s    z*add_wheel_to_update_log.<locals>.<genexpr>z%s already present in %sZdownload)r@   r5   r   r   r4   filer/   rA   rB   r3   r1   warning
NewVersionr   r,   appendrE   rF   )r#   r6   r   r@   r:   r+   r    )r#   r!   add_wheel_to_update_logU   s    rL   z%Y-%m-%dT%H:%M:%S.%fZc             C   s   | d krd S |  tS )N)strftimeDATETIME_FMT)valuer    r    r!   dump_datetimee   s    rP   c             C   s   | d krd S t | tS )N)r   strptimerN   )rO   r    r    r!   load_datetimei   s    rR   c               @   sV   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dS )rJ   c             C   s   || _ || _|| _|| _d S )N)r   
found_daterelease_datesource)selfr   rS   rT   rU   r    r    r!   __init__n   s    zNewVersion.__init__c             C   s(   | |d t |d t |d |d dS )Nr   rS   rT   rU   )r   rS   rT   rU   )rR   )cls
dictionaryr    r    r!   rA   t   s
    

zNewVersion.from_dictc             C   s   | j t| jt| j| jdS )N)r   rT   rS   rU   )r   rP   rT   rS   rU   )rV   r    r    r!   rF   }   s    zNewVersion.to_dictFc             C   sN   | j dkrdS | j dkrJ| j|t k s*|rJ|sF| jp8| j}|| tkS dS dS )NmanualTr?   F)rU   rS   GRACE_PERIOD_CIrT   GRACE_PERIOD_MINOR)rV   r,   r=   ignore_grace_period_ciZcompare_fromr    r    r!   r)      s    

zNewVersion.usec             C   s   d | jj| j| j| j| jS )Nz;{}(filename={}), found_date={}, release_date={}, source={}))format	__class____name__r   rS   rT   rU   )rV   r    r    r!   __repr__   s    zNewVersion.__repr__c                s(   t t  ko&t fdddD S )Nc             3   s"   | ]}t |t  |kV  qd S )N)getattr)r*   k)otherrV   r    r!   r-      s    z$NewVersion.__eq__.<locals>.<genexpr>)r   rT   rS   rU   )typeall)rV   rd   r    )rd   rV   r!   __eq__   s    zNewVersion.__eq__c             C   s
   | |k S )Nr    )rV   rd   r    r    r!   __ne__   s    zNewVersion.__ne__c             C   s   t t| jS )N)r   r   r   )rV   r    r    r!   r#      s    zNewVersion.wheelN)FF)r`   
__module____qualname__rW   classmethodrA   rF   r)   ra   rg   rh   propertyr#   r    r    r    r!   rJ   m   s   	
	rJ   c               @   sH   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
dS )r/   c             C   s   || _ || _|| _|| _d S )N)rD   	completedr1   r?   )rV   rD   rm   r1   r?   r    r    r!   rW      s    zUpdateLog.__init__c             C   sF   |d kri }| t |dt |ddd |dg D |dS )NrD   rm   c             S   s   g | ]}t |qS r    )rJ   rA   )r*   r%   r    r    r!   
<listcomp>   s    z'UpdateLog.from_dict.<locals>.<listcomp>r1   r?   )rR   get)rX   rY   r    r    r!   rA      s    zUpdateLog.from_dictc             C   s   | || }| |S )N)r@   rB   rA   )rX   r   r5   r6   Zraw_jsonr    r    r!   r0      s    zUpdateLog.from_app_datac             C   s(   t | jt | j| jdd | jD dS )Nc             S   s   g | ]}|  qS r    )rF   )r*   rr    r    r!   rn      s    z%UpdateLog.to_dict.<locals>.<listcomp>)rD   rm   r?   r1   )rP   rD   rm   r?   r1   )rV   r    r    r!   rF      s    zUpdateLog.to_dictc             C   s<   t  }| jd kr| |S || j tkr.dS | |S d S )NF)r   r,   rm   _check_startUPDATE_PERIOD)rV   r,   r    r    r!   rC      s    

zUpdateLog.needs_updatec             C   s   | j d kp|| j  tkS )N)rD   UPDATE_ABORTED_DELAY)rV   r,   r    r    r!   rq      s    zUpdateLog._check_startN)r`   ri   rj   rW   rk   rA   r0   rF   rl   rC   rq   r    r    r    r!   r/      s   
r/   c          
   C   s   |d krd nt |j}tjdtd | ||t |dd |D |g}|t dt dk}	|	rfd ntj	}
|
|
d}|	stj
dkrt|d	< t|f|}td
| |d krdn
d|j||j |	r|  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             S   s   g | ]}t |qS r    )str)r*   pr    r    r!   rn      s    z"trigger_update.<locals>.<listcomp>Z"_VIRTUALENV_PERIODIC_UPDATE_INLINE1)stdoutstderrwin32creationflagszWtriggered periodic upgrade of %s%s (for python %s) via background process having PID %dr   z=={})rt   pathsys
executabler   stripr^   ro   
subprocessPIPEplatformr   r   r   infor+   pidcommunicate)r5   r6   r#   r7   r   r9   r?   Z
wheel_pathcmdr   pipekwargsprocessr    r    r!   rG      s(    
 
rG   c             C   s2   d }zt || ||||}W d td| || X |S )Nzdone %s %s with %s)_run_do_updater   r   )r5   r6   embed_filenamer   r7   r?   r1   r    r    r!   	do_update   s
    r   c          	      sX  ddl m} |d krd nt|}|d kr,d nt|j}t| trHt| n| } dd |D }| j}	| 	||}
t
|
 }t }g g  }}x.|jD ]$}|jdkr|| q|| qW |rd}nd}|r||d _|d k	r|	|j }| stt|t|	 d d g t f\}}} x|d ks:|j|dd	st }|j||d krVd nd
|||| |	tjd}|d ks|r|d j|jkrP t|j}t|jj|||d}t d|t |  ||  !|j |j"}|j#}|d k	r ||jkr P q W ||_$|j$s||_% fdd|D }|| | |_t |_&|
'|(  |S )Nr   )acquirec             S   s"   g | ]}t |trt|n|qS r    )
isinstancert   r   )r*   ru   r    r    r!   rn     s    z"_run_do_update.<locals>.<listcomp>>   rZ   r?   r?   rZ   T)r]   z<{})r5   Zversion_specr6   r7   r   Z	to_folderr9   )r   rT   rS   rU   zdetected %s in %sc                s   g | ]}|j  kr|qS r    )r   )r*   r+   )	filenamesr    r!   rn   8  s    ))Zvirtualenv.seed.wheelsr   r   r   r$   r   rt   r   r   r@   r/   rA   rB   r   r,   r1   rU   rK   r4   existsr   setr)   Zdownload_wheelr^   osenvironr   release_date_for_wheel_pathr{   rJ   r   r   addr#   r+   r?   rD   rm   rE   rF   )r   r5   r   r6   r?   r7   r   Zwheel_filenameZembed_versionZ
wheelhouser@   r:   r,   Zupdate_versionsZother_versionsr+   rU   destlastZlast_versionr1   Zdownload_timerT   Z
last_wheelr    )r   r!   r      sl    






"



r   c          
   C   sr   t | }t|j}|d k	rny"|d |j d d }t|dS  tk
rl } ztd|| W d d }~X Y nX d S )NZreleasesr   upload_timez%Y-%m-%dT%H:%M:%Sz)could not load release date %s because %r)	r   "_pypi_get_distribution_info_cachedr5   r+   r   rQ   	Exceptionr   error)r   r#   contentr   	exceptionr    r    r!   r   ?  s    
 r   c               c   s   d V  t  V  d S )N)sslZ_create_unverified_contextr    r    r    r!   _request_contextM  s    r   c             C   s   | t krt| t | < t |  S )N)_PYPI_CACHE_pypi_get_distribution_info)r5   r    r    r!   r   V  s    r   c             C   s   d d |  }}ynxht D ]^}y(t||d}t|}W d Q R X P W q tk
rv } ztd|| W d d }~X Y qX qW W n0 tk
r } ztd|| W d d }~X Y nX |S )Nzhttps://pypi.org/pypi/{}/json)contextzfailed to access %s because %r)	r^   r   r   jsonloadr
   r   r   r   )r5   r   urlr   Zfile_handlerr   r    r    r!   r   \  s    ( r   c             C   sl   g }xLt  D ]@\}}x6| D ]*}tt| |||fd}|  || q W qW x|D ]}|  qXW d S )N)targetargs)r   itemskeysr	   _run_manual_upgradestartrK   join)r   r9   threadsr6   Zdistribution_to_packager5   threadr    r    r!   manual_upgradek  s    
r   c       
   	   C   s   t  }ddlm} ||d |g | d|d}td|||d kr@dn|j t|||j| g dd}d	|rjd	nd
}||t  | g}	|r|	
ddd |D  tj|f|	  d S )Nr   )from_bundleF)r5   r+   r6   r7   r   r8   r9   z(upgrade %s for python %s with current %sr   )r5   r6   r   r   r7   r?   z"upgraded %s for python %s in %s {}znew entries found:
%szno new versions found
c             s   s   | ]}d  |V  qdS )z	{}N)r^   )r*   r%   r    r    r!   r-     s    z&_run_manual_upgrade.<locals>.<genexpr>)r   r,   Zbundler   r   rI   r4   r   r{   r^   rK   r   )
r   r5   r6   r9   r   r   currentr1   msgr   r    r    r!   r   y  s<    r   )
rL   r>   r   r   rJ   r/   rR   rP   rG   r   )?__doc__
__future__r   r   r   r   r   r   r   r|   r   r   	itertoolsr   shutilr   textwrapr   	threadingr	   Zsix.moves.urllib.errorr
   Zsix.moves.urllib.requestr   Zvirtualenv.app_datar   Zvirtualenv.infor   Zvirtualenv.util.pathr   Zvirtualenv.util.subprocessr   r   Zwheels.embedr   Zwheels.utilr   Z	_strptimeImportErrorr[   r\   rr   rs   r>   r.   rL   rN   rP   rR   objectrJ   r/   rG   r   r   r   r   r   r   r   r   r   __all__r    r    r    r!   <module>   s`   




9-!	B)