From 278d65f8f0c88adc550c63ef778c45a1d6ed8055 Mon Sep 17 00:00:00 2001 From: Tyler Date: Thu, 10 Sep 2026 15:50:03 -0700 Subject: [PATCH] new plugin --- machine-learning-pack/__init__.py | 8 + machine-learning-pack/plugin.json | 2 +- packages/machine-learning-pack-win-x64.zip | Bin 95924 -> 0 bytes packages/machine-learning-pack.zip | Bin 0 -> 31115 bytes packages/remote-processing-pack.zip | Bin 0 -> 9679 bytes packages/roi-builder-pack.zip | Bin 15681 -> 7384 bytes remote-processing-pack/__init__.py | 869 +++++++++++++++++++++ remote-processing-pack/plugin.json | 10 + roi-builder-pack/__init__.py | 2 +- 9 files changed, 889 insertions(+), 2 deletions(-) delete mode 100644 packages/machine-learning-pack-win-x64.zip create mode 100644 packages/machine-learning-pack.zip create mode 100644 packages/remote-processing-pack.zip create mode 100644 remote-processing-pack/__init__.py create mode 100644 remote-processing-pack/plugin.json diff --git a/machine-learning-pack/__init__.py b/machine-learning-pack/__init__.py index bd201d4..8329ab8 100644 --- a/machine-learning-pack/__init__.py +++ b/machine-learning-pack/__init__.py @@ -1,3 +1,11 @@ +""" +Filename: __init__.py +Description: machine-learning-pack plugin + +Author: Tyler de Zeeuw +License: GPL-3.0 +""" + import base64 import io import json diff --git a/machine-learning-pack/plugin.json b/machine-learning-pack/plugin.json index 2db1284..dcfc823 100644 --- a/machine-learning-pack/plugin.json +++ b/machine-learning-pack/plugin.json @@ -6,5 +6,5 @@ "description": "Machine Learning on Processed fNIRS Data.", "min_app_version": "1.7.0", "platforms": ["win_x64"], - "download_url": "https://git.research.dezeeuw.ca/tyler/flares-plugins/raw/branch/main/packages/machine-learning-pack-win-x64.zip" + "download_url": "https://git.research.dezeeuw.ca/tyler/flares-plugins/raw/branch/main/packages/machine-learning-pack.zip" } \ No newline at end of file diff --git a/packages/machine-learning-pack-win-x64.zip b/packages/machine-learning-pack-win-x64.zip deleted file mode 100644 index abf3194fd24dd96eefc5d2b007e13afdfca03946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95924 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 HQ3L!B>DF1& diff --git a/packages/machine-learning-pack.zip b/packages/machine-learning-pack.zip new file mode 100644 index 0000000000000000000000000000000000000000..3cd06442550f2c141988df876886465a27a8e830 GIT binary patch literal 31115 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 literal 0 HcmV?d00001 diff --git a/packages/remote-processing-pack.zip b/packages/remote-processing-pack.zip new file mode 100644 index 0000000000000000000000000000000000000000..ce9bfedb8b3490c81f57c07a9b7257fdb36207b2 GIT binary patch literal 9679 zcma)?1x%e!oAwVb2PsnA-L1I0`$3D#!QI{6rAYB|3dP-vOL2E7F2&vT>woiZb~o8~ z^UdU*%#%#6J9FKcT2y^ z$?RleX3OgC1q49B{&Vg>7EKLQ0K&*8h|SL582lTm{~?M9Km=GD(EkrnihnQaWan;a z?Z9H=>ge#l>HjMEW;69Kef#7dn?5#_i1YBy(970ZJv_pjb_6=JAMqHRGIISyt3%4O z?k8)OkxA}s8@uNcPvAg%9tu*qctPZ0-iI(vV@Eb=7lV)8enV>%e0VihD)ltVnMA$0-WGWDXz_Md`7F6 z-u+c-JxP|2x!(Q_eYn?L8{|74C3LnSmlyNn7pPo$)3wh-HOL+(LsH{xho113K0*LK z149!2vCRz?HEm>^{~l1>YZHi7>86FW829> zNTTiSoBUC&(feT&4mXy+Jgb7KWH`^RPMbPbfo8S#!p&7Zie}i=u)e;cW$1DJUN?D; z(Bq56QknsH{Ade?`$4yN%J*9G;>)~#gLhvRKYf47VrnEhi7>BSwx;f+P7A%B*9C{( zg*YHjB&YNDGlS2|g;>yoh+k4=d7T3uw9lRU{U66drZy4z>DSNT*wGx%z!=R55syGF zKLc{D*HF8)_vt3xr;DCCmPI?%B@0ahmX;4}M#Z0B=C0DqX*6dluI#Fea%p4%KC^ZV zkV(Qq`xHV@X$rrtWd^lyA<2*IdZxX}!u+g1;PIc+>tlgCu@)l%{6_PFa+kQ>&3Vx1 zEQp2kkCEKRPb4f(IzNW1b$xmWzh#G~Sc(v9Y34Cwo76wp4{Vabsn=92Wdt6S(Vr8V73(- z7#0O{YW#5|W9xJ*aG~BDSdfzL3y!^gyxu6?xHd&?4|JR;Y{O=7hicV3&Aq>VcYfzj zm+1EL-Kgc%IodLj(>h9kD5A8JOJjWV_NqtTQ+q}azW#jeOf!inWDE$-{96ym@u53D!%O;lq zR{5tn-(0F7inrP^keBNn<#FqP`Z|>^8i>_)p@LVhfh#4AeqeZnVnb3smXc`Ki^x)H zq2HO#tFz%TOyoiE2sUWRy5mF=+ECcvrh^DEx|v7uvaDiu8eVUABnPp=kiL@H3KGD5 zT{jlLTtXeH(&u2oL_b5`^okX4_}<@RXhS!;xb)jbLh z50(WK?d!f*@kp=D9E{jXZQvy}A0%LuRXog-bh>m$20T6DpXipC#tK$%VunAiGuc7; zjQVLIoUe|1Ib77Q4D(pVdV!*goGL4(wcB-HF?i_8<-3>l;nDXH;%FzjD^lugyN3;c z9~lvy9&j^~^DdVO3Thf}sNjIw1-DszDg^9OuC8j34(smw$S&NywvpBwu(v@*W9H^3 zsn4*$ne@4J9B7EYFqVyQ` zEd}rifv5>1t(z8PRSux@yM2mElhpmTa0qlVPZZO0?$-Z|#l6A#fa{1e4I7qZ zFt0m%0ZpH$ssWci|NXW7rG!YafEyOsE^(c~6le%o#H5J|`xu3aSWHtyB{U|+h6#&g zi6o&wLi0hthax%DCM1ex^jgR*VQKmD(fSA1GGCL5@E6@Oz_`LiVTr;WI+AhtLz==c z6qQci9IigQcmXB#BcS|`86*jmGpaz&ebP0#-oB2Yi>3qC|H;CJM{%nM{wPx$-55s07Xcs}E+%jdrorHS_FR*JxHfK+0j21tCw7Ta%hbDr)Q1bLgMScW z^AX^Du7Ei791XJuPnix(pNw{^5ze%?N5Kgl8bN_+4Fl~;4M?A+JIjrsJUA&!O5qm4Mx8>%SkXQ6yW(S&(x;FW4Gl^XItw+JpdJD?X zRJcRUMp4zPETTHMd$+egUrMf2G2?96Bv?wo4mDjNdYXz8m9N0;E z$dInYbtO-WHsyOr1`}gepyA7w%Rc;v#UDqmcGFwgR=X7;;#h^%(V0aN5pO-K@Urbh zyb-8)DjN+5iXT#+VT-y($YVGx(ThT*0ny0U;n9@9H+oT`{Ddj4YiC$G90uwPk||Lw?Yp2pl%)fW48SsFx%{VjU7VH5CAe@K>1ThNVJS2`Fb!@!J?t zLNZQrxpG{($qDAmKI5|}`t^R-%mM|Cw)cxMJW{+aHdPh%) zYDg`uOBF;3*;;klGGUk0lD@X0BB&WqGwG)o234oYj$?39BF*MW7e6K`P>UhBXS9VZ zzA`{3RIi6p*;__rI6pf+_nu>?+_nP@n-1&v2Y%b2f=SJF*u6##&PIt}*1)dV`>85$Nb=G3YAW(-!Rl^S8nyI*{drwz+D~UOZ zRMY!%TrzbT0<9?btf^|Hg$_IQ)Xx-)ANoiV<-#WYb)C|V5H#dkm@LkWutfDL_&eKN z#J3Vr;&i=op~7--_s3{?us#sLd29y*F)=mm&5T93E^pk}b@9Xm0Z>XU9g+J-0ucPV z22$5p#STK*&F26i4CuZDBT?AQ>O0%ii7J1wga>5gOviaq|NJXHBT)9+}o#N{)@nbrW-2h(sC8}X|~Zw<5l5Sm3< znuC1d#i_4yK{%d?_Ml}1dIK!5_H+AB%2?^Y-9Y{HLx}&Q*ZU~#Ny@eSJ|Z1+ffmwJ z`kwlpvDKfq`=!Cd@7Uslxc%l@HU;PpCSWP=>37npJ?#&p5Z=g*Y>ws&zQElXk4&vdQSNX z-dQrb*f;)ODU@03;OCam@QVDhUB&7z5#Az62!!edJJ5>L&_ZCvgwmD4U}W?ZFoeSb z4{kWl%n%2cyM)ik6wzV#giTzY-9lL-gx&NYA1g5&+o2XZ_HjrIC?g+M=_5w88JGX$gw31M_%GWke-cLlp?CkpXUE-ok zD(KB}!yXp&lC0n?`tp`2tHDR$4~Pml=EasX&UDJU#uJNp5Q!WVHf2~?&n+(d(;-(5 zcbxEDbIpU?p0(|j)RVIE=iBUBj@n&obj(7+MTxy zflHLdH5SZ+5#InUJStmPZLB21}B<5^UV`d|p%O{948wi6^o@~tg(g*NfQCr2vS3OCA- z&Fs#jbN0&uC+A7=!Ybe5EuJC+vh?OU$^-b%@RWaz(ujwtLR<|ad2GWit+dCtX|x7> z2$E@yBF7g_@tz|evx0^(GpMISyyDNVDTavUeg zo_!1X(Zn@XV4uZ!k;cwg>51kZVBix&FZuI}JYddFM}u+-ho0{X{^?aoyN|9T9d$k( zLjJsMlXmD`->H^UPWDj5Z4>hpeY>p9lyHk#gL(N?+3FHP7qKexN77=+nI`y3!v$`t z)&_bHsX?6g4)y20&Ax!{uqHKD_yBiCuiX-4$8|JoA6rAhz!xOb7kq^?awB#QYet@~ zKYd^gkzXKYs#=W=5YBziW;YCx(blLa``E1$vmjBm=6hTLPd_ukVih(%bpgTrM8Y}; z4nJpWZ)K1A5MI%r5|#XoDn$nq^cru+ubgtipjiC9h~jNl zJuwv5?`KuIbx@N#(rQ)7S|o;gWh(4u9llm@f~_xYJdHxEBDj(PD@T#w_IzFa+(fgt z+qIB_?j?=;^);J^On8o9Ht#}(>OLjjByDu2xgn~^bt;s^-xiQL7cUATg6CI7v*Vdw z?i0WZN?N~+%h~Z%S^p{Pu$5jH##U1~;53*J-j{2Lhpjl=U;J!9*ZL z=3T~lZtQc;#^rEJ@U_tBWD%N&SA+YD&9t~KBldW{f2BA%*F`^c%drjKw^QdIkt^Z} zlTY3U!#=nnavF(b#^ll!^0nfb8?Vby@2@XcId!-B-8kj}HmFHr`YUk&z0M`=5tEVsw&k4v|i( zsDGwpP7jUwh%xbOpK8^i0EWiv4VyaCfb|p8B6)Tz5PbP8GGUUuBBQsZFD9Nx>n2=v zJscdTFZM7~4?^*49;X83WY}-jUL>L?Ua`qjt@JhVavpma38-411iWPg4#hrdW+f~Z zyF@kQkj;hx4)G>Ca-3y7+7Gbia(S;XvX#*qIHGQ@bs$Y-E3yuGhE9cCigz88tx~}h z6Ip8-^Cv$sek*z3E)FEscaYlTLE63Vx`O3sLV zd?;h;WN|tKLt3eum#dSMI|3b~^W$$pbgaFZ_$5?S>KbX9yqT983)uq7X$X?Kddh8s zFn7MmjtE%>*D~pG)QT`Xz*Mo>@9w&qpT$aB^p`2RuB})14X`_Z57;fF70=igiN6=3 znjxUS@1Hki!81D>b0}btXCm73K_eMBC`%t1)A{t?o_c)!tn<_~bNH}UgHOVclbG)+ z$=xvv+jpK32eYm$zZ$}@FQQOf zb)VEmm71J;#V?(bzEaZZiC%IO|2@}Vr4eR5SvGALYEP#byj@qsJW$ftKsOVtWD*_0 zN-aVnvf7A1>C!^!%N0v()LSiW4(T#|qSouK*ZfMbKdL8Gtg!ML>D^s_0(7m>YGX}X zP}?i8`Fscm8sE`kgBHIJ0r1ztxII$h%psg4&YAw04?C94Zza~_rF9%aT2n9J6D)T7 zj)gecBT%Nm6xuw=$QQX(tT9Gt1cr;+Q_N?7|4s>jCu<0MHR3++*&r5K{+QwJ5nPuD z&Wu&a`$fUJ_M~3UykL2v#lJq43ni`R9^0+sdl-jzdP-^HFGJnAxdc^|rKIA_w?&*d zs-`#V2y@IaIfy=5S?%WiJ!98kK?Ry*cpa}&?YIgPY8^yeRoz`PcKA7jR+&tT_UmRQ z=b!;=${d?lc-odce2or-Zkcla9pk7|Q+J!bzL>}hm+k0@LH(3s7tGreUnH8_-C$s| zF*J$wTeMpg6CEqQ&xx~+{KQvY22BefblSXM)9E6 z%u5f49fgFF!f?`9@gdTHcosKLf=E0p6K!aFvfkdvq}ZIV9)C`C5MG|4l>71yr=3q` z#X6u)m8CG+*R*IB^-5K`3pps^ULXE-;#gT>tLpb!FqP--!q756B{@rY>gGU=pB(POD1;asL~6w&U9fTu=MTP~hK%%*)2AfBtRNpHAxsSlG( z%i3!7B;OK1nwZeRYm&+X6(JjvdzxkkZT=gvAD5M-yZ-qa^@>zF!zBI~(ZlW$dH+#? zrmof9T3&{0Bpts#oLuOQh=w?*s|!8|P{dHGb9y8weK9;)UPY5So!_aBCeeg?N=3(oSIQh50Zy7`WaPM|sh}e!5kp z3+)V``7osz*E0Zp1-oDgGTdChgh<3MxDJrs30?ldNcAK%VK*DkXh}r<1oz%$1&Ky@ z;C-DS$aGf!afL&Mku}5ThuhI={%)?fE|Rf236bd79EBA}TlQHMg#@X-0B{_1BpcK8vDJ`Kd&v=2EoDT<~sghNk(SPJG5!6Sz z+F}M8a2;`ry!*$0o#adE#d$zY+;AD@2X=h>(OxDNI5W%(T)jyOxk+Zme^YbqG~HK)CvXoGX4!2(rOJ(N9pr zGRBlJ(fh=+T)B|IzvHWo8egr4_qhtCw1>o+SI3xl#?SmNyFTST_{19}4YsJUj&n{) zP;G!DDJeIPm@pQdDHJ`cTJanqt_FW{KQ5dgn4)f_BC2c%62y_$2{-NKbe5iJE~zwa zE!!@RtLOAQqLLQEaqaL!j!EGtyRg-55^b$eMGSR$$-$eQi8LvYk+|nwLYNX%Iy8rR z$_S;a_N^>)_(gc&PyMV)_Q1+cT)9|%6H5(#-uvj-(E;$9-{S6^18A6mHm@?Up|~go|Sh>J_3lOmw+fI z`>QzEXx+o-;qKyN(_v(Db~``6h$K3I0BX%?e@W}yE)wh7hDSlTLV@-G8a1|hVgRjE zdU)IA*f*CLukjjjOjp^o?o?WPX){J<5FgRq zVV^vj1Ncc}LtQb#Z9I&;nbVr{aDFoAr76;h7(me*fO>rH6Fcd@tv4o@vT(sl)8%kO$^x=<%5Yo+DH&*MVCcd z@|?4Eix4KB)i_|qE{ctjj18)LT(X?p0%w1& zNB9p+>90Fu8#L&S0i!~@!Hgq}Uiya7XI97EI2VaXhNI#?-y=R|2sma67Pnn7hf|aH zi-8p^Eqlfxl!y^02X$CbwZ>9|wtK`ZZl1>onIwWBwHl^xwCJ)zKBgq}9or|(TAN@N z7t30kXNx1@W)m8}n8pjBvedm0o-XI-`lcW-8Eci+qGc&qj2asthuIy4j9?i!c?r*Y zQGgSjMCleZn*to003E)f0DWuxJRH?%P4`@sw3kL-{aW`7z9=rPkS$B9aC%3lmNoT; z)(ep-#kjPZ^S7D%29erhd3e$u|pqy zeGdB>vH7sGpufR7>L|8EKYNbk+)$1_O1;rve!}BcRtJtt83)Ns`r3OQ*4cUTFs8me+%_nt-lOF?Gx*lX({5$rTVt-cwz`W&8@SjoW4QsmJlp-P zNg{L6slYOpcEBtfM>5uOJTc)Am3VT7B57*A79TyZ<~b`|PZsY`w60L`7GMAUy%%+< zGj7+rIm3NIYNzYc<7Pn-+<40PsWefLzPZmntBz{G)qVd@+m||0*VQ76Dze{)1ngbb zUB?}C51$4h*0-BB*x>pbq0$;`-)^_G?{8!J=$cPA-VHc7eCLDv0+%^Al2D z@_4(OnQyxmJ|iL*ORcm!HUacgmhC+wrsU1q;sz6(hOZ3=@m6`RSR!9(b|3bqIZAH0+~=!I0i;I34B;eQHbPNP?=OFZhsd8upgO)#r`8s|{*>-)r6&|>IzOIS7@BBYU_}3nG@`~=>gwK1p5pZ*5vsisIXl@m{-)zDLO3meBhEt~Dc%C1o&Gr2 ziQt*qjIB0yEv=@oE~K#B$}2(d*TDKt-?rXPwoCwQkbspvGj_rrXndQQZs=`CcIduX z{{hdu#zl5+xT?~*PJky}R!O=@epn8@zi7?02nP0h?pqQ*B5(TEryZ9=)o_$l7A|=y zP-wMo+*C6uWr`+9m}VBJQn777i=*TD`BCuPaX5KH4;YGZ^VGB}4CNVEnaaS~Y3~lC z5DL1yvs8+YJYo7VaJ(4D#}>N>wKiPRl@arI@z{2{*9fo<+PE~_Gy=}rkLxyIu(49 ztc65QE}1$yL{M9JJE@2x^n}DvYdvQ`VdaP?8^0=J^rzZV$NO#@ugB}pL?}HS`^3ZV zsZq$Aj+^Ie_ahN;7ilLWqAXrT6Z|BWf-1F1Vo&5P!83u%ac9hF%F9;Ys>0Kr*Xn%> zc0K716nlxM3H&~cS9qTZ?|N8rqCVpjeSAuoa3Fi+6KFRD8L)Z#7G0;GX ziLG+e#a-2}-Ml$FaL;t|OE+hjeb00I0U=WC>mk ztnHbG7z+L7nTZtl3pWdJue@(`gaqQU4q>`)hQ0t;FywJ=@1d~jFDvM;4xdotn)XB z9#9GoZ~Ju#O2%97i>iT-9PQw07?C9Wuq)=`UtSs8gl}?4)vOV)lOK6=Y?(-T;w;U1 zVbUjH{mJ((J#d?7uuxLQ5*IO z#3`i`L(#Zeu$OxSaMkt_kCanuQYm7m0>NCJ|Cr+100$*f2dM@@SXLp@Uc0G@_ zzp-3!K1$V@M%XVknvS79OR(e4H@|;*XS4E@%~2bt%69lrjC-kPw_bXYba1 z*zW4;>i_TR=dSt&0#<~vH9&|+M1X%|Ri7>yTac{VI?LgJuf*Zs{vQ(!fcC$pku>JN z;_QFSMwlo9qL(pivJqV>n;0byHUM=K26gzi{@F_9eWL^6z)Iz)9O7XSR4=5wbkJl1 z=I^bhrTcsExTf$Q>`UWw))^!V>M7mcjD2UW&kab=)bfEV`HxvlzYO?$KHiKeHSHK6 zYitLL2;UX%eErT$o%qix-z^HwBC6826z}9r?>{%OcY{~wCz92a{oE5lQ*khpvN5AJ zo5G!nAT5Y%97Fd`om})&_0YL z-0KwfhQgDr6JOPNcyMpOW}xaz!LVLWoi^X=^@+bu=3H@z>GhxX$nEpyndtj~g1)hf z9d@okO@gxfw@-e02dcCMuP6|;V%4pMy9k8_KojIziT{xGMV0qOP|e{1Jm&tlP{RCY z;mkX~rPH5A41se`_|r%f?&YA%!E zrWnmZBUvM@y(n}IK614(0mtHbO#y-p#Rxr4N|{4VT*dqeVfiTm%`*pindaoRhdnhv zE@~l>O)4cR?Y$ZP^=%Z|AS09nS5jyMS57s3*LjYCu9{lQ(s%N7leHMzAq629BU4!Qk;Gn zk~knk6}qz>#0e?m{+>u!RlZXui4GQeGbrbX5E>DONNDXI5?HXn`d2)QP?V_ID#fE< z6BVuSDfdybH=uFm<#s4OR;Jsz|03qzznw`dX{-tkfOa6|adXw;&=$=RnWx?nMxa2> zES>gq_C=I=cQC9JLaX0b96>EV#S=_li#kA-(lX0_ZN`q%JhRS?3e@YMWgh>2j3a3)TCY^r!m`ME$U1|D-=8uYajM{NRWm`MhX7BVrh zw=MjnY)Iz?C}<>v*Q}Zs2s-iiC5x+k2$yCjZata%c+V88-@B_c z7PnYFctCT2X|c+7Wbf+OFP(h0b}Fw$Sf|z2!o`Gpa`T#ER4ejcWEZ57`+gOCYkMof zo&!!TC7^J9%Q!dA3K9toqyCaqZhI=ky}YNW9ZnzSzk@nS(Ko=rFMtB!e7rpp=#bMh zV0VNyMY+zlE3Iq`Gb4AprV<}T#35rKhp*`Pm#ZP1`3~sFxf4yebPI~!nDR4r(OpQp zUAPtNaov6o1kk6p$jG+mN5wD>!)%!Os>wyqn3PWyBKNL$*jAYHsY660^8AMANASeX z#CQdL5^JK&9(J&TtbarN=8hVWg|eSq=G#{r=+Js9B9Qpd_hAOb_;vF|$%1vXv!aIX zNvy8uij*53X$h>khzF8^h*Z(u7_@s!J>-(29CN~G)GG46txsybKh96pFSJwvW znOs`UWGRU~yR9LMTKbGr(`C(jJ%%;%H`=IHr0I34xTqCIYcO@6Bg=&MEl(clA~fq_ zr3f>n&artIJ*WhKhSd9u>O+Fu?L)mrB&xcVK2zHDZH?;=dKXlfBVTIJ_XI+9c=R{z zpim|LWU5Azhg!e5H9#s;1hnkv+0T;U5!>UF-#d$A_bdo$Z$C8u*{XDeY}B_`|K8G> z{{=rQfwRDZnkpunRXVV^loN@$2b)kP!P|;pEcvrLqmCFZaZ8n_N&_cxCkeAC*UVz@i6@^!^uuq98knoa3{x!?AnBzx;_~P8{Pm?4t{}? z*qLWu!ERJZ05LIqP2U#KBmkiM)%f(zB{TS#KU%WSk09BQI3tVX_2~4nsMh&*UPn8w zKkua?8hB5LtES^4(zZjVq(r~E5t%8P*#)4h&_LdpTtPpV`EZ)pS|XgH%K%ky_UXWK zMNpeI_a)JXuEa7f(6KcF9T@11)c@N#bbBme89_!kywLP24b_z0WH(c(PZYp}HoAMq zDCPdgZT_g)Z-;GRrzLbE>7e~cq+wMhX*l4#A4{@`Hiwt~l)r?QdY3Mi!>9XT2tV2A z4uVut$;wooziMW$CQHNz{PANpfsP-dbmTc@C13UR7WJ@)UTcw9s)0ZlFkg%_R=izwY!6|6bBI z3Cb0#I`l_Py>(E3gWwu49?g{mo- z5PoXeNY0Oo9P@lIBkiy}jvK9(va@`a{7RzpH&^dXKj{n|T+-QMOwGk|Pe>(ZgqyQ( z<1_Cs+u89W$=39JR1*_-M^~v6mDJt$fr{@201x^K(orn(XhYtZ^(Ot}Mn-Dd9HpuA z#7p@W#dUu(b`+;>27e1QJbmdiJ_9FkuQz^Hr3%1J^;53z*|60`Sz5id!>s*_PFrD6 z8m!r{v07>nCqfPi=5w(>((nR>DzVR_)Fl~fq_U4?_!ud7%-LzRC?H|cKm45zeWJc) zk=$%fR%+af2d(ewCJ0XVTogC@^g>vaXEXwQ_INLpnFe>o;IZv^SiPt>wfBbQ? zZpb7?OKk`*v;+aFoY=X4wj{5oYQVZhE_t`58xFr?+yu3mAe+rP4pI3vz0a8z>Qvg5 zckr4TrJ# z5kC^hsiVfAkFKTnw_7iTfWn+=yMHv6Qjc2W_{#Tk(%UB0Rdn|o?e^ys1 zjgD^{i_3z_MO_im)w{Fv;PM~!xP@acJlD*qx!Qb=dYu0dqGnOaZdzAwX)9iYmqlHB zZn$4)SpB44fcPHg`G6Enf5hDJ8f3X}v1Das(xl1!ykl`OR+37aW5(IH%!#hE5V0YN z6pCGw(~STxXy?~G41jqy$lKE+)eLv)gkj>!FlPm)PLuP8N9U|M+iLXBH(mEA z%WFXu<`KfL66ZH}UjB8Ns$fbd1bm(seoIvD+Sry#h|}tIV~*T0SZ}^-k%wP&#)4$3 zk{ZKS6;N(JhQsz=p06$Sh*UX!#jL{86+<9$6q@x;p^3 zm>++IM2Mi#V;O;ep?w_-@1Yg(@Dko3e17GEw0#uPUrJ-p!bzQADnW5p>h_$zED>@m z@j-G#aisM?l^=XR(ToV^I{v(uDQvpST7O$Kjbkvv)mqaP-)BOW+19hakku7>M!h zJ1$(gn4^dp?&*tU`K$Jd-JyGhAR**MIJ&t=Z`5F#4mlN$rTFO1gdDME(%LGda}7@y zH`|0UPiCkpM`0S_tSKb20cPapx)y|WxxjnAb!LDbVzJ?>@cJ~AkHd)AavOTjjp<~N z_u`r|(8@58uu$1XXgIJi$Cv@qQd1wIwpw z{?A=VGfb_-;nQK?u0TK4)oC~S6JBT>ig*(WC+BJ*Py{iXN(4;%LjJ33Az5H*D=USN zUlB*38E8A}PIU&u;T=;=V{#|)lnRyh5Im%j@CbMR!nsjHt9VVz_An;0QG*PzOo^__ z&j{G&X7hR}S2o_n?QpU*JT0eJr9A0-{3OnCRb_gY#jI<=>R^*ZK?KuS1;N;>bt83w&>#DUQT>&vwlw1XD}I-yo&i5{o< zy;xsNnij>jWvSRh&Q%p<=eHmt#Ku6SPljv?#Y8}4F)hxks}vN(Ez%yrBxyb!$spmRR%G=48Ndb^Z9A=7`}B0BWtabEKiO$uH>*i;%-djPFA6kI}SU z6r!H(Iu*5Lq-O7Eq|!pRw~R?T8oe0HI5fn)_NW|P^tyactQUHx#yY#7HIbb^^fWqn zcOyBQ&kp;ls0P_yt{rW&6W^B4tADPV`J0h=_9B8)^6~KWX8xFeLltN@#GuJ&xyh2) zA_y86^&#gH?iR&n35Q6+XlffnSfs$I*VBBZ(YL&{_BB{ zq#+@$Oh=?zNG+PnYdM(C#A)&P29YmJ#^R4D<{Ia0aX1ycYrU_>1!d}9viiQ2DR-Z( zyFG^DC^HI;+%_OzRYXG&rtal$AMmVs`abq?kGUfd$PaA%zDc_~BiJ=9jancaC)MxP4Tg}^sbC@jlU@eO|E(ELbdk65oUG~H#mIfXw z`#>q0u2kZPsK(f7Y6zEuPtA#;W@z5j={7mo%`N5(ZP}2?1yvh(^ay86?YP7fb2Jcut(G0+O89j=)IYEy@Q{oHXGm4(|s_TW{onxws* z!iI2vwhxidqp^LS_-@qc9!SIxzBT(JN%S#Y^G(>Ank>yP*U*67UEaPvlolCFkXxEI zklY!ZJ&%PI|DouuRh8j}qM|blCE~`_xweycX63yXG#@ooVWCvu0GFb!b4 z_Xx>BNy(+!u&$q_3~7RP!uHFg;ipn&s5;>OT!v>2BH}@G6N}7>4>Xt_)yRRCr-Y6ssIi3KS1@(iU73@i^cnw#7v)+(#*2W-L>VAqpM!dc49Hv?cM zpezvl^lYJsgxw(}`UoK@V_OUlDt6R2f|k(q z{-D&6Wr1|u2btdCN27E5Z0g^~8KwvO^#vtk9~z0gdNI2*F|Yey@}{bH4_{*>vA6>X zm%HO^ERd=3$_dYV<=3NWX_q$jpczycCVW?qw=9EvNuD<~%PBmMOFQa?MXa-05Xg(g zVt!mb1sW1pKV*==GkDd%w(qiKhtWO{Yd4QqnYC9c(~om?wO1n&_s3lCd=zd~z;`l4 z(hOyHXZR+jj+0iDLBua+(!~lJ5^k;tZEe9`K3AFb93IM&Ou}3CKw7ry#I~a7-90w@ z_LwmT*cdifnks{TJu>y9^@)XMAgO=YXv`ey>rp!?bzcc zm4LmFu-M}dwDZu^Avn}j$~+f$x(LSW!%S1*lt0_su_lfcID>yj{djhC2TA8CTEa&N z+T4<58G+-G+P6|`r?6mq#i;2oIm)%2Q0*8tzPl6w(7#a$+XK{M822iUpalAmd12^kBFmTG zm`m+gP7+|d{5bv{{tC4ATUpg`v+Usv5H$*uc-kJMf>GF`!rbep#Ea;x!4sw|s->Bb zwmdZ=u)~BPx|U&O5dK+Y5i?Jecq^@idN0@b6Gp!_EvyWsRNq(w5)zh+yj}ySguBo~ z9ZjL-cwaN=uRI3O@m;#1@BWhMb9mAI_K#bpjRhsIxL#|ibSfHhb22z*I5my;@Z|DS zgAGDPNU*cJS=JkTncw|hy9&l)i!a?_bvc4Lm}rMZnL(#@_H?8quEeU2GW>tS-*npG zms?Hd4tP^xCK9PZJU_8AUC|!;f3MQhFjdFYd)ir>(wxV?5Khq8 z<=SEG+Pz?S<+UaW6w0bVnBrN%HS&hGN08pu0cO7I3OgIVjwp+fk#48VY>e0K0bjc( zej8C0ie$Uv+d0?0-X?Z4){Rb>tAcV^_L8RmRM79z@1N=*=zdzo%)V<2euDP%_j3C8 zNur*4ie}l>n>=(5qD{PI@|D9jsFpT~`P3fjQtJ~RfpyM+88<#slcxj%GZjD(R*d>3 z!+gQ$^d1=+bhOX@hsfGR!w_Ljrm!6wSEOoX)m$qd1yrw%7-2Hj=?(l_Ay+`YRrjyeTBqY1k`AZ9W_tuI_4L1Ty|#C`a@{8Vl7vIgD&a#cp{~SdVd}wJucr?jn75X0va<9n1EB}s|8alxaG3-=W!0=&W>|k7*xlM za(}kYA9-|UOnhc;9+w}`g%GQ9BK<9ZW9&B1))EuT?B7T-Q=xqBAML$)UNAL4sAzcG zxlk)I0Knf00MGy-ydgsTFRw|J7L_CX52*Q%{(q<@HA_^T>i_Hiuo~n4-bzIh1CsyC XYBWH|DF4zQ#D9_k0RX6=_;>mr!ECrk delta 15045 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 diff --git a/remote-processing-pack/__init__.py b/remote-processing-pack/__init__.py new file mode 100644 index 0000000..078ed26 --- /dev/null +++ b/remote-processing-pack/__init__.py @@ -0,0 +1,869 @@ +""" +Filename: ssh_remote_plugin.py +Description: ssh-remote-pack plugin (PyInstaller Single-Binary Edition with + file-based result transfer) + +Author: (you) +License: GPL-3.0 +""" + +import base64 +import json +import os +import pickle +import shlex +import tempfile +import time +import uuid +from multiprocessing import Queue +from pathlib import Path +from typing import Optional + +import paramiko + +from PySide6.QtCore import QObject, QThread, QTimer, Signal +from PySide6.QtGui import QAction +from PySide6.QtWidgets import ( + QApplication, QCheckBox, QFormLayout, QGroupBox, QHBoxLayout, QLabel, + QLineEdit, QMenu, QMessageBox, QPushButton, QSpinBox, QVBoxLayout, QWidget, +) + +from src.shared.shareddata import DATA_SCHEMA + + +CONFIG_DIR = Path.home() / ".config" / "ssh_remote_pack" +CONFIG_PATH = CONFIG_DIR / "connection.json" + + +def load_connection_config() -> dict: + if CONFIG_PATH.is_file(): + try: + with open(CONFIG_PATH, "r", encoding="utf-8") as f: + return json.load(f) + except Exception: + pass + return {"host": "", "port": 22, "username": "", "remote_executable": ""} + + +def save_connection_config(host: str, port: int, username: str, remote_executable: str = "") -> None: + CONFIG_DIR.mkdir(parents=True, exist_ok=True) + with open(CONFIG_PATH, "w", encoding="utf-8") as f: + json.dump({ + "host": host, + "port": port, + "username": username, + "remote_executable": remote_executable, + }, f, indent=2) + + +class SshSession: + """Holds SSH connection details for the current process only.""" + + def __init__(self) -> None: + self.host: str = "" + self.port: int = 22 + self.username: str = "" + self.password: str = "" + self.remote_executable: str = "" + + def is_configured(self) -> bool: + return bool(self.host and self.username and self.password and self.remote_executable) + + def clear_password(self) -> None: + self.password = "" + + +SESSION = SshSession() + + +def _connect(session: SshSession, timeout: int = 10) -> paramiko.SSHClient: + client = paramiko.SSHClient() + client.load_system_host_keys() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect( + session.host, + port=session.port, + username=session.username, + password=session.password, + timeout=timeout, + look_for_keys=False, + allow_agent=False, + ) + return client + + +class _FakeRemoteProcess: + def __init__(self) -> None: + self._alive = False + self.exitcode: Optional[int] = 0 + self.pid: int = 99999 + + def mark_alive(self, value: bool) -> None: + self._alive = value + self.exitcode = None if value else 0 + + def is_alive(self) -> bool: + return self._alive + + def terminate(self) -> None: + self._alive = False + self.exitcode = -15 + + def join(self, timeout: Optional[float] = None) -> None: + pass + + +class RemoteTaskWorker(QObject): + """Uploads the job to the remote server, launches the PyInstaller + worker binary over SSH, and streams results back. + + Small messages (heartbeats, progress ticks, completion, errors) come + back inline, pickled and base64-encoded, over the SSH channel's stdout. + Anything carrying a real per-participant result (MNE objects, + DataFrames, figure bytes, etc.) is written to a file on the remote box + instead - the worker sends a small pointer message, and this class + fetches that one file over the still-open SFTP session. That avoids + both the size overhead of inlining large pickles as base64 text and the + lossy JSON/str() conversion the old transport used. + + Everything ends up on `result_queue` - the same queue + check_for_pipeline_results already polls - including progress ticks, + which the old version sent to `progress_queue` where nothing in the app + was actually reading them. + """ + + finished = Signal() + log_signal = Signal(str) + + def __init__( + self, + session: SshSession, + config: dict, + result_queue: "Queue", + progress_queue: Optional["Queue"] = None, + remote_workdir: str = "/tmp/flares_remote", + ) -> None: + super().__init__() + self.session = session + self.config = config + self.result_queue = result_queue + # Kept for backward compatibility with callers that still pass one + # in, but nothing is routed here anymore - see class docstring. + self.progress_queue = progress_queue if progress_queue is not None else result_queue + self.remote_workdir = remote_workdir.rstrip("/") + self._channel = None + self._client: Optional[paramiko.SSHClient] = None + self._sftp = None + self._remote_pid: Optional[str] = None + self._remote_job_dir: Optional[str] = None + self._cancelled = False + + def cancel(self) -> None: + self._cancelled = True + # No process group here (setsid was removed - see run()), so this + # targets the worker's own PID directly. If it has spawned + # multiprocessing children by the time this fires, killing the + # parent won't necessarily reap them immediately; SIGTERM to the + # main process is still the right first move; escalate manually on + # the server if orphans turn out to be a real problem. + if self._remote_pid and self._client is not None: + try: + self._client.exec_command(f"kill -TERM {self._remote_pid}") + except Exception: + pass + if self._channel is not None: + try: + self._channel.close() + except Exception: + pass + + def run(self) -> None: + client = None + try: + self.log_signal.emit(f"Connecting to {self.session.username}@{self.session.host}:{self.session.port}...") + client = _connect(self.session) + self._client = client + sftp = client.open_sftp() + self._sftp = sftp + + job_id = uuid.uuid4().hex[:8] + remote_job_dir = f"{self.remote_workdir}/{job_id}" + self._remote_job_dir = remote_job_dir + self.log_signal.emit(f"Creating remote workdir: {remote_job_dir}") + self._mkdir_p(sftp, remote_job_dir) + + snirf_files = self.config.get("SNIRF_FILES", []) + remote_config = dict(self.config) + remote_files = [] + path_map: dict[str, str] = {} + + for i, local_path in enumerate(snirf_files, 1): + if self._cancelled: + return + fname = Path(local_path).name + remote_path = f"{remote_job_dir}/{fname}" + self.log_signal.emit(f"SFTP Upload ({i}/{len(snirf_files)}): {fname}") + sftp.put(local_path, remote_path) + remote_files.append(remote_path) + path_map[remote_path] = local_path + remote_config["SNIRF_FILES"] = remote_files + # This is what the worker's remap_payload() reads to translate + # its own abspaths back to paths the GUI recognizes. + remote_config["PATH_MAP"] = path_map + + self.log_signal.emit("Uploading config.pkl...") + with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as tmp: + pickle.dump(remote_config, tmp) + local_config_path = tmp.name + remote_config_path = f"{remote_job_dir}/config.pkl" + sftp.put(local_config_path, remote_config_path) + os.remove(local_config_path) + # sftp deliberately stays open (self._sftp) past this point - + # result files get fetched through it as they're reported. + + transport = client.get_transport() + channel = transport.open_session() + self._channel = channel + + # $0/$1 keep the actual paths out of the single-quoted script + # text, avoiding nested-quoting headaches. No setsid here - + # depending on the util-linux version, setsid can fork and let + # its immediate parent return almost instantly while the real + # work continues detached, which reads to the SSH channel as + # "process exited with code 0" right after the PID line, long + # before the worker has done anything. exec keeps this shell's + # PID as the worker's real PID, which is enough for cancel(). + pid_script = 'echo __PID__:$$; exec "$0" "$1"' + command = ( + f"sh -c {shlex.quote(pid_script)} " + f"{shlex.quote(self.session.remote_executable)} {shlex.quote(remote_config_path)}" + ) + self.log_signal.emit(f"Executing: {command}") + channel.exec_command(command) + + stdout_buf = "" + stderr_buf = "" + + while True: + if self._cancelled: + break + + if channel.recv_ready(): + chunk = channel.recv(4096).decode("utf-8", errors="replace") + stdout_buf += chunk + while "\n" in stdout_buf: + line, stdout_buf = stdout_buf.split("\n", 1) + self._handle_line(line) + + if channel.recv_stderr_ready(): + chunk = channel.recv_stderr(4096).decode("utf-8", errors="replace") + stderr_buf += chunk + while "\n" in stderr_buf: + line, stderr_buf = stderr_buf.split("\n", 1) + self.log_signal.emit(f"[Remote Stderr] {line}") + + if channel.exit_status_ready() and not channel.recv_ready() and not channel.recv_stderr_ready(): + if stdout_buf: + self._handle_line(stdout_buf) + if stderr_buf: + self.log_signal.emit(f"[Remote Stderr] {stderr_buf}") + break + + time.sleep(0.05) + + if not self._cancelled: + exit_status = channel.recv_exit_status() + self.log_signal.emit(f"Remote process completed with exit code: {exit_status}") + if exit_status != 0: + self.result_queue.put({ + "success": False, + "error": f"Remote executable exited with code {exit_status}.", + }) + + except Exception as e: + self.log_signal.emit(f"Remote execution error: {e}") + self.result_queue.put({ + "success": False, + "error": f"Remote execution failed: {e}", + }) + finally: + # Best-effort cleanup: the uploaded SNIRFs, config.pkl, and any + # result files that weren't already removed after download all + # live under this one directory, so a single rm -rf covers it. + # Runs regardless of how the job ended (success, failure, or + # cancel) as long as we still have a connection to use. + if self._remote_job_dir and client is not None: + try: + self.log_signal.emit(f"Cleaning up remote workdir: {self._remote_job_dir}") + _, cleanup_stdout, _ = client.exec_command( + f"rm -rf {shlex.quote(self._remote_job_dir)}" + ) + cleanup_stdout.channel.recv_exit_status() # wait so this finishes before we close the connection + except Exception as e: + self.log_signal.emit(f"Non-fatal: failed to clean up remote workdir: {e}") + if self._sftp is not None: + try: + self._sftp.close() + except Exception: + pass + if client is not None: + try: + client.close() + except Exception as e: + self.log_signal.emit(f"Non-fatal error closing SSH connection: {e}") + self.log_signal.emit("Worker execution finished.") + self.finished.emit() + + def _handle_line(self, line: str) -> None: + clean_line = line.strip() + if not clean_line: + return + + if clean_line.startswith("__PID__:"): + self._remote_pid = clean_line.split(":", 1)[1].strip() + self.log_signal.emit(f"Remote PID: {self._remote_pid} (process group leader)") + return + + if clean_line.startswith("FLARES_B64:"): + payload = clean_line[len("FLARES_B64:"):].strip() + try: + msg = pickle.loads(base64.b64decode(payload)) + except Exception as e: + self.log_signal.emit(f"Failed to unpickle FLARES_B64 payload: {e}") + return + self._route_message(msg) + return + + if clean_line.startswith("FLARES_RESULT_FILE:"): + payload = clean_line[len("FLARES_RESULT_FILE:"):].strip() + try: + meta = pickle.loads(base64.b64decode(payload)) + except Exception as e: + self.log_signal.emit(f"Failed to unpickle result-file metadata: {e}") + return + self._fetch_and_route_result(meta) + return + + if clean_line.startswith("FLARES_REMOTE_ERROR:"): + err_msg = clean_line[len("FLARES_REMOTE_ERROR:"):].strip() + self.log_signal.emit(f"[Remote Error] {err_msg}") + # This used to only be logged, never reaching the GUI as an + # actual message - only the generic exit-code fallback did. + self.result_queue.put({"success": False, "error": err_msg}) + return + + self.log_signal.emit(f"[Remote Output] {clean_line}") + + def _route_message(self, msg) -> None: + """Puts a fully-materialized message onto result_queue, in the + shape check_for_pipeline_results already expects.""" + if isinstance(msg, dict) and msg.get("type") == "progress": + self.result_queue.put(("progress", msg.get("file"), msg.get("step"))) + return + self.result_queue.put(msg) + + def _fetch_and_route_result(self, meta: dict) -> None: + """meta is the message minus its "result" key, plus a + "result_path" pointing at the pickle file the worker wrote on the + remote box. Downloads it, unpickles it, reattaches it as "result", + and routes the completed message like any other.""" + remote_result_path = meta.pop("result_path", None) + if not remote_result_path or self._sftp is None: + self.log_signal.emit("Result-file message missing a path or SFTP session - dropping the result payload.") + self._route_message(meta) + return + + local_tmp_path = None + try: + with tempfile.NamedTemporaryFile(suffix=".pkl", delete=False) as tmp: + local_tmp_path = tmp.name + self.log_signal.emit(f"SFTP Download: {os.path.basename(remote_result_path)}") + self._sftp.get(remote_result_path, local_tmp_path) + with open(local_tmp_path, "rb") as f: + meta["result"] = pickle.load(f) + try: + self._sftp.remove(remote_result_path) + except Exception: + pass # best-effort cleanup, not worth failing the run over + except Exception as e: + self.log_signal.emit(f"Failed to download result file: {e}") + meta["success"] = False + meta["error"] = f"Failed to download remote result: {e}" + finally: + if local_tmp_path and os.path.exists(local_tmp_path): + try: + os.remove(local_tmp_path) + except Exception: + pass + + self._route_message(meta) + + @staticmethod + def _mkdir_p(sftp, remote_dir: str) -> None: + parts = remote_dir.strip("/").split("/") + path = "" + for part in parts: + path += "/" + part + try: + sftp.mkdir(path) + except IOError: + pass + + +class RemoteExecutionController(QObject): + def __init__(self, main_window: QWidget) -> None: + super().__init__() + self.main_window = main_window + self._active = False + self._original_clicked_slot = None + self._original_text: Optional[str] = None + self._thread: Optional[QThread] = None + self._worker: Optional[RemoteTaskWorker] = None + + @property + def active(self) -> bool: + return self._active + + def enable(self) -> None: + mw = self.main_window + if self._active: + return + if not hasattr(mw, "button1"): + raise RuntimeError("Main window has no 'button1' to hook into.") + if mw.button1.text() != "Process": + raise RuntimeError("Can't switch to remote mode while a task is running.") + + self._original_text = mw.button1.text() + try: + mw.button1.clicked.disconnect(mw.on_run_task) + self._original_clicked_slot = mw.on_run_task + except (TypeError, RuntimeError): + self._original_clicked_slot = None + + mw.button1.clicked.connect(self._on_run_task_remote) + mw.button1.setText("Process (Remote)") + self._active = True + + def disable(self) -> None: + mw = self.main_window + if not self._active: + return + try: + mw.button1.clicked.disconnect(self._on_run_task_remote) + except (TypeError, RuntimeError): + pass + if self._original_clicked_slot is not None: + mw.button1.clicked.connect(self._original_clicked_slot) + mw.button1.setText(self._original_text or "Process") + self._active = False + + def _on_run_task_remote(self) -> None: + mw = self.main_window + + if not SESSION.is_configured(): + QMessageBox.warning(mw, "Not Connected", "Configure and test the SSH connection first.") + return + + if not getattr(mw, "analysis_clearing_bypass", False): + if mw.button3.isVisible(): + msg = QMessageBox(mw) + msg.setWindowTitle("Confirm - FLARES") + msg.setText( + "Processing new data will clear the current analysis and close all " + "other windows. Continue? (If you do not want this dialog box to " + "appear, toggle 'Analysis Clearing Bypass' from the Preferences menu.)" + ) + msg.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel) + msg.setDefaultButton(QMessageBox.StandardButton.Cancel) + if msg.exec() != QMessageBox.StandardButton.Ok: + return + + mw.button3.setVisible(False) + + for item in DATA_SCHEMA: + setattr(mw, item["key"], {}) + + for bubble in mw.bubble_widgets.values(): + bubble.reset() + + for widget in QApplication.topLevelWidgets(): + if widget is not mw and widget.isVisible(): + widget.close() + + try: + mw.button1.clicked.disconnect(self._on_run_task_remote) + except (TypeError, RuntimeError): + pass + mw.button1.setText("Cancel") + mw.button1.clicked.connect(self._cancel_remote_task) + + mw.first_run = False + + snirf_files: list[str] = [] + if getattr(mw, "selected_paths", None): + for path in mw.selected_paths: + p = Path(path) + if p.is_dir(): + snirf_files += [str(f) for f in p.glob("*.snirf")] + elif p.is_file() and p.suffix == ".snirf": + snirf_files.append(str(p)) + elif getattr(mw, "selected_path", None): + p = Path(mw.selected_path) + if p.is_dir(): + snirf_files += [str(f) for f in p.glob("*.snirf")] + elif p.is_file() and p.suffix == ".snirf": + snirf_files.append(str(p)) + else: + QMessageBox.critical(mw, "Error", "No file(s) selected") + self._reset_button_to_idle() + return + + if not snirf_files: + QMessageBox.critical(mw, "Error", "No .snirf files found in selection") + self._reset_button_to_idle() + return + + mw.files_total = len(snirf_files) + mw.files_done = set() + mw.files_failed = set() + mw.files_results = {} + + all_params = {} + for section_widget in mw.param_sections: + all_params.update(section_widget.get_param_values()) + if getattr(mw, "folding_bypass", False): + all_params["FOLDING_BYP"] = True + + collected_data = { + "SNIRF_FILES": snirf_files, + "PARAMS": all_params, + "METADATA": mw.get_all_metadata(), + } + + mw.result_queue = Queue() + mw.progress_queue = Queue() + mw.ack_queue = Queue() + mw.result_process = _FakeRemoteProcess() + mw.result_process.mark_alive(True) + + self._thread = QThread() + self._worker = RemoteTaskWorker( + SESSION, + collected_data, + result_queue=mw.result_queue, + progress_queue=mw.progress_queue, + ) + self._worker.moveToThread(self._thread) + + self._worker.log_signal.connect(mw.statusbar.showMessage) + self._worker.log_signal.connect(lambda msg: print(f"[SSH Plugin] {msg}")) + + self._thread.started.connect(self._worker.run) + self._worker.finished.connect(self._on_remote_task_finished) + self._worker.finished.connect(self._thread.quit) + self._worker.finished.connect(self._worker.deleteLater) + self._thread.finished.connect(self._thread.deleteLater) + + self._thread.start() + + mw.result_timer = QTimer() + mw.result_timer.timeout.connect(mw.check_for_pipeline_results) + mw.result_timer.start() + + def _on_remote_task_finished(self) -> None: + mw = self.main_window + if hasattr(mw, "result_process") and mw.result_process is not None: + mw.result_process.mark_alive(False) + + QTimer.singleShot(300, self._finalize_remote_ui) + + def _finalize_remote_ui(self) -> None: + """On a normal completion, the real FINISHED_SUCCESSFULLY message + from flares.gui_entry() now flows through result_queue exactly like + a local run, so check_for_pipeline_results (untouched app code) + already stopped the timer, revealed button3, and reset button1 - + we just need to put button1 back into remote mode, since that + handler unconditionally reconnects it to local on_run_task. + + The one case that handler doesn't cover: a fatal-crash message + (success=False with no "type") stops the timer but never resets + button1 off "Cancel" - catch that here as a safety net. + """ + mw = self.main_window + + if mw.button1.text() == "Cancel": + try: + mw.button1.clicked.disconnect() + except (TypeError, RuntimeError): + pass + mw.button1.clicked.connect(self._on_run_task_remote) + mw.button1.setText("Process (Remote)") + else: + self._reapply_hijack_if_needed() + + mw.statusbar.showMessage("Remote execution completed.") + + def _cancel_remote_task(self) -> None: + mw = self.main_window + if self._worker is not None: + self._worker.cancel() + mw.statusbar.showMessage("Cancelling remote task...") + self._reset_button_to_idle() + + def _reset_button_to_idle(self) -> None: + mw = self.main_window + try: + mw.button1.clicked.disconnect() + except (TypeError, RuntimeError): + pass + if self._active: + mw.button1.setText("Process (Remote)") + mw.button1.clicked.connect(self._on_run_task_remote) + else: + mw.button1.setText("Process") + if self._original_clicked_slot is not None: + mw.button1.clicked.connect(self._original_clicked_slot) + + def _reapply_hijack_if_needed(self) -> None: + if not self._active: + return + mw = self.main_window + try: + mw.button1.clicked.disconnect(mw.on_run_task) + except (TypeError, RuntimeError): + pass + try: + mw.button1.clicked.disconnect(self._on_run_task_remote) + except (TypeError, RuntimeError): + pass + mw.button1.clicked.connect(self._on_run_task_remote) + mw.button1.setText("Process (Remote)") + + +class ConnectionTestWorker(QObject): + finished = Signal() + success = Signal(str) + failure = Signal(str) + + def __init__(self, session: SshSession) -> None: + super().__init__() + self.session = session + + def run(self) -> None: + try: + client = _connect(self.session) + try: + transport = client.get_transport() + banner = transport.remote_version if transport else "connected" + self.success.emit(banner) + finally: + client.close() + except Exception as e: + self.failure.emit(str(e)) + finally: + self.finished.emit() + + +class SshRemoteSettingsWidget(QWidget): + def __init__(self, controller: Optional[RemoteExecutionController] = None, parent: QWidget | None = None) -> None: + super().__init__(parent) + self.controller = controller + self.setWindowTitle("SSH Remote Processing Settings") + self.resize(460, 260) + + self._thread: QThread | None = None + self._worker: QObject | None = None + + self._setup_ui() + self._load_existing_config() + + def _setup_ui(self) -> None: + main_layout = QVBoxLayout(self) + + conn_box = QGroupBox("Remote Server", self) + form = QFormLayout(conn_box) + + self.txt_host = QLineEdit(self) + self.txt_host.setPlaceholderText("e.g. 192.168.1.50 or myserver.example.com") + + self.spin_port = QSpinBox(self) + self.spin_port.setRange(1, 65535) + self.spin_port.setValue(22) + + self.txt_username = QLineEdit(self) + self.txt_username.setPlaceholderText("remote username") + + self.txt_password = QLineEdit(self) + self.txt_password.setEchoMode(QLineEdit.EchoMode.Password) + self.txt_password.setPlaceholderText("required each app session - never saved to disk") + + self.txt_remote_executable = QLineEdit(self) + self.txt_remote_executable.setPlaceholderText("e.g. /usr/local/bin/flares_worker or /home/user/flares_bin") + + form.addRow("Host / IP:", self.txt_host) + form.addRow("Port:", self.spin_port) + form.addRow("Username:", self.txt_username) + form.addRow("Password:", self.txt_password) + form.addRow("Remote Executable Path:", self.txt_remote_executable) + + main_layout.addWidget(conn_box) + + btn_layout = QHBoxLayout() + self.btn_apply = QPushButton("Save && Apply", self) + self.btn_apply.clicked.connect(self._on_apply) + + self.btn_test = QPushButton("Test Connection", self) + self.btn_test.clicked.connect(self._on_test_connection) + + self.btn_forget = QPushButton("Forget Password", self) + self.btn_forget.clicked.connect(self._on_forget_password) + + btn_layout.addWidget(self.btn_apply) + btn_layout.addWidget(self.btn_test) + btn_layout.addWidget(self.btn_forget) + main_layout.addLayout(btn_layout) + + self.chk_remote = QCheckBox("Route processing (button1) through this remote server", self) + self.chk_remote.toggled.connect(self._on_toggle_remote) + main_layout.addWidget(self.chk_remote) + + self.lbl_status = QLabel("", self) + self.lbl_status.setWordWrap(True) + main_layout.addWidget(self.lbl_status) + main_layout.addStretch() + + def _load_existing_config(self) -> None: + cfg = load_connection_config() + self.txt_host.setText(cfg.get("host", "")) + self.spin_port.setValue(int(cfg.get("port", 22))) + self.txt_username.setText(cfg.get("username", "")) + self.txt_remote_executable.setText(cfg.get("remote_executable", "")) + SESSION.remote_executable = cfg.get("remote_executable", "") + if self.controller is not None: + self.chk_remote.setChecked(self.controller.active) + + def _on_apply(self) -> None: + host = self.txt_host.text().strip() + port = self.spin_port.value() + username = self.txt_username.text().strip() + password = self.txt_password.text() + remote_executable = self.txt_remote_executable.text().strip() + + if not host or not username: + QMessageBox.warning(self, "Missing Fields", "Host and username are required.") + return + if not remote_executable: + QMessageBox.warning(self, "Missing Fields", "Remote Executable Path is required.") + return + if not password and not SESSION.password: + QMessageBox.warning(self, "Missing Password", "Enter the password for this session.") + return + + save_connection_config(host, port, username, remote_executable) + + SESSION.host = host + SESSION.port = port + SESSION.username = username + SESSION.remote_executable = remote_executable + if password: + SESSION.password = password + + self.lbl_status.setText(f"Applied settings for {username}@{host}:{port} (password held in memory only).") + + def _on_forget_password(self) -> None: + SESSION.clear_password() + self.txt_password.clear() + if self.controller is not None and self.controller.active: + self.controller.disable() + self.chk_remote.setChecked(False) + self.lbl_status.setText("Password cleared from memory.") + + def _on_test_connection(self) -> None: + self._on_apply() + if not SESSION.is_configured(): + return + + self.btn_test.setEnabled(False) + self.lbl_status.setText("Connecting...") + + self._thread = QThread() + self._worker = ConnectionTestWorker(SESSION) + self._worker.moveToThread(self._thread) + + self._thread.started.connect(self._worker.run) + self._worker.success.connect(self._on_test_success) + self._worker.failure.connect(self._on_test_failure) + self._worker.finished.connect(self._thread.quit) + self._worker.finished.connect(self._worker.deleteLater) + self._thread.finished.connect(self._thread.deleteLater) + self._thread.finished.connect(lambda: self.btn_test.setEnabled(True)) + + self._thread.start() + + def _on_test_success(self, banner: str) -> None: + self.lbl_status.setText(f"Connected successfully. Server: {banner}") + + def _on_test_failure(self, error: str) -> None: + self.lbl_status.setText(f"Connection failed: {error}") + QMessageBox.critical(self, "Connection Failed", error) + + def _on_toggle_remote(self, checked: bool) -> None: + if self.controller is None: + return + if checked: + if not SESSION.is_configured(): + QMessageBox.warning(self, "Not Connected", "Save settings and test the connection first.") + self.chk_remote.setChecked(False) + return + try: + self.controller.enable() + self.lbl_status.setText("Remote processing is ON - button1 now runs jobs on the remote server.") + except Exception as e: + QMessageBox.critical(self, "Couldn't Enable", str(e)) + self.chk_remote.setChecked(False) + else: + self.controller.disable() + self.lbl_status.setText("Remote processing is OFF - button1 runs locally again.") + + +class Plugin: + def __init__(self, main_window: QWidget) -> None: + self.main_window = main_window + self.name = "SSH Remote Processing" + self.widget_instance: SshRemoteSettingsWidget | None = None + self.controller = RemoteExecutionController(main_window) + + def register_menu(self, plugin_menu: QMenu) -> None: + open_action = QAction("Configure SSH Remote...", self.main_window) + open_action.triggered.connect(self.show_widget) + + about_action = QAction("About SSH Remote Processing", self.main_window) + about_action.triggered.connect(self.show_about) + + plugin_menu.addAction(open_action) + plugin_menu.addAction(about_action) + + def show_widget(self) -> None: + if self.widget_instance is None or not self.widget_instance.isVisible(): + self.widget_instance = SshRemoteSettingsWidget(controller=self.controller) + self.widget_instance.show() + else: + self.widget_instance.raise_() + self.widget_instance.activateWindow() + + def show_about(self) -> None: + title = "SSH Remote Processing" + version = "0.3" + author = "Unknown" + description = ( + "Runs the app's flares processing job on a remote server using a " + "standalone PyInstaller executable over SSH, and streams results " + "back - small messages inline, per-participant results via SFTP." + ) + + message = ( + f"{title}
" + f"Version: {version}  |  Author: {author}

" + f"{description}" + ) + QMessageBox.about(self.main_window, f"About {title}", message) \ No newline at end of file diff --git a/remote-processing-pack/plugin.json b/remote-processing-pack/plugin.json new file mode 100644 index 0000000..be5f745 --- /dev/null +++ b/remote-processing-pack/plugin.json @@ -0,0 +1,10 @@ +{ + "id": "remote-processing-pack", + "name": "Remote Processing Pack", + "version": "0.1.0", + "description": "Delegates the processing of files to another device.", + "author": "Tyler de Zeeuw", + "min_app_version": "1.7.0", + "platforms": ["win_x64", "darwin_arm64", "darwin_x64", "linux_x64"], + "download_url": "https://git.research.dezeeuw.ca/tyler/flares-plugins/raw/branch/main/packages/remote-processing-pack.zip" +} \ No newline at end of file diff --git a/roi-builder-pack/__init__.py b/roi-builder-pack/__init__.py index 402ca00..13cbec2 100644 --- a/roi-builder-pack/__init__.py +++ b/roi-builder-pack/__init__.py @@ -1,5 +1,5 @@ """ -Filename: plugins.py +Filename: __init__.py Description: roi-builder-pack plugin Author: Tyler de Zeeuw