From 89153832b40c130a362268b3d486ab9a52faabca Mon Sep 17 00:00:00 2001 From: hmo Date: Mon, 29 Jun 2026 23:47:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20DSA=20path=20auto-detect=20=E2=80=94=20c?= =?UTF-8?q?heck=20server=20path=20/home/hmo/daily-stock-analysis=20first?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/price_monitor.cpython-312.pyc | Bin 27213 -> 26064 bytes .../strategy_lifecycle.cpython-312.pyc | Bin 78711 -> 78494 bytes mo_bridge.py | 16 ++++++++++--- mo_provider.py | 22 ++++++++++++------ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/__pycache__/price_monitor.cpython-312.pyc b/__pycache__/price_monitor.cpython-312.pyc index c83b2935639351410835dbfcf59473c57de3238f..1052c04c81a39f6de5dd22de8ca14069251be502 100644 GIT binary patch delta 5502 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 WGg>w%uhz4Ojoc=)@)sr+@V@~e)PF$$ delta 6525 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 diff --git a/__pycache__/strategy_lifecycle.cpython-312.pyc b/__pycache__/strategy_lifecycle.cpython-312.pyc index 56d64fee2a853d9b43ee78bdc05312012f6369fe..1b2ab9a44dc63eecd1d4f150de1b6b47272ffaac 100644 GIT binary patch delta 2150 zcmYjSeQZJ*NtH?z;nE(jGRP(LlGmQM@Dj+U?zORD4mj6o;iue~L2&e(2i^z@eamc%IB z`UuAqEqQtKO?fk%A;{MC{eoIUJL691rh5Lr&&it~uc$PXs3OMHHI%qO=qPbnt%p3( zg<~3$)vBw+Km^TXCtfyL;W+8VF|!TMk&dRE+|6`&ILtw@6KFrn716@dczCRBuF|_ zQpU%OrMoz5XSO%YSq>C>20!Xt>bxGwj(sQBGtSrT=X%B$!ii{7cm5P(V}{Z#oMlV4 zXPkr2+c&l3?KoP+}KbTmZDgd#z839*QxQl^yie1N>8qhn?Ki3?!Jfu@YKaPWw+)f%jN@uoswf zL<2K=TW6#X#SbL`jKpx1tJ;$%8aSeXJ-2m_7?j}M?Opm3s4js}NpN!fSO_t%1cD{- zgU{{o>hKHf<(@VHn1!G9x$Jp;J0&Zqw6Vj<#!NL=-RHD4hB9I5M6&4aJ~^C4Tr9fjSl834bb*Bx1JM4(LfnZbI=(&$e;yPQE6H#-uMc z8aoO1W!;@rU$!P#aBj-@Gi{u+gV$_9BXaDHO~8Syvx7~%bN~nuD4zZI%NM?yU8J@O z@G@fl%Go+CVtz$|8C{HqGc-|(qOzuJ@IdkvGmaS>*^XDDLOdPh*>~o4t@*UU|HOT$ zTLP^AwMnVdjHeiynxDgcu6m zU~u$jfAxk_1n$Ee(}cvS0ZP(uuhEQsFMV66Q?G|k`jVrmHq?#X>5Ysw<%Pfe^%CfU zk;{I(Oc)?@`E4hrHddN2sd7$sM#hmXlq@G{U3GaM;Xu`b+Dg?@ba~?=a4KUG6+u&pF#Cl4{ zZvImY_Q0dXSMjo34F#nP5)TdgZt03puUXGD)13)l>75_AGO+N}Vl>w_2w(i;4Y_oE zFA+{EZ`QTKr&sQRMHpIbmE{5h4>3TtbAbVPVznO6qW{HJ0}8H%zgun9U$Y2gp^M$AX*#h1lt5{IQVw2}foJFkB=|PIta8#%8h}%S5iSIl(9q(zI5w43 zFRM1vv;m-}fpE~*4PelfYdgrBr@6L+Of(xgl8;2WNHlwF>Q>|wDvkL3A%-{~$+jJ& z14aCrV&ixd0p$gqZXV-a##BV&6q&F5Hsxt^PiXiEk}y#qYrujqMpJ_U-W=F z5>qxK3D)ZA{&;_)GkJ`!@yrgF6}5EU14eL6X`&k%L7*k)3i8Tf&J|4B7NQ@Vc>l!W z-rvr|04<7(V&DC-JnIV14rG*51zPcT)nYR zl4rIRHq?Ad80mNuct?V%Yb!ELX`uVOAdPgPj{d?6wj*J%%m@{rHyO&pa~5ym1;B^fL*7_B*?fbnwelFoq78p0%e2#baS6|&*KTEnzd z49Aj8E%w`jq>S5bzOcwvF8i5i`yW5K4PSXGpH`aBIEp!)B)pnf*CJ&027a_Yf)LC2z1r+%TAS56zCmQQUu; zNz^8GO|_;1}D zh29+5AFrBLr@Y~$zKNqGpihBhGIO+KbLEIa#)t28jFU2M?X0FnYjBD1Lh4@Y+(?VI z8gQL;;SV|=m;iG%1Z&K7AXv`^!Mt#J<8Mju=+&M&wF=yrAmX(Xgm9_HfzWC^*ITE6 zFLmFK5v$!ZcHqF?m-ZYU82iyaJo&Xhqcy_wn@@Wnb)Wz6tO9JD91YnmVB?EVi7zII z+uDx!9&R+Ue@^E~X*-0!jp{*3_}AD^$p6!7h!1ijk-lZE2I1^s27#&b;{%|peHp7z zy>RBWM+$9xIBlql8zP>_MjR0F$=AQTGFcf;7d6FeBU>T|aeuO?iR*wt@~@t*o32m# z*QQO4u%Ruo7k4F1jY8cULr9qnZkQ8}zj@-B)WEG%(2`7gC1b${kCr$9vs%JYkuas~ z)tq)-S0vft_LZyyPaSoUfWn`Sjws1Q)11(JtViBm4;9L;#cxGxNkHLhbd)LdLLRSgr6if(v-+M?R9o}?i4RBLwP~`{>WyWuuNsxd-%`f~EdV+T(;O-48a)h1H;x`lT zlYm0~)O{r?!iMuEWjr`RVE_5+K=Mz|*D;d8o+Hf6*AXtc@V-wLveg8mJEob`q-?7= z%^Y2msR#mr^{bW$80L%0@INjTE1nR7embL3=8-QiJidI4M1JA*t5b+hn!-7Pg>GAO z{Rjyt{QCM{gcnCZIMHM{fLh*;kZ8F={NO`T?WH8vR6rAlgG?#f3Wqco0ZYG^Uk z1?6gM!1pp<3M$&x@Y6**Be7-(g4%@ez@iz~E;=3ZN0uhE`eWNCw@12SLn7<>uS!FY zy!^P3aQl+J&|P0s%GV_Nn&$)Ek4fb2L69cOl%gFR9jVM{Eyso@hhuBwTSRRIM@p{X zT~}SoRVTXO@lrD;oL+p92Fw<~CZY4=S5|o4;Qq5BbN0nO$xz4LPIUVxL3mdtHcLiFY-h^olLM{bRGBj0xizQPBr2!d#j=L9bz5w3w)Sf1 zQs|oHa`TN&v1#iGblbX(Q*di13nkimmo7=sC9#8dXg|=Gs^HtJP@PH)_NGk({Hs-{ zIA|J}=uMgiB!eqXrwo-7n str: diff --git a/mo_provider.py b/mo_provider.py index 68b483b..b9bd646 100644 --- a/mo_provider.py +++ b/mo_provider.py @@ -36,14 +36,22 @@ logger = logging.getLogger(__name__) # ── 路径配置 ───────────────────────────────────────────────────────── -# DSA 源码路径(相对于 MoFin 项目) -_DSA_BASE = os.path.normpath(os.path.join( - os.path.dirname(os.path.abspath(__file__)), - "..", "daily-stock-analysis", - "ZhuLinsen-daily_stock_analysis-a448886" -)) +# DSA 源码路径(按优先级尝试) +_DSA_CANDIDATES = [ + "/home/hmo/daily-stock-analysis", # 服务器部署路径 + os.path.normpath(os.path.join( # 本地开发路径 + os.path.dirname(os.path.abspath(__file__)), + "..", "daily-stock-analysis", "ZhuLinsen-daily_stock_analysis-a448886" + )), +] -_HAS_DSA = os.path.isdir(_DSA_BASE) +_DSA_BASE = None +for _c in _DSA_CANDIDATES: + if os.path.isdir(_c) and os.path.isfile(os.path.join(_c, "data_provider", "base.py")): + _DSA_BASE = _c + break + +_HAS_DSA = _DSA_BASE is not None # ── MoDataProvider ───────────────────────────────────────────────────