From cd578de80dd24c0c3e7537426f9a380924a129c1 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 1 Jun 2026 16:20:59 +0800 Subject: [PATCH] feat: add invalidate_all_caches() and GET /__hot_reload__ endpoint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit invalidate_all_caches() clears module-level caches: - rbac: UserPermissions.ur_caches + rp_caches - pricing: PricingProgram.pricing_data - uapi: UAPIData.apidata + org_users - llmage: _uapi_cache + _uapiio_cache GET /__hot_reload__ endpoint (registered only when hot_reload enabled): - Manual trigger for cache flush during development - Returns JSON with list of cleared caches Automatic trigger: - config.json change → invalidate_all_caches() called automatically Each module cache is cleared independently with try/except so one module's import failure doesn't block others. --- .../configuredServer.cpython-310.pyc | Bin 6601 -> 6716 bytes ahserver/configuredServer.py | 6 +- ahserver/hotreload.py | 80 +++++++++++++++++- 3 files changed, 83 insertions(+), 3 deletions(-) diff --git a/ahserver/__pycache__/configuredServer.cpython-310.pyc b/ahserver/__pycache__/configuredServer.cpython-310.pyc index 689be3dac7520934bd82a560cc4f6f64fc4a8d57..574d7fa784866a512711be98cb2027c2c0bc1994 100644 GIT binary patch delta 1996 zcmZuyO>7%g5ZrsET#&dRG4nPgZornmoi}gx zn|U*D#^3FKav)hrBw`ADo(^{wL+Ou_9fW?_-$PE{*gLuRMs_kwl)N&z4}SY;hHjiy zCJ)dyx(S{KM-{r6Zkbi+7CTxzbVr*!44QV@0h*3G>g18-yJUorFn_8J_KTK6#W$E; zs+iO$m}OeBnaDWhDYN8I)3*(?R5C2nD%c+XOC2XW_>0;Q>Em-+=cR6lj`aZOsz_NS z+bmaI%fD$@6;|51;4@qLc5kJxHKR0ycyub#d{r$k_fYDvu!? z2M`GZqBK3vvLOXVo%InkkpT|yA0rtuu>4yjN7@HLtrLdc^;QuxtA4?_js$Fk7otbw zxFIytb=d%a934K0Ct)ujj3AuDZ54LU;z}Bme4W=IBg;J-vZPz)48vbig*v!bklYdx znhRMElE+!>wl#)4tCs8{F2@l98GfF224kAf`1uIU#%p_S}1Ye0(#T112N zN4#n-=iFoyd@SA-)JqcYdp}GRs*Ef8rk9)#yRbBG@Tt^=VLU0sF0W0jQZ_u_WN;+ecS|a}1lxjGby<-Y z2rGUQvykVcdGr)Rv7RZu(wGJ`a?rv)nylq^mE~5za zU=YvN{8`$S<9xucw0a$OnYtCH>>nRJbESKI$iKE`x9(sY&`Zp!lygr0BD4V8gdVUZ z*c{)N&TZR<;w}W7CnDx}P8ni{5JiYOmJiMTb^5@JJbZ*zsy@uq2Ap_#+h<$xJr6-n z$0?LTNYlWoWdlcpi>kW-dLrnPIaHiQ8)CA1xR}R9vM$|LF3)b`4$ct~$Kd%Zne?u= zQTGmltgy=7LRpR-tfJ7sDHhhd%pYVdNoRy2Qv@Hqk=iG2znnwgz< zJUAKrad?#~vur&a@M56s8rno$X2XmCC-%xz!XSdN`7THc@bgjtDH0_riQxC|R4BwZ zw{?x<)Y9YZ1U%SDgkgjcY0^G z(iVad`k_hvx=*I5p-~fQ`k>;2G5X|F6CaF^H!&vu0saT3o^z+r4Z558-Sc(NIrp4< z?oUS_4aLi`SVV!JbE>m2m;5B2CU1Uwu#1cmC9lj5z&A)!v}H}1JwjV)8>~Z93f)E9 z*A&`r>xHAM+Uzh$I%pas=~Z?1*ye}iG$9)QT|LZy)^_npZItZeD}ej?k6LGVH$-E5 z_#ax^P#2Qj2>Z672PhFYDa~3%+bmUF%U_gs2hhaW>4-XURCa8C^l5-fE`DZs=WAn;pwyeC>%u? z0}!z+WNCVyWfzOtY?bvfG?5AR0fk;X9Y9y=iLNI!*0$nPm+Zj<${ z`^u79&QK)i3FN~B!MdOq}`;xe464V6v9 zB8XLWc6n*AjEnF=c_tgDCR`+|Jw=}kXBMVYx?&7Xo>p+%%hkZkuZ?5aAAYE5`k2fm zqhuSo!@o{?Y1g5dcbsA|W6j&vLdGdk+qD5oe(@?FX&&6Ym(`)m zh*d7-ocwvXvaAi=ok6(4Z#L(;Gf4I#;FBRDj^~u1vXGAmQOELOe&ea5m*jQ1jArr) z^N|YShFVrBWpS=cC|UzBV!;i+fr3f2Att+p%uQtCRTZ&vc_y1P!GB0~_PvWns|a{r zc)nJU#$l8bD>R7Z0Oy_Ok5kX_@s?j!)mcCn^c!{~x~6+P#9$j1grg zVPVfAoI+?ukgu$qx+!FF27^M~Lkitiwf1SeaZuo~Wjq}truBMV)3r!#{V+qVF~T@3 zLi4UBJ*FZV@}0MB_CAp8`sPsE6*87VTK0B7QU-vCPPlH-u}t47ml!_j(%pZu;D7HL Rk2jN$8X~%?YfV~H!@p`5r