U e< @sdZddlmZddlZddlZddlZddlZddlZddlmZm Z m Z ddl m Z ddl mZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddl m!Z!ddl"m#Z#e ddZ$e ddZ%e ddZ&e ddZ'ddZ(ddZ)ddZ*dZ+ddZ,dd Z-Gd!d"d"Z.Gd#d$d$Z/d%d&Z0d'd(Z1d)d*Z2d+d,Z3d-d.Z4iZ5d/d0Z6d1d2Z7d3d4Z8d5d6Z9d"d$dd(dd d4dd,d&g Z:dS)7z%Periodically update bundled versions.) annotationsN)datetime timedeltatimezone)groupby)Path)copy2)DEVNULLPopen)dedent)Thread)URLError)urlopen)AppDataDiskFolder)BUNDLE_SUPPORT)Wheel)CREATE_NO_WINDOW)hours)dayscs|rt|||||tjtjdfdd}t||} |dkrt| jdddD]r\} } t | } t fdd| D} | D]F}|dk rt |j j |j kr|S|| r||SqqXn$| jD]}|jj|kr||Sq|S) Ntzcs*tj|j}td|rdnd||S)Nzusing %supdated wheel %sz periodically )rhousefilenameloggingdebug)verZ updated_wheel)app_dataT/opt/hc_python/lib/python3.8/site-packages/virtualenv/seed/wheels/periodic_update.py _update_wheel.sz&periodic_update.._update_wheelcSs|jjddS)Nr)wheel version_tuple)vr!r!r"5z!periodic_update..)keyc3s|]}|r|VqdSN)use.0version)nowr!r" 8s z"periodic_update..)handle_auto_updaterr0rutc UpdateLog from_app_datarversionslistanyrrnamer,r%r/) distributionZ of_versionfor_py_versionr% search_dirsr do_periodic_updateenvr#u_log_groupZ all_patchesignore_grace_period_minorr/r!)r r0r"periodic_updates$      rCc Cs^|||}t|}|jrZd|_tjtj d|_ | | t |||||d|ddS)NTr)periodicr>)embed_update_logr4 from_dictread needs_updaterDrr0rr3startedwriteto_dicttrigger_update)r:r;r%r<r r>rEr?r!r!r"r2Fs r2cs|j|}tdj|jt|}t fdd|j Dr\t dj|jdSt jt jtjddd}|j |||dS)Nzadding %s information to %sc3s|]}|jjkVqdSr+)rr9r-r%r!r"r1Tsz*add_wheel_to_update_log..z%s already present in %srdownload)rEr:rrr9filer4rFrGr8r6warning NewVersionrr0rr3appendrJrK)r%r;r rEr?r/r!rMr"add_wheel_to_update_logPs rSz%Y-%m-%dT%H:%M:%S.%fZcCs|dkr dS|tSr+)strftime DATETIME_FMTvaluer!r!r" dump_datetime`srXcCs"|dkr dSt|tjtjdS)Ntzinfo)rstrptimerUreplacerr3rVr!r!r" load_datetimedsr]c@sbeZdZddddZeddZddZdd d Zd dd dZddZ ddZ e ddZ dS)rQNonereturncCs||_||_||_||_dSr+r found_date release_datesource)selfrrbrcrdr!r!r"__init__iszNewVersion.__init__cCs(||dt|dt|d|ddS)Nrrbrcrdra)r]cls dictionaryr!r!r"rFos   zNewVersion.from_dictcCs|jt|jt|j|jdS)Nrrcrbrd)rrXrcrbrdrer!r!r"rKxs zNewVersion.to_dictFcCsN|jdkrdS|jdkrJ|j|tks*|rJ|sF|jp8|j}||tkSdSdS)NmanualTrDF)rdrbGRACE_PERIOD_CIrcGRACE_PERIOD_MINOR)rer0rBignore_grace_period_ciZ compare_fromr!r!r"r,s   zNewVersion.usestrc Cs.|jjd|jd|jd|jd|jd S)Nz (filename=z), found_date=z, release_date=z , source=)) __class____name__rrbrcrdrkr!r!r"__repr__s,zNewVersion.__repr__cs(ttko&tfdddDS)Nc3s"|]}t|t|kVqdSr+)getattr)r.kotherrer!r"r1sz$NewVersion.__eq__..rj)typeallrerxr!rwr"__eq__szNewVersion.__eq__cCs ||k Sr+r!r{r!r!r"__ne__szNewVersion.__ne__cCstt|jSr+)rrrrkr!r!r"r%szNewVersion.wheelN)FF) rs __module__ __qualname__rf classmethodrFrKr,rtr|r}propertyr%r!r!r!r"rQhs  rQc@sNeZdZddddZeddZeddZd d Zed d Z d dZ dS)r4r^r_cCs||_||_||_||_dSr+)rI completedr6rD)rerIrr6rDr!r!r"rfszUpdateLog.__init__cCsF|dkr i}|t|dt|ddd|dgD|dS)NrIrcSsg|]}t|qSr!)rQrFr.r'r!r!r" sz'UpdateLog.from_dict..r6rD)r]getrgr!r!r"rFs  zUpdateLog.from_dictcCs|||}||Sr+)rErGrF)rhr r:r;Zraw_jsonr!r!r"r5szUpdateLog.from_app_datacCs(t|jt|j|jdd|jDdS)NcSsg|] }|qSr!)rK)r.rr!r!r"rsz%UpdateLog.to_dict..)rIrrDr6)rXrIrrDr6rkr!r!r"rKs zUpdateLog.to_dictcCs>tjtjd}|jdkr"||S||jtkr4dS||S)NrF)rr0rr3r _check_start UPDATE_PERIODrer0r!r!r"rHs   zUpdateLog.needs_updatecCs|jdkp||jtkSr+)rIUPDATE_ABORTED_DELAYrr!r!r"rszUpdateLog._check_startN) rsr~rrfrrFr5rKrrHrr!r!r!r"r4s   r4c Cs|dkr dnt|j}tjdtd|||t|dd|D|g}|ddk} | r^dnt} | | d} | stj dkrt | d <t |f| } t d ||dkrd n d |j|| j| r| nd | _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!)rpr.pr!r!r"rsz"trigger_update..Z"_VIRTUALENV_PERIODIC_UPDATE_INLINE1)stdoutstderrwin32 creationflagszWtriggered periodic upgrade of %s%s (for python %s) via background process having PID %drz==r)rppathsys executabler stripformatrr platformrr rinfor/pid communicate returncode) r:r;r%r<r r>rD wheel_pathcmdrpipekwargsprocessr!r!r"rLs<      rLc Cs2d}zt||||||}W5td|||X|S)Nzdone %s %s with %s)rr_run_do_update)r:r;embed_filenamer r<rDr6r!r!r" do_updates rc slddlm}|dkrdnt|}|dkr,dnt|j}t|trHt|n|}dd|D}|j} | ||} t | } t jtjd} gg} }| jD]$}|jdkr| |q||q|rd}nd}| r|| d_|dk r | |j}|s tt|t| ddgtf\}}}|dks:|j| d d st jtjd}|j||dkr\dnd ||||| tjd }|dks| r| dj|jkrqt|j}t|jj|||d }t !d|t jtjd|||"|j|j#}|j$}|dk r ||jkr qq || _%| j%s*| | _&fdd|D}|| || _t jtjd| _'| (| )|S)Nr)acquirecSs"g|]}t|trt|n|qSr!) isinstancerprrr!r!r"rsz"_run_do_update..r>rDrlrDrlT)ro<)r:Z version_specr;r<r Z to_folderr>rjzdetected %s in %scsg|]}|jkr|qSr!)rr- filenamesr!r"r7s )*Zvirtualenv.seed.wheelsrrrr&rrprrrEr4rFrGrr0rr3r6rdrRr9existsrsetr,Zdownload_wheelosenvironrrelease_date_for_wheel_pathrrQrraddr%r/rDrIrrJrK)r r:rr;rDr<rZwheel_filenameZ embed_versionZ wheelhouserEr?r0Zupdate_versionsZother_versionsr/rddestlastZ last_versionr6Z download_timercZ last_wheelr!rr"rsl            "   rc Cs~t|}t|j}|dk rzz.|d|jdd}t|djtjdWSt k rx}zt d||W5d}~XYnXdS)NZreleasesr upload_timez%Y-%m-%dT%H:%M:%SrYz)could not load release date %s because %r) r"_pypi_get_distribution_info_cachedr:r/rr[r\rr3 Exceptionrerror)rr%contentr exceptionr!r!r"r>s  rccsdVtVdSr+)ssl_create_unverified_contextr!r!r!r"_request_contextLsrcCs|tkrt|t|<t|Sr+) _PYPI_CACHE_pypi_get_distribution_info)r:r!r!r"rUs rc Csdd|d}}zntD]b}z,t||d}t|}W5QRXWq~Wqtk rz}ztd||W5d}~XYqXqWn0tk r}ztd||W5d}~XYnX|S)Nzhttps://pypi.org/pypi/z/json)contextzfailed to access %s because %r)rrjsonloadr rrr)r:rurlr file_handlerrr!r!r"r[s  & rcCs\g}tD]8\}}|D]*}tt||||fd}|||qq |D] }|qJdS)N)targetargs)ritemsr _run_manual_upgradestartrRjoin)r r>threadsr;Zdistribution_to_packager:threadr!r!r"manual_upgradejsrc Cstjtjd}ddlm}||d|g|d|d}td|||dkrFdn|jt |||j |gdd}||tjtjd|g}|r| d d d |D|rd nd } d| } tj| f|dS)Nrr) from_bundleF)r:r/r;r<r r=r>z(upgrade %s for python %s with current %sr)r:r;rr r<rD css|]}d|VqdS) Nr!rr!r!r"r1sz&_run_manual_upgrade..znew entries found: %szno new versions foundz upgraded %s for python %s in %s ) rr0rr3ZbundlerrrPr9rrrRr) r r:r;r>rrcurrentr6rZ ver_updatemsgr!r!r"rxsD     r);__doc__ __future__rrrrrrrrr itertoolsrpathlibrshutilr subprocessr r textwrapr threadingr urllib.errorr urllib.requestrZvirtualenv.app_datarZvirtualenv.seed.wheels.embedrZvirtualenv.seed.wheels.utilrZvirtualenv.util.subprocessrrmrnrrrCr2rSrUrXr]rQr4rLrrrrrrrrr__all__r!r!r!r"sh                '  5,$ H)