o $"b<@sdZddlmZmZddlZddlZddlZddlZddlZddl Z ddl m Z m Z ddl m Z ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZm Z ddl!m"Z"ddl#m$Z$erzddl%Z%Wn e&yYnwe 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|r t|||||tfdd}t||} |duret| jdddD]9\} } t| } tfdd| D} | D]#}|durSt |j j |j krS|S| | ra||Sq>q)|S| jD]}|j j|krv||Sqh|S)Ncs*tj|j}td|rdnd||S)Nzusing %supdated wheel %sz periodically )rhousefilenameloggingdebug)ver updated_wheel)app_dataH/usr/lib/python3/dist-packages/virtualenv/seed/wheels/periodic_update.py _update_wheel3sz&periodic_update.._update_wheelcSs|jjddS)Nrr)wheel version_tuple)vr!r!r":sz!periodic_update..)keyc3s|] }|r|VqdSN)use.0version)nowr!r" =sz"periodic_update..)handle_auto_updaterr. UpdateLog from_app_datarversionslistanyrrnamer*r$r-) distribution of_versionfor_py_versionr$ search_dirsr do_periodic_updateenvr#u_log_group all_patchesignore_grace_period_minorr-r!)r r.r"periodic_update-s,     rBc Cs\|||}t|}|jr,d|_t|_| | t |||||d|ddSdS)NT)periodicr<) embed_update_logr1 from_dictread needs_updaterCrr.startedwriteto_dicttrigger_update)r7r9r$r:r r<rDr=r!r!r"r0Ks  r0cs|j|}tdj|jt|}t fdd|j Dr.t dj|jdSt jt dd}|j |||dS)Nzadding %s information to %sc3s|] }|jjkVqdSr))rr6r+r$r!r"r/Ysz*add_wheel_to_update_log..z%s already present in %sdownload)rDr7rrr6filer1rErFr5r3warning NewVersionrr.appendrIrJ)r$r9r rDr=r-r!rLr"add_wheel_to_update_logUs rRz%Y-%m-%dT%H:%M:%S.%fZcCs|durdS|tSr))strftime DATETIME_FMTvaluer!r!r" dump_datetimeesrWcCs|durdSt|tSr))rstrptimerTrUr!r!r" load_datetimeirYc@sVeZdZddZeddZddZddd Zd d Zd d Z ddZ e ddZ dS)rPcC||_||_||_||_dSr)r found_date release_datesource)selfrr]r^r_r!r!r"__init__n zNewVersion.__init__cCs(||dt|dt|d|ddS)Nrr]r^r_r\)rYcls dictionaryr!r!r"rEts   zNewVersion.from_dictcCs|jt|jt|j|jdS)Nrr^r]r_)rrWr^r]r_r`r!r!r"rJ}s zNewVersion.to_dictFcCsN|jdkrdS|jdkr%|j|tks|r%|s#|jp|j}||tkSdSdS)NmanualTrCF)r_r]GRACE_PERIOD_CIr^GRACE_PERIOD_MINOR)r`r.rAignore_grace_period_ci compare_fromr!r!r"r*s    zNewVersion.usecCsd|jj|j|j|j|jS)Nz;{}(filename={}), found_date={}, release_date={}, source={}))format __class____name__rr]r^r_rgr!r!r"__repr__szNewVersion.__repr__cs(ttkotfdddDS)Nc3s$|] }t|t|kVqdSr))getattr)r,kotherr`r!r"r/s z$NewVersion.__eq__..rf)typeallr`rtr!rsr"__eq__szNewVersion.__eq__cCs ||k Sr)r!rwr!r!r"__ne__s zNewVersion.__ne__cCstt|jSr))rrrrgr!r!r"r$szNewVersion.wheelN)FF) ro __module__ __qualname__ra classmethodrErJr*rprxrypropertyr$r!r!r!r"rPms    rPc@sHeZdZddZeddZeddZddZed d Z d d Z d S)r1cCr[r))rH completedr3rC)r`rHr~r3rCr!r!r"rarbzUpdateLog.__init__cCsF|duri}|t|dt|ddd|dgD|dS)NrHr~cSsg|]}t|qSr!)rPrEr,r&r!r!r" sz'UpdateLog.from_dict..r3rC)rYgetrcr!r!r"rEs  zUpdateLog.from_dictcCs|||}||Sr))rDrFrE)rdr r7r9raw_jsonr!r!r"r2s zUpdateLog.from_app_datacCs(t|jt|j|jdd|jDdS)NcSsg|]}|qSr!)rJ)r,rr!r!r"rz%UpdateLog.to_dict..)rHr~rCr3)rWrHr~rCr3rgr!r!r"rJs zUpdateLog.to_dictcCs8t}|jdur||S||jtkrdS||S)NF)rr.r~ _check_start UPDATE_PERIODr`r.r!r!r"rGs    zUpdateLog.needs_updatecCs|jdup ||jtkSr))rHUPDATE_ABORTED_DELAYrr!r!r"rrZzUpdateLog._check_startN) rorzr{rar|rEr2rJr}rGrr!r!r!r"r1s    r1c Cs|durdnt|j}tjdtd|||t|dd|D|g}|tdtdk} | r3dntj } | | d} | sFtj dkrFt | d <t |fi| } t d ||durXd nd |j|| j| rj| dSdS) 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!)strr,pr!r!r"rrz"trigger_update.."_VIRTUALENV_PERIODIC_UPDATE_INLINE1)stdoutstderrwin32 creationflagszWtriggered periodic upgrade of %s%s (for python %s) via background process having PID %drz=={})rpathsys executablerstriprmr subprocessPIPEplatformrrrinfor-pid communicate) r7r9r$r:r r<rC wheel_pathcmdrpipekwargsprocessr!r!r"rKs2  rKc Cs@d}zt||||||}Wtd||||Std|||w)Nzdone %s %s with %s)_run_do_updaterr)r7r9embed_filenamer r:rCr3r!r!r" do_updates rc sNddlm}|dur dnt|}|durdnt|j}t|tr$t|n|}dd|D}|j} | ||} t | } t } gg} }| jD]}|jdvrV| |qI||qI|rad}n d}| rj|| d_|dur| |j}|stt|t| ddgtf\}}}|dus|j| dd st }|j||durdnd ||||| tjd }|dus| r| dj|jkrn@t|j}t|jj|||d }t d |t |||!|j|j"}|j#}|dur||jkrn |dus|j| dd r|| _$| j$s | | _%fdd|D}|| || _t | _&| '| (|S)Nr)acquirecSs"g|] }t|tr t|n|qSr!) isinstancerrrr!r!r"rs"z"_run_do_update..>rhrCrCrhT)rkz<{})r7 version_specr9r:r to_folderr<rfzdetected %s in %scsg|] }|jvr|qSr!)rr+ filenamesr!r"r8s))virtualenv.seed.wheelsrrrr%rrr rrDr1rErFrr.r3r_rQr6existsrsetr*download_wheelrmosenvironrrelease_date_for_wheel_pathrrPrraddr$r-rCrHr~rIrJ)r r7rr9rCr:rwheel_filename embed_version wheelhouserDr=r.update_versionsother_versionsr-r_destlast last_versionr3 download_timer^ last_wheelr!rr"rsp               rc Csxt|}t|j}|dur:z|d|jdd}t|dWSty9}ztd||WYd}~dSd}~wwdS)Nreleasesr upload_timez%Y-%m-%dT%H:%M:%Sz)could not load release date %s because %r) r"_pypi_get_distribution_info_cachedr7r-rrX Exceptionrerror)rr$contentr exceptionr!r!r"r?s rccsdVtVdSr))ssl_create_unverified_contextr!r!r!r"_request_contextMsrcCs|tvr t|t|<t|Sr)) _PYPI_CACHE_pypi_get_distribution_info)r7r!r!r"rVs rc Csdd|}}zBtD];}z t||d }t|}Wdn1s%wYWW|StyG}z td||WYd}~q d}~wwW|Styd}ztd||WYd}~|Sd}~ww)Nzhttps://pypi.org/pypi/{}/json)contextzfailed to access %s because %r) rmrr jsonloadr rrr)r7rurlr file_handlerrr!r!r"r\s(   rcCs`g}tD]\}}|D]}tt||||fd}|||qq|D]}|q'dS)N)targetargs)ritemskeysr _run_manual_upgradestartrQjoin)r r<threadsr9distribution_to_packager7threadr!r!r"manual_upgradeks   rc Cst}ddlm}||d|g|d|d}td|||dur dn|jt|||j|gdd}d |r5d nd }||t|g} |rP| d d d |Dtj|g| RdS)Nr) from_bundleF)r7r-r9r:r r;r<z(upgrade %s for python %s with current %sr)r7r9rr r:rCz"upgraded %s for python %s in %s {}znew entries found: %szno new versions found css|]}d|VqdS)z {}N)rmrr!r!r"r/sz&_run_manual_upgrade..) rr.bundlerrrOr6rrrmrQr) r r7r9r<rrcurrentr3msgrr!r!r"rysF    r) rRrBrrrPr1rYrWrKr)?__doc__ __future__rrrrrrrrrr itertoolsrshutilrtextwrapr threadingr six.moves.urllib.errorr six.moves.urllib.requestr virtualenv.app_datar virtualenv.infor virtualenv.util.pathrvirtualenv.util.subprocessrr wheels.embedr wheels.utilr _strptime ImportErrorrirjrrrBr0rRrTrWrYobjectrPr1rKrrrrrrrrr__all__r!r!r!r"sd                   9-! B(