dbfdg 3 why@s,ddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z ej dZ dZ e dZe dZe dZd3d d Zd4ddZd5ddZd6ddZddZd7ddZde dfddZddZddZdd Zd!d"Zd#d$Zd%d&Zed'd(Zd)d*Zd8d+d,Z d9d-d.Z!d/d0Z"d1d2Z#dS):N)datetime) constantsz^(\d+[.]\d+[-]\d+)FwcCs|d}tjj|}|r0tjj| r0tj|t||&}|j||jtj|j WdQRXtj|tj }ztj|Wdtj |Xtj ||dS)Nz.tmp) ospathdirnameexistsmakedirsopenwriteflushfsyncfilenoO_RDONLYcloserename)fnamecontent ensure_dirmodeZ tmp_fnameZdnamefZ folder_fdr+/usr/libexec/kcare/python/kcarectl/utils.py atomic_write s     rutf-8cCs4t|tkr|St|tkr&|j|S|j|SdS)N)typentypebtypedecodeencode)dataencodingrrrnstr7s    r&latin1cCst|tkr|j|}|S)N)rutyper#)r$r%rrrbstrAs  r)cCst|tkr|j|}|S)N)rr!r")r$r%rrrustrHs  r*cs4itjfdd}|_j|_|_|S)Nc sH|tt|jf}y|Stk r0YnX||}|<|S)N)tuplesorteditemsKeyError)argskwargsZ cache_keyresult)cachefnrrinnerSszcached..inner) functoolswrapsr2clearZorig)r3r4r)r2r3rcachedOs  r8csFdkrtjdkrtjdkr*tjifdd}|S)Ncsfdd}|S)Ncs}xltD]`}y ||Stk rJ}z|s:WYdd}~XnXtj|t|tjdtj}qWy ||Stk r}zt |dWYdd}~XnXdS)Nrattempts) range ExceptiontimesleepminrandomuniformrRETRY_MAX_DELAYsetattr)r/r0Zldelay_exZfinal_ex)backoff check_retrycountdelayr3staterrr4os     z'retry..decorator..innerr)r3r4)rErFrGrHrI)r3r decoratornszretry..decorator)r RETRY_DELAY RETRY_COUNT RETRY_BACKOFF)rFrGrHrErJr)rErFrGrHrIrretrycsrNc Cstjj|sdSg}tj|}|dk r2tj||}xD|D]<}tjj||}||krh|jtj|j |f|j ddq8WxF||dD]6\}} tjj | stjj | rtj | qtj| qWdS)NT)reverse)r r r listdirfnmatchfilterjoinappendstatst_mtimesortisfileislinkremoveshutilrmtree) Z directory exclude_pathkeep_npatternr$r-item full_pathrCentryrrrclean_directorys     rccCsNttjjtjdddttjjtjdddtjjtjrJtjtjdS)Nmodulesr)r^patches) rcr r rSr PATCH_CACHEr CACHE_KEY_DUMP_PATHunlinkrrrrclear_all_cachesric Cs^tjj|}tjj|s"tj|t|d(}tj|||jtj |j WdQRXdS)Nwb) r r r r r rr[ copyfileobjrrr)responsedstZ parent_dirrrrr save_to_files     rncCstj|}|r|jdp|S)Nr) VERSION_REmatchgroup)versionrprrrstrip_version_timestamps rscCs0|jd\}}}|s$|jd\}}}tj|dS)NT z%Y-%m-%d) partitionrstrptime)Zstr_rawZstr_dateseprCrrrparse_response_datesrycGs0ddlm}djddtd|jf|DS)Nr) ipv6_support/css|]}|jdVqdS)r{N)strip).0itrrr sz'get_patch_server_url..)rrzrSrRget_patch_server)partsrzrrrget_patch_server_urls rc Cs0tjj|sdSt|}|jjSQRXdS)N)r r r rreadr|)filenamerrrr try_to_reads  rcCs ttjS)N)rrrgrrrr get_cache_keysrc Cs.tjj|s|St|| }|jSQRXdS)N)r r r rr)rrdefaultrrrr _read_files  rcCst|d|}|S)Nr)r)rrr1rrr read_files rcCst|d|}|S)Nrb)r)rrr1rrr read_file_bins rcCsBi}|j}x0|D](}|r|jd\}}}|r|j||<qW|S)N:) splitlinesrvr|)r$r1Z data_lineslinekey delimitervaluerrr data_as_dicts rcCstttjS)N)strintr<rrrr timestamp_strsr)Fr)r)r')r')NNN)N)N)$r rQr5rer[r?r<rrrcompileroZ CACHE_ENTRIESrr r!r(rr&r)r*r8rNrcrirnrsryrrrrrrrrrrrrs@      $