B <)\vsA@sdZddlmZmZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZm Z ddl!m"Z"ddl#m$Z$ery ddl%Z%Wne&k rYnXe ddZ'e ddZ(e ddZ)e ddZ*ddZ+ddZ,ddZ-dZ.ddZ/d d!Z0Gd"d#d#e1Z2Gd$d%d%e1Z3d&d'Z4d(d)Z5d*d+Z6d,d-Z7d.d/Z8iZ9d0d1Z:d2d3Z;d4d5ZdS)9z' Periodically update bundled versions. )absolute_importunicode_literalsN)datetime timedelta)groupby)copy2)dedent)Thread)URLError)urlopen)AppDataDiskFolder)PY2)Path)CREATE_NO_WINDOWPopen)BUNDLE_SUPPORT)Wheel)hours)dayscs|rt|||||tfdd}t||} |dkrxt| jdddD]f\} } t| } tfdd| D} x>| D]6}|dk rt |j j |j kr|S| | r||SqWqTWn$x"| jD]}|j j|kr||SqW|S)Ncs*tj|j}td|rdnd||S)Nzusing %supdated wheel %sz periodically )rhousefilenameloggingdebug)verZ updated_wheel)app_dataW/opt/alt/python37/lib/python3.7/site-packages/virtualenv/seed/wheels/periodic_update.py _update_wheel3sz&periodic_update.._update_wheelcSs|jjddS)Nrr)wheel version_tuple)vr r r!:z!periodic_update..)keyc3s|]}|r|VqdS)N)use).0version)nowr r! =sz"periodic_update..)handle_auto_updaterr, UpdateLog from_app_datarversionslistanyrrnamer)r#r+) distributionZ of_versionfor_py_versionr# search_dirsrdo_periodic_updateenvr"u_log_groupZ all_patchesignore_grace_period_minorr+r )rr,r!periodic_update-s$      r>c CsX|||}t|}|jrTd|_t|_| | t |||||d|ddS)NT)periodicr9) embed_update_logr/ from_dictread needs_updater?rr,startedwriteto_dicttrigger_update)r5r6r#r7rr9r@r:r r r!r.Ks  r.cs|j|}tdj|jt|}t fdd|j Dr\t dj|jdSt jt dd}|j |||dS)Nzadding %s information to %sc3s|]}|jjkVqdS)N)rr4)r*r+)r#r r!r-Ysz*add_wheel_to_update_log..z%s already present in %sZdownload)r@r5rrr4filer/rArBr3r1warning NewVersionrr,appendrErF)r#r6rr@r:r+r )r#r!add_wheel_to_update_logUs rLz%Y-%m-%dT%H:%M:%S.%fZcCs|dkr dS|tS)N)strftime DATETIME_FMT)valuer r r! dump_datetimeesrPcCs|dkr dSt|tS)N)rstrptimerN)rOr r r! load_datetimeisrRc@sVeZdZddZeddZddZddd Zd d Zd d Z ddZ e ddZ dS)rJcCs||_||_||_||_dS)N)r found_date release_datesource)selfrrSrTrUr r r!__init__nszNewVersion.__init__cCs(||dt|dt|d|ddS)NrrSrTrU)rrSrTrU)rR)cls dictionaryr r r!rAts   zNewVersion.from_dictcCs|jt|jt|j|jdS)N)rrTrSrU)rrPrTrSrU)rVr r r!rF}szNewVersion.to_dictFcCsN|jdkrdS|jdkrJ|j|tks*|rJ|sF|jp8|j}||tkSdSdS)NmanualTr?F)rUrSGRACE_PERIOD_CIrTGRACE_PERIOD_MINOR)rVr,r=ignore_grace_period_ciZ compare_fromr r r!r)s    zNewVersion.usecCsd|jj|j|j|j|jS)Nz;{}(filename={}), found_date={}, release_date={}, source={}))format __class____name__rrSrTrU)rVr r r!__repr__s zNewVersion.__repr__cs(ttko&tfdddDS)Nc3s"|]}t|t|kVqdS)N)getattr)r*k)otherrVr r!r-sz$NewVersion.__eq__..)rrTrSrU)typeall)rVrdr )rdrVr!__eq__szNewVersion.__eq__cCs ||k S)Nr )rVrdr r r!__ne__szNewVersion.__ne__cCstt|jS)N)rrr)rVr r r!r#szNewVersion.wheelN)FF) r` __module__ __qualname__rW classmethodrArFr)rargrhpropertyr#r r r r!rJms   rJc@sHeZdZddZeddZeddZddZed d Z d d Z d S)r/cCs||_||_||_||_dS)N)rD completedr1r?)rVrDrmr1r?r r r!rWszUpdateLog.__init__cCsF|dkr i}|t|dt|ddd|dgD|dS)NrDrmcSsg|]}t|qSr )rJrA)r*r%r r r! sz'UpdateLog.from_dict..r1r?)rRget)rXrYr r r!rAs  zUpdateLog.from_dictcCs|||}||S)N)r@rBrA)rXrr5r6Zraw_jsonr r r!r0szUpdateLog.from_app_datacCs(t|jt|j|jdd|jDdS)NcSsg|] }|qSr )rF)r*rr r r!rnsz%UpdateLog.to_dict..)rDrmr?r1)rPrDrmr?r1)rVr r r!rFszUpdateLog.to_dictcCs<t}|jdkr||S||jtkr.dS||SdS)NF)rr,rm _check_start UPDATE_PERIOD)rVr,r r r!rCs   zUpdateLog.needs_updatecCs|jdkp||jtkS)N)rDUPDATE_ABORTED_DELAY)rVr,r r r!rqszUpdateLog._check_startN) r`rirjrWrkrAr0rFrlrCrqr r r r!r/s   r/c Cs|dkr dnt|j}tjdtd|||t|dd|D|g}|tdtdk} | rfdntj } | | d} | stj dkrt | d <t |f| } t d ||dkrd n d |j|| j| r| dS) 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}) cSsg|] }t|qSr )str)r*pr r r!rnsz"trigger_update..Z"_VIRTUALENV_PERIODIC_UPDATE_INLINE1)stdoutstderrwin32 creationflagszWtriggered periodic upgrade of %s%s (for python %s) via background process having PID %drz=={})rtpathsys executablerstripr^ro subprocessPIPEplatformrrrinfor+pid communicate) r5r6r#r7rr9r?Z wheel_pathcmdrpipekwargsprocessr r r!rGs(    rGc Cs2d}zt||||||}Wdtd|||X|S)Nzdone %s %s with %s)_run_do_updaterr)r5r6embed_filenamerr7r?r1r r r! do_updates rc sXddlm}|dkrdnt|}|dkr,dnt|j}t|trHt|n|}dd|D}|j} | ||} t | } t } gg} }x.| jD]$}|jdkr| |q||qW|rd}nd}| r|| d_|dk r| |j}|stt|t| ddgtf\}}}x|dks:|j| dd st }|j||dkrVdnd ||||| tjd }|dks| r| dj|jkrPt|j}t|jj|||d }t d |t |||!|j|j"}|j#}|dk r ||jkr Pq W|| _$| j$s| | _%fdd|D}|| || _t | _&| '| (|S)Nr)acquirecSs"g|]}t|trt|n|qSr ) isinstancertr)r*rur r r!rnsz"_run_do_update..>r?rZr?rZT)r]z<{})r5Z version_specr6r7rZ to_folderr9)rrTrSrUzdetected %s in %scsg|]}|jkr|qSr )r)r*r+) filenamesr r!rn8s))Zvirtualenv.seed.wheelsrrrr$rrtr rr@r/rArBrr,r1rUrKr4existsrsetr)Zdownload_wheelr^osenvironrrelease_date_for_wheel_pathr{rJrraddr#r+r?rDrmrErF)rr5rr6r?r7rZwheel_filenameZ embed_versionZ wheelhouser@r:r,Zupdate_versionsZother_versionsr+rUdestlastZ last_versionr1Z download_timerTZ last_wheelr )rr!rsl           "      rc Csrt|}t|j}|dk rny"|d|jdd}t|dStk rl}ztd||Wdd}~XYnXdS)NZreleasesr upload_timez%Y-%m-%dT%H:%M:%Sz)could not load release date %s because %r) r"_pypi_get_distribution_info_cachedr5r+rrQ Exceptionrerror)rr#contentr exceptionr r r!r?s   rccsdVtVdS)N)sslZ_create_unverified_contextr r r r!_request_contextMsrcCs|tkrt|t|<t|S)N) _PYPI_CACHE_pypi_get_distribution_info)r5r r r!rVs rc Csdd|}}ynxhtD]^}y(t||d}t|}WdQRXPWqtk rv}ztd||Wdd}~XYqXqWWn0tk r}ztd||Wdd}~XYnX|S)Nzhttps://pypi.org/pypi/{}/json)contextzfailed to access %s because %r) r^rr jsonloadr rrr)r5rurlrZ file_handlerrr r r!r\s ( rcCslg}xLtD]@\}}x6|D]*}tt||||fd}|||q WqWx|D] }|qXWdS)N)targetargs)ritemskeysr _run_manual_upgradestartrKjoin)rr9threadsr6Zdistribution_to_packager5threadr r r!manual_upgradeks rc Cst}ddlm}||d|g|d|d}td|||dkr@dn|jt|||j|gdd}d |rjd nd }||t|g} |r| d d d |Dtj|f| dS)Nr) from_bundleF)r5r+r6r7rr8r9z(upgrade %s for python %s with current %sr)r5r6rrr7r?z"upgraded %s for python %s in %s {}znew entries found: %szno new versions found css|]}d|VqdS)z {}N)r^)r*r%r r r!r-sz&_run_manual_upgrade..) rr,ZbundlerrrIr4rr{r^rKr) rr5r6r9rrcurrentr1msgrr r r!rys< r) rLr>rrrJr/rRrPrGr)?__doc__ __future__rrrrrrrr|rr itertoolsrshutilrtextwrapr threadingr Zsix.moves.urllib.errorr Zsix.moves.urllib.requestr Zvirtualenv.app_datar Zvirtualenv.infor Zvirtualenv.util.pathrZvirtualenv.util.subprocessrrZ wheels.embedrZ wheels.utilrZ _strptime ImportErrorr[r\rrrsr>r.rLrNrPrRobjectrJr/rGrrrrrrrrr__all__r r r r!s`                  9-! B)