From e776eddb37059d952c7e55d8be095f161299545d Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Wed, 14 Oct 2026 01:45:21 -0400 Subject: [PATCH] Working resolver, working recursive logic with dynamic library creation --- .../__pycache__/path.cpython-314.pyc | Bin 1101 -> 980 bytes .../__pycache__/request.cpython-314.pyc | Bin 1267 -> 1231 bytes core/apirequest/path.py | 8 +- core/apirequest/request.py | 2 - .../action/__pycache__/action.cpython-314.pyc | Bin 977 -> 600 bytes core/execution/action/action.py | 19 +- .../__pycache__/operation.cpython-314.pyc | Bin 1468 -> 934 bytes core/execution/operation/operation.py | 45 ++--- core/runtime/__init__.py | 2 +- .../__pycache__/__init__.cpython-314.pyc | Bin 411 -> 388 bytes core/runtime/__pycache__/logs.cpython-314.pyc | Bin 605 -> 1050 bytes .../__pycache__/outputs.cpython-314.pyc | Bin 861 -> 923 bytes .../recursiveactions.cpython-314.pyc | Bin 0 -> 1203 bytes .../__pycache__/resolver.cpython-314.pyc | Bin 941 -> 1343 bytes .../runtimecontract.cpython-314.pyc | Bin 1122 -> 883 bytes .../__pycache__/savedata.cpython-314.pyc | Bin 1453 -> 1576 bytes .../__pycache__/select.cpython-314.pyc | Bin 3897 -> 1365 bytes .../__pycache__/skipstep.cpython-314.pyc | Bin 0 -> 846 bytes core/runtime/logs.py | 25 +-- core/runtime/outputs.py | 22 +-- core/runtime/recursiveactions.py | 33 ++++ core/runtime/resolver.py | 52 +++-- core/runtime/runtimecontract.py | 52 ++--- core/runtime/savedata.py | 30 +-- core/runtime/select.py | 185 +++--------------- core/runtime/skipstep.py | 21 ++ .../__pycache__/getmessage.cpython-314.pyc | Bin 828 -> 756 bytes plugins/rmass/actions/getmessage.py | 27 +-- plugins/rmass/actions/synapsepush.py | 52 +++++ .../pullmessagelist.cpython-314.pyc | Bin 373 -> 512 bytes plugins/rmass/operations/pullmessagelist.py | 21 +- tokens.json | 2 +- 32 files changed, 263 insertions(+), 335 deletions(-) create mode 100644 core/runtime/__pycache__/recursiveactions.cpython-314.pyc create mode 100644 core/runtime/__pycache__/skipstep.cpython-314.pyc create mode 100644 core/runtime/recursiveactions.py create mode 100644 core/runtime/skipstep.py create mode 100644 plugins/rmass/actions/synapsepush.py diff --git a/core/apirequest/__pycache__/path.cpython-314.pyc b/core/apirequest/__pycache__/path.cpython-314.pyc index 3414a2d85d34157ceaf628afc46d37c168d66704..41c46dbbed52f7daef674f0514e688d7fdb3afb9 100644 GIT binary patch delta 121 zcmX@hafO{%n~#@^0SNdw&Sxo23NJMm??%Yz(5ZGs3Qls7$`cEHycj U=?za2Gf-6#NNEw*MiEtlA>EIDVfP7w^%bvQge$nIc~8OB$i}M zc41VKV$M#jyv1CWm~)F2NR*})a{z5qQ&Uq=m|Vi>&X_*gfLTxahK#~|ubE!+d?s>C zV16JWKbL0`>qk}wSF`okfHq=5| diff --git a/core/apirequest/__pycache__/request.cpython-314.pyc b/core/apirequest/__pycache__/request.cpython-314.pyc index ade297cfb228acaeffc7a605481f370c295a228e..66e260530eca90dd8c1414889aa0721f69451cff 100644 GIT binary patch delta 122 zcmey&d7hJ3n~#@^0SILH&S#ZPs4+ zC$D3^J$V9)nk`6ZB}0)EkSdY@61O;Pa`RJ4b5iY!WPn^oATAaF5+9fu85!>~$lqm< M{=y>7C&&QQV{#G=fg$@&r`ugQ3eFSQ~y zxwIrTD7COOwYWr+>6SoJX=YAJP-$LCW^SruNlDQyVX#O*Q7V$)#1CTiQ9vUa7-ASf zMu9*$qX`p)RSu+!gkqQ>JdjKnlL?dumNSfDMUrDikrNIVHf934kg?xz|6?Vc$Y!zK7-#EHg-l?unqu!8c(7C literal 977 zcmZ8fO=}ZD7=CxN$!)SAPIpLOEop32^_bQW{RW)PFQI(Lo%yi ztCxW+*xC)ylRtSAU7}g^9@PVaZ1grjKG9{WwLHgt>GTjyz7Co#0a;*LC@%ui4G2>; zp+55(4Ce&4gAQr7QI!zP!!h!`Ru5SOwd=Dt@t$$EVr)%^Z0kc!Vuz3&uwg5TycyZt z3_uBLJYL9dZWhs%4Cu;p+0x8+A)9v$v;Ri0O!c32N8XA$ykq_Gy;|}=Uu@1-*e%?b z8GjK?u0tHEMo-n_RNZ%chY^4kRsr)em{-Oc+jNB{oH}WG9jbbQMxSa?sw+^}>-fm$ zspaz88r?Sby*4sjr`L21+-^G^r-86h_b@WTsj*r{STZ^)-GgXQRnZ9-STTMLe~)c_ zI8(EO-p3Co>c+9UG0tB-d@#yy4%E}drM@{9zJn8W{a9Te7p@=nMg?P_ofXTUdP8kg ztbS8g`sR5GuIQgH4R4K#Pq^XfX*z$DE*&YQDeC~w^(^0_CJz6Upn$FjD-J(N z#b^JElNS=jCq$R$0wRWRg1eUHTrIERV?I7wnzKi>>t2Uo#)=^QLfeRL9FB&Q^9ArS xJ8+)Y(;l@wH)x^9xWrWcGkp$z#Ux3Z!0qp_J%KwDC{N(w1n!mC1jZJw%S?{3Y$sWDb8t)6135;WCmVCg2RfT?X1h)o3F>^QJY#-NKSFp9nVJRQ$!#3IMwQ)ZfR@~Z8yf&U z17Hr?O49ZOSEV!T;l>g`Tl>r0PnZ|Hf?jJ$>*<91ms?8pTtx{Q4S+N(Knru-D9R>s zuM?jzQ;D?AShi2a>r@D)G7piu>3PKInQD~jk*Bs}3v)CbuHbSmMTzgZj!%41e>o)h z@uP8$giOEBLjXf#=D;X_Hp)S5m@fp@(8ve1UxnG1>TkWc_wb!|ps#+>SHEW`e(K|U zoo{;OaO%>Vt*=wJUe!iw*pcThPD1g*$pU1H!P+UG31%kJw%vZ;cKYG5JdbdwDT}+Y z*vYO-$ub={%-$i({xjS28S!FE(fog0VxJ_oW5+`Ld!PlLXr6~Cb$iF{4YtW0I?J!( cGkpP0Fhb}D7)MZz_tm2;+#Jahs2KPD0V)@bNdN!< literal 1468 zcmaJ>&u<$=6n^Vn@A~K3PKde~)3|~w{PctZ{AX) zA)sw=@XHrZ6@cHFF>O8%j1MU2!e>wxbRcZ>=|agzd?k^H%gh#aspKbqjwM|#DMaDe zuLnv&669FcL!~eYQ!JDfJyMF2D4!4LYAHry90&DyDM1p;P!3%IvQQS@fNc0L7RLRo z&kcUwF`M;WV;{MJre$!H72E)y{>W-j9On4r4zW9gn$ecgHX3NtFq<8WX6x_Qh-tOi zR_9C8-X+MUID(O5HTRKDQ0peORdj%A9fHc}s}6EVP4G^G4fLcyr0@7UI@^T`?6BFF znl0qO_T|AAD?%JL9|PFZ9^1uR1_(kvj7*k zq_XfYu1}a>wXh>k+2&)}x0ak+7cq_VZ5pS4FF0MVemIZ87OT4z=|368i!2$sc`rO; z_+T2_*Ytn!o$XryLAVOr-~XRi#kUikGR(({T=4R+4BJ0Vcq$@Qi8RTjLv!f{F-;tH zOsW&vu{yX$M`GXxB3Z>%44!<)RUR6SK?ug|SFy@ERth*kJ6ASr8@21yKU7B#%(lq{ zgA;6tvOBibb`YhoxX>Kx&PiR#q~dV{GY_VdOqw^hn15)sP`+;LoAo?yO_YiAH4CHs zL~8UCdCNxFU>}>Koc)cfPINt8#II4}2z{NOY1f5QRU4}5ftv1ay@)S#^;0$8-5SfV zn0zGv5nkxs?SDHAuO5e2pU1BBLx)?#Sm8KUcpBHvRfsJ1?(~bp@XB#`<%PC9Os@~p z>qpv?^xdIW{8cOVr02=ZkNZc}ljOTSnT5I;{?3AajwC&wZqMm^u{3a`lGGW$kH&98bnh4Pk)PK{=Q9vJG)1}-n~Dj z{{Y!VS7};}hS_eoOYBf`xYH(P3*{VI@O6VGkW~VfXy+y_InZqmW<}$^a%tYn4rUeL zCNC{bPXEE=Ucf9(Zi+k1GLf64)El@eFcTz~%S#b@HwWeda$}sxuuVLa|0VKtKMm%dzh6AQ?+xQc4wj>2+u(M6K;#>1i2Bco=X{Fk<cLjR2IjMPvU_lpaDdsYo}3BU9t zASQ2aVqRi;YFc7uPH9nU5yxabMpq3%pbW^aVlg1`ftit!@hcYtqrzPVh5HPecNwIf KGiVg?1Em1R6F1NR delta 279 zcmZo+p3Tgw&Bx2d00bMu&twHmkV7F#h`T@f=-ZxIWSxW%3ilq@YNE@B1oIEoX? zQd1I35{uYCD%e3{EIIk<#YG$-CU0(HUSfJ`T4H8SX;Eqs=VWn4R}CSc49G3TVnE^p eGb1D8cP<7-y}Jww_Zc+rGDtmV&?piBN&x_hJ48|d diff --git a/core/runtime/__pycache__/logs.cpython-314.pyc b/core/runtime/__pycache__/logs.cpython-314.pyc index cdb244935a02000455c8f0b9df9a7a3708951043..afb5407ec93f9664c719695268807ca7af9a2a0b 100644 GIT binary patch literal 1050 zcma)4F-#L-6n=Nta(69liXcTwX%XAzDzOQ65KGXAnka-cl@t;i$k{u}Y1?b=zXD}q zGLAJNk->qL#Ke`&!Ntk6QZ4yqF-~qJHENvvuk8tOAim*!@4frp|Gk%cmz@q95NrN? z|9G4R_-Z7kk-TNiJ_1{?1PSUM=#Ze@pi>EI6a?m*L6}Q3EneGo5is)RE6V6f5#P2X zBp}*(Gt{X`F@PcPKoa7nnn@=Zx1LHmVYGuTxa$E}CtX@J#hSb%(@mxvrx*Ih2F)5k z_g`Hf%y&s{c$6^O8dYIvrl7;7Zgh9!d(ST$?FJH z*XK9wepF1SWrS9W*-h5JA}U!~niF`;u8K(1bxpI7C$Lq~vS7tsVp>IieNwxil4pAKZ}+_=~$6^-!!DitVFX=+^0` zg^Dv!Zc_OJ9WvKb delta 327 zcmbQmahHWpn~#@^0SH9o&ScGDoXF>=un5R&V31}AV+a6Apn(A9i3`;ESz)4K%sdQ1 z3=^-Z*aR^uGbk{~GsLjL3TtLrhD=6Hrdy0wewwVe*b0g=^Gb>* zJ2ELxZe}X27Xa#D2IAr%Ako0^fsKn*;fAXA^4Nv3*HtYps#;uAwYtco*x_}DNAQNQ z>;#<|i5CPEZU{?V6;{0t`;*r0}!u6|| z6KHIcr7go=K1V)gpexvO^3&5Z^U{kz7O!M5`3$5Oiui%VEe@O9{FKt1RJ$S(AeRw{ Zi+O>>2WCb_#@h^hUs(7Uxr>B>A^>`}MN$9& diff --git a/core/runtime/__pycache__/outputs.cpython-314.pyc b/core/runtime/__pycache__/outputs.cpython-314.pyc index a9bdf97001ebffcca50441be3859aea493c8bd3f..d64e4386b76b562665bd2c49c40c722d9776376c 100644 GIT binary patch delta 448 zcmcc1Hk+MSn~#@^0SIcIp38bPk=IctiIIV!fguJ+LO>W}5Q7O5gsl!0OPR~SAj1&G zFtJB=VzCq>>%=~JM)ry8)b%-`3K+uJW5C9O_!zo{z`9uicqg+kDvI*K^dRT}pkcC; z!x^nbZn5W=mK2nh6l-$aV$Vn{PAn-Ynmm6 zzrZ2!oKNnCoZfXgql(9M2sF7ns1leD0kh^^`fEcHADA{BFVZFyl;q0T@%;3p>MK)`?7@2 zXI2Iy55~{j3<~BSL>PF48~i>4UB=+2$yfw(>q>?qF(6eW0wiv6*yQG?l;)(`6-fZO VU~hmz^8+&@BjXn)F-BpqS^(^mY>@x} delta 348 zcmbQuewU3`n~#@^0SH#SIFmJJBCjKt9U}un149@?0ORC1MyZL@q#2n(43+}cFxH71 zWG24h>zojEaohlQkF>g?S*N$Rtq5ebC`U=)70(uX0jn~JmjJvMucv08!ny&Lj0nG{AH-yEm39H@E zHke`UeOW}~Gb@9h3*%>Q1{vcIA`Cpj4St_N-tyCAECM-iB}0)YkSY=e61O;Pa`RJ4 Qb5iY!#3wf}i?e`a0Cq!PTmS$7 diff --git a/core/runtime/__pycache__/recursiveactions.cpython-314.pyc b/core/runtime/__pycache__/recursiveactions.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3322afc239583a4ad009e81c3b739f9ecbecdc3e GIT binary patch literal 1203 zcmZ`&&rcIU6rTOTb}4P0x+p7x6pcW^uu&=s8WKX{k3fj2ru9HfN;}|^w%g2ZQ7@*) z#uNMp9_!8jL^fDUCV2AXtyum5-|Uv!8hFXfyqS6L&A0FSb|w-IA~16G+fJ$vp@cj31%rN-$L=e-#j=juz}68na?d}9n&gi&noac z1%?Ep6%=^26neo=|Fa~zGyLzUB&PAXQ9^fAw~x`2Btj)AefNU;Vt4ceJe3k52Sbj$ z!O?k^UQV=;zk`)tS-p%eVj)VhWonzd#3l~qz*%33nnfqB zuwagCnMIQmzyf|Hn{t+!Y&xXCq#bLMsg&3yt7sFO^D;3J17q{XTdP2fTxQqI8MIKy z6yZ5)WGzYzS}r;!Ty`FAgPtvYV3#_FKJOIz<#BC)1gCyg-Zb^KTj!)B)*8ULZ)Jke0}QF9Q5w90x55TG6*auPiue)7Ow zAh8}HcGC!Qxeam=)8iLNtVf(&VqL-#dW5B|PId`Fq?`(-I2pQ4oVdvPJ8ktCj>}B( zn@+f?fyE9c1)y$+@LpJa0ZH6=k1exk%5IV5PO JBUsS9oWHiD^U44K literal 0 HcmV?d00001 diff --git a/core/runtime/__pycache__/resolver.cpython-314.pyc b/core/runtime/__pycache__/resolver.cpython-314.pyc index aff3d6fa1d13179c04b3213dedb9296dcce2d6a5..176edca46bb92b2f994e76bea54b783972a168b2 100644 GIT binary patch literal 1343 zcmb_cOHUI~6h8Cl43B|!pgh|Yp%HBqCXyyDG%QFUYE3bXwi`BMJAq0clRHxkyKz@^ zVKpJ@!f4#_KinHlfM&viguN-$AK(+rR)<}BM z*U(R;a0eiYo=5&F9Tz+bc!qCDdUgm_q5#h^izFX&W*{r#Nk4!o<+3*?&lAi*Y5<@Y zVvx&Zg;{i@Vx4`KkHa44%EYj$r7a^NxblW>>9$P>{R%fww2iX0C%clKw~N(^E7AkE z$BQqxfs+2zD7oUMv2D4Mt&?@bb_KeVF@JXU3Ke%=+o+Zet)Ooe3mPex^@_f35G`LN zhDK@?yNFJ&B$+q2-F|O#A74g7SctaI%As3WKcP$B~t~Q>$T0IRybfFanCG4!W zu{7ib3`4;ASw?H1_ue!XvNp!1u}w1bYQF{R1O>~L$A|2>G!wymAJFq zRL9=M-o!pD`|6zY;CMiFR!)Kwbpg+JBQI%JLzAr-j7ICrFVe^TLr$8gSmpvJ=oGVd zeq}HC3r;+|G$-aR$B8vMu}pGtKVV6ZyHk+T&RNsxzewnZF|H8&bs%9(Qmoj7mhv;8 z({t6=^CdmMSu+X!tx!5!I;#IR+&imBirToos~spar|S8bGhEUMfpLm~&MvSA%+a}I l&)sshP%9aWgboBFUKov*z;WCeKgNa67RI^ZUrDrB)^BCu_y+(0 delta 478 zcmdnbwU(Vvn~#@^0SG2loXhfJnaC$$Aq3<#Fa$A(Gn6m{F#<`(ASPu7P3B}KkUA(} z2GSt>xdlixFz7QBFilovYH+&6nv2AtESV*#xwkl=5-CL>!-`md#AHv#a8Vv0gAs^}J%L06!wr7H29Fz)MVO7a z*cilRJ3<@%KS)ge&nOP$Lfx@!vI0|meGJGLFbHA_4+>+}k%I9V7)+pY@(f{M{~)Za z;tPVfuSmhg)hX0nlc|UmsP7hQK~ZL2i6(my$d)2@kPv%*X-Pq8Nijlm5hq9z6o$p@ z8bDG_O-%s^inu|_d7%FD1bWt}NDwF_2~rq1nUC2a?hXs*1um%>ZYx}u`dwi$zQHZj z;8(;8l=lNV02BgX4J#SIVi5BmGCnXfGBSQ*5@QtkVj#gN H4AuYuuMK2b diff --git a/core/runtime/__pycache__/runtimecontract.cpython-314.pyc b/core/runtime/__pycache__/runtimecontract.cpython-314.pyc index d682e14f86ad3f24b49e48fa482ecb997617a776..f7eef3d939396b1b3cb8e5724ebfac73e8ef05c1 100644 GIT binary patch literal 883 zcmZuv&1(}u6rb6h%||!g)cR4C)&v5nOED`LMMM-&-JsNvLV5|7b$4u2l5CirM7-^> zN00dv+P}t1>SYiVj0bOG`~!S5*|b%BFmK+xkKercz1gr97Z6DL(uadx4WV!HFc&y0 znLdIoMz2r<*N}@jb~UcKI@evoiED79AY)oB<)(SMfExM=;+X~kooyH;WT$>e7~2r$ z>p{B{Y|{?)d2)C;;Qav?*;&LJQjzI|Ua+k!<$MwD*;ts2Mqy`2Yn*odd1Dfmz|vt& ztDs`k!mugX!PO+Mk6SY1U$3^ad`~N(W4vW+ECo@P0cGnV<@vlF_Cz{V%|#-UTpmOc zr(7atGRq)uAY$9DWo9(>@{$ZmFoQmVEpy| zViQ-B%>Og+7NYDf#3Y82bIuB=l|J`2wK-A&%~)gd+t`Fj`kB0iNf0J$z-vl72TD=b z4|@?6W~Ao68+hD{WLX)AWR^@?QnXy;qXM|sbh@4p!z3N|BmkbA_iXjZDsMAs{8{V C-ot_b literal 1122 zcmZWn%}X0W6rbJfW>)iI8bK{a60Mp>iz%9dLMbgsiKVn9N+ML0?e5m3B)ef|R;wqE z9@A5E^xB)p{s~?RexwA3lor}c=|#{#pfkIhX!IT4n>X+M-u&KsGaU}~0wzbB-#+}4 z0r<_Gwus*0BEt@QU>)RyC6E<}kQIrT^$}lIB2rc+a-7G+C4UwY7za7uARtOkx(8D7 zUtS_5)4)5sRMwY`vY`4>`x~r#I!GZewpqtP9=vfj*p9k3C%pjr6n`-!izh4$j2wT+2NY)k{L-Ow!Ept4hqN~T&dQWEv6 z8Yx*O;(b#E8Mtbh*kBNc#ReyUB^H~UoJ`P1>7rFJ(z?1;($lC?QB8HzKxxfFMjF{B zDY2kuHOnN3)t;&D(1`Q;NZTnp9T9*0v6W$ITTdK`!y zOR)>a5ximp5AsH5yao~f>xhrWo&VM7`>&_XxPx@p!`uD>&=3a=Fh!Ne6-&3v#uF4{ dF8>v{pQ&@7AP7If%6G8x13b9&j|(FX=s!ik_#yxR diff --git a/core/runtime/__pycache__/savedata.cpython-314.pyc b/core/runtime/__pycache__/savedata.cpython-314.pyc index 07ae161a74775595d46cdf2dd1d0be07c64ce06c..e81139177382e521ab8b551dd7fdeba36e3c52f6 100644 GIT binary patch literal 1576 zcmb7^&2Jl35Wr`>>yKsab)2Meh?4H6fxxz*4wZ|9iYU0H$O=S}5e^3nYa4GHSFv~X zb{*7IND&tAikWx;VTiQ#{^bbHTb(Ltz0SPYLQc@{WPt2@$YZ?_nXSMUb=FOWo z@AuvbIq?FZl=gnUau5Reof?5)+mrn-&gq(U>q`Fg^IB7PcQ!X09=>@u=vHH84AUh#i?nm zmBK+A=SG5hzl>wl!Fp%7GS>(-_%dXD14}4Tq@FBznFw0FauOC_3T7*~bNaHhFBApl zJ_HcqD3lVt9)JRmQOH57Ut$!(zr}Y-$okn)posZY;RFPkxs2HuhiXWH30#l9xvv1u z@Dotww6Ghq^;M&yJG#q#HoqpH$C~POsTZ%RYl7;Ssupvj%et*Q4r2lay9hb^_qe1Bl?n4#lfiAaIA)7yCOL+dkgleWa#%^s;(F| z9me#us;chE%(7WCG8KKbTFJ0lO|R>h4VGClnUP_Qx>Lo$Ao`QmRad;&sIF8#LjP-SQ#52G-qJ&J=UZ^*6H&1*NVwQB9` zR^(3dRw?!sPqK(g(nF2T}(nT6kuiXhrz`ap8-2wGep-CKH-bPQx|QR zF529{bHe`2Jv|@nAAHjpC^6B=fM0X!)Hb_P>8u2itrwDTbHojhmG2Kn1Hj3BF zUza<>FSq&a#7s9avnB41j&F+JiZ`|UqchDs@+iNy7lAR=hk5dN`^^WFrG=B`n-K%>y0~SZ=LO&I@giUcVqAMAWfnhT;Z`zTf3dkjfC%xNV#cI z=`TUzh8~TH+z=bb?!N)1 C79_F& delta 859 zcmaJ<%}*0i5TEUSbhq2BOD#o#x=RGorUe5bUieUpA*t1tV5Aq4rcyLDV4H2hfQR;G z<3;M4w4CU%91LC!H!dcgmQX^|aPZ(C0AfO-7w7du6Ar%3PUg+b`^~)H?^UcHMagTE zEPyNg`Rj|*g7oCUCk{mSxn@;2VH( z+64*9!_=u)p$*&pSSF^XV{1!s_3660!Kj&}>M_^(MhJ8I56UN-ldGB3Y9?LhVvCtX z@})j(dY-joJ2FK2HJTjMWP2{~t+S^X{SeIyHD&Nf8OaL=eD8OuV{^V3Ekq5+K!rY* zd{xQ!NjR~}?*eZFn~AE`dqIP3=s@zFnZY^m(*~?1A1dA69^V=-4V5#MnceVC*zism zmdPqJRTJ&G(1i%owjsnaB;T(zx%gg}pEd8ZqTeYlwy44=fEj-><@sg7T=`Z7+2-2*DHm)>iUQWj1EuJ~`nU-8Z zrZo-$H8Q2fqp35bsLm4`NBTAL!ZdP0535;;FA*c_0^6VMK(|@?7zNa>;}$1_^ctER zoCwmUv#1mlL+&e29}DiP;I0Ht9M_70_kmL4(BaMt$h^gK%7L@DC7Wxoynf^w$(s-P z?lYRm!4o;crJ3#ER=Ij$I$@uE>(v;S#vz)^8VCD}kXvW_F diff --git a/core/runtime/__pycache__/select.cpython-314.pyc b/core/runtime/__pycache__/select.cpython-314.pyc index 5d8d8065d8c3df9a4a86e72a904affba853100f1..4d60694bd5755e370efcc848edc16cbe89c517f1 100644 GIT binary patch literal 1365 zcma)6PfXKb6n|~Ec7F<@jNtycB6Bc7rU4@fV4^`Z4h)&3Tp*;b&6sX$({+S-;$RH% zG%gwv6YwP7IC@s^4wK39olG>*BZeJ}C*QUX2TH=1^nJhg-tYIm*Y`E;Yi)4=t{)vA zAF39BuT`h9C==}S2v#5lonSzW>V_~KryC^PQ3nh@`;!=5fdSCyxrP=*)D4;J9#bS& z0DRzu*|zECI%YOT^?OW+TQk-e5&o;7n^`fY+0!g1(pU~@tjB1q&8#EmuqVJ!!ZyNYm6Q@Ua94ABTp?UC6Hn!2g)onlJh3iGsT>BC zQ)+<%Cb1ut$6BedP|{#{ByH)^N!`RO-08I#G59 zHvH@U&3wsyW&1+OJ-m9i?CshZTOZqUm%M}9w@cp9)yb2w_E~TT3YM}EEVR_j_jZ3d z*jow?z2$d;(vMaFb3hlT;o5p8X|IbdWv*&@!BZY|L TMqK@UVrh!1&;r$~d(r&^uyY@O literal 3897 zcmeHKO>7&-6`m!R%fDqsN~9=>OPRK0ij*iziIrGR?Z8PLr!}QiV1<tLIOwzikLYRl~DxHF^A@o_>fZ}23l#cFbV+;kgIIvP_&o68SaWd zuHfVlAcqdXx9{!y=FQH`d*2L4e&TTbPznW+j8Y6p zCS?I>Nm)T!Q|thW+cH+O8$4O~5&LipLvm_fnHdgdm+(h`VkVjW^3-XD7fbBre9POe?bDd|c zFc;>HIIFX_ONG47m81nJBkQ)DEG?FFTM_5-a@?Uiuv97*@+C><(iu4iNPD3y7t3-< z_n5A?vS~T3yXz6^21~*~uzXfp(w%h=bS^pI+oI8Egfu-dcB`-`jb+n!a@jGwxR}nT zZ%TM9Q^3*~F6ZSOIO|={6qj}PZ_2ra?62r&VlTuYb1Pj3Q9%bB3WV3E*QP)CWo7!n zfja$_q!tXX-(9=A7aXnyhj)XC6}Q4_LR=Nbwrr~KqT;SOdcSsfl(%;reFrWSh`jH7 z>_a`H2Y$o{R)4$gKE2JJK7{Zn)4X3~pXiQ1gtrxR1{E!H-WdXGYbn&cH_dv{3VG6o zCT5ChL9xf6EG;P8F(_*bikm;mT9KP4Sxei5F|#4V&ZZF(AggAMa>#JNqbVDwjBH$* zcbb0D-pIA4w~of!xnT1biH=_%yFTD+S&8O;MQ2lVXCwNov&bdisOPt6g^F21sOS=1 z&zK3!m)6zaL^j1vUPCAgH6oz7>r_8M^}jZcFLIOb0IHL&lV!$j&cE>#U5&4Ts5TPm zCak`IlIM{T*|1*$yFGdX4Jjf%bA)83KIi1S_2=BlWAdS8wFytmMMQ?O00+fiDC3Nz z^Yv<5l;m55tZscn{@T%Ia%4wEd>UAa;&Uy{>#=+0(y85xrT z!5r~%>0(jJXX74B${v$k!DPX7PEO;Sl8pVtaMlenn7gjlhjanG6c+AC#9`{-(fK<6 z7$JBPG(bc*h>{0{K`)eJBDe$I=zJ4*JdaPoD~gT+g;dZ!Webmg{l?mj>ZBS-sGiZv z6|Jjx{o>liYQNewUYXLo-Rqt;&xWLW2P?nOI(ybf*G8*$wKG;per@-yj{Hg9vk!h{ zAJn4H?M2VkqUUy_=WF~arGThs`HYl`x=&&TPK>>B&#-s-cUY-u}|}*`gYn zQl<#z!VVwN`l9bAA9tXkmkv9TFQ~Blef{@`?+t&HSh=eF3<%0AY%K3|#I!D9r)yx7 z{lvL-eJ6HF^PkxBM{E9QRo?L@_B%ow%exe`Yl3!LK)e3L;Yk!4dTfJ14q_;FR=M)W z>6Ph?n92{-*ui~wch$b_9@=Jyun*R(g$K#*Qy!e8JQ(@`nK0GLc*pT#3umNS`R_QE zWSeWdZ5-~HN^0%XI*y%kPYSrlk+Kz?@NtL+`I3h>4e-@`r`O>AQ0?>U9j0wGE{ z=heXIrlbZY6qj*lslKTO$F}Tha8lvF8|n})Kq2L_CPb8JD!%FH)gpsxWPEF?7P++Q zdD<3M?*1kGaai+)_PnQR-c!|yU2p7h5aJvNC~u}8*5N$cpVzP{Zt zvh5i8*CXElVQ$+U`4%xS#g4v>E8zIbF>+u9``@KOnE&ryjb3KZ=W#EQFWW$V;g|&Z zkO^GwwLa`&K>lx5K|k>As;$=l&nd85KQ>OmB!%MEHX6W$?w(zV6L=hOS%TF-7{~m6 z`!T=o3$BOP!W+w~FTQzN^^I4qnkRp++BLHIy4p1X$NzUi9SZcY)_MfRL&Z1l02HGt zB)0gPa6y@V+U{Aoc>l(|8yX+nbc?|y~+YjVNtWz1;VY{`qgBkwD zVJ}RQ-fSoX(aAqR^w_Sml;gr;AzNOMUdGP@5-vWdM3@qam0_M(I+^H`;TRKpGSBog OiEl44uP{uE_WmzPIl^54 diff --git a/core/runtime/__pycache__/skipstep.cpython-314.pyc b/core/runtime/__pycache__/skipstep.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84fc027d26c9eb500c7b3907656a42adc66c58fb GIT binary patch literal 846 zcmZuw-%ry}6h3X&u0;l88)1`8rqi;)q-sb&KoarCiwPmc3}cp5n2l&JvV8m=0HazJ+Ffug8Cr`IEK;lX6IrqEY`EkFS+{uAZAD}J#`ts&C z4e-+gzEQnRyB{}IkYNNIkf{vh=n~^6VGQ8%aC-tPs!;Unpnx^g*wwS~ZUEH;NWv(r zg;#n^kLZN^=+&Z^QGoyP1uB2_Jl|s0GV-O9OKhOP$n?b%nVEfo{U^NsYmel>MQ-*p zGNT?-Wc>*;TcB1rADzd3xJOU-RE~knWkBXHuQU{SKc52?J0@WaQXmI2pu;?q0-eeU zE^oipE!)v7moqDlRdHP2v^1hPCfT7EAGqw6vRTn~gjGzlbYngJ{ONLzb%PshE1{e%#cU|OH5z19ug(M`kUlu{=KyK`(;D4B-ZP)je`JyPM)9#eCVU{&XRkn0hBIUATDC-)LN+!`HQZXDINngQ~wcVAoigL&h_V6Ca z{(!CuC&7VtJ9~4@p!h8)w&;kEI365sCh|v#e0?x~oD`c$=_n~3aE;{5uF&d->)C^B zBRk(nFYJa|9K=$4FB{Qp?QuPN=Xm7i!FVG(S09->iKjjaHSyEr{$wrn_1a85KKp$v zbIL+|{*-~(-P2(R-$uxf|2ew>;rJQQLgGg>-eNKSwIg`9_YZF^F>uISS&A@+LlpYu p9M!r0KD3bs5=Q6p3uRNSY-)=nhOnc|`!_9yqNp=EMkPoT;Xf_nv>pHe literal 0 HcmV?d00001 diff --git a/core/runtime/logs.py b/core/runtime/logs.py index 3d4bce0..2a91521 100644 --- a/core/runtime/logs.py +++ b/core/runtime/logs.py @@ -1,17 +1,20 @@ import logging def buildLog (action, outputs, response): - #if response.status_code == 200: - #print(f"{action.name} successful") - try: - for print_name, print_key in action.prints.items(): - print( - f"{print_name}:", - f"{outputs[print_key]}", - ) + if hasattr(action, "prints"): + try: + for print_name, print_key in action.prints.items(): + print( + f"{print_name}:", + f"{outputs[print_key]}", + ) + except: (KeyError, TypeError) + + if action.showstatus is True and response.status_code == 200: + print(f"{action.name} successful") + + elif action.showstatus is True and response.status_code != 200: + print(f"{action.name} failed") - #else: - #print(f"{action.name} failed") - except: KeyError, TypeError return diff --git a/core/runtime/outputs.py b/core/runtime/outputs.py index eb7818e..d927de7 100644 --- a/core/runtime/outputs.py +++ b/core/runtime/outputs.py @@ -3,21 +3,21 @@ def buildOutput(response, action, outputs):#, select_data): #response_data = select_data #else: #response_data = response.json() - - response_data = response.json() - response_objects = [response_data] + if hasattr(action, "outputs"): + response_data = response.json() + response_objects = [response_data] - while response_objects: - response_object = response_objects.pop() + while response_objects: + response_object = response_objects.pop() - for key, value, in response_object.items(): + for key, value, in response_object.items(): - if isinstance(value, dict): - response_objects.append(value) + if isinstance(value, dict): + response_objects.append(value) - for output_name, response_key in action.outputs.items(): - if key == response_key: - outputs[output_name] = value + for output_name, response_key in action.outputs.items(): + if key == response_key: + outputs[output_name] = value return outputs diff --git a/core/runtime/recursiveactions.py b/core/runtime/recursiveactions.py new file mode 100644 index 0000000..7d47cc8 --- /dev/null +++ b/core/runtime/recursiveactions.py @@ -0,0 +1,33 @@ +from core.execution.action.action import buildAction + +def recursiveAction(definition, outputs): + recursiveset = definition.recursiveset["actions"] + for item in outputs[definition.recursiveset["source"]]: + outputs[definition.recursiveset["outputlabel"]] = item + #outputs["recursive"] = item + + for job in recursiveset: + outputs, response = buildAction(job, outputs) + #outputs[action.recursive["target"]] = item + + print(outputs["profile"]) + print(outputs["messages"]) + return outputs + +def recursiveActionStale(action, outputs): + #if hasattr(action, "recursive"): + #outputs[action.recursive["target"]] = {} + for item in outputs[action.recursive["source"]]: + #resolved = resolveItem(action, item)#, outputs)#, resolved) + #print("DEBUG Resolved value:", resolved) + #outputs[action.recursive["target"]] = outputs[action.recursive["source"]][][action.recursive["target"]] + #print(outputs[action.recursive["target"]]) + + #Target may be phased out here. its not quite necessary after resolve + outputs[action.recursive["target"]] = item + + #print(outputs[action.recursive["target"]]) + #target = outputs[action.recursive["source"]["target"] + outputs, response = buildAction(action, outputs)#, resolved) + #print(outputs) + return outputs diff --git a/core/runtime/resolver.py b/core/runtime/resolver.py index 94d1bca..7798198 100644 --- a/core/runtime/resolver.py +++ b/core/runtime/resolver.py @@ -1,24 +1,25 @@ def resolveItem(action, item): resolved = {} - label = action.resolve["label"] - targetkeys = action.resolve["targetkeys"] + if hasattr(action, "resolve"): + #label = action.resolve["label"] + #targetkeys = action.resolve["targetkeys"] #print(item) - target = item + #target = item - for key in targetkeys: - target = target[key] + #for key in targetkeys: + # target = target[key] - resolved[label] = target - - #for label, keys in action.resolve.items(): - #target = item + #resolved[label] = target + for label, keys in action.resolve.items(): + target = item + #print(item) #print(target) - #for key in keys: - #target = target[key] + for key in keys: + target = target[key] - #resolved[label] = target - #print(resolved[label]) + resolved[label] = target + #print(resolved[label]) return resolved @@ -47,3 +48,28 @@ def resolveItem2(action, item, outputs): outputs[label] = target #print("Resolver DEBUG", target, outputs[label]) return outputs + +def resolveItemBackup(action, item): + resolved = {} + if hasattr(action, "resolve"): + #label = action.resolve["label"] + #targetkeys = action.resolve["targetkeys"] + #print(item) + #target = item + + #for key in targetkeys: + # target = target[key] + + #resolved[label] = target + + for label, keys in action.resolve.items(): + target = item + #print(item) + #print(target) + for key in keys: + target = target[key] + + resolved[label] = target + print(resolved[label]) + + return resolved diff --git a/core/runtime/runtimecontract.py b/core/runtime/runtimecontract.py index 3958755..cdee4a2 100644 --- a/core/runtime/runtimecontract.py +++ b/core/runtime/runtimecontract.py @@ -1,41 +1,21 @@ -from core.runtime import buildSelect, buildSelect2, buildOutput, buildSave, buildLog -from core.runtime.select import buildSelect3 -#select_data = {} +from core.runtime import buildSelect, buildOutput, buildSave, loadSave, buildLog +#from core.runtime.select import buildSelect3 +from core.runtime.resolver import resolveItem + +def buildPreRuntimeAttr(action, outputs): + outputs = loadSave(action, outputs) + + resolved = resolveItem(action, outputs) + + return outputs, resolved def buildRuntimeAttr(action, outputs, response): - #select_data = {} - #response_data = response.json() + outputs = buildOutput(response, action, outputs) + + select_data, action, outputs = buildSelect(action, outputs) + + buildSave(action, outputs) - #if hasattr(action, "select"): - #select_data, action, outputs = buildSelect(response, action, outputs) - #else: - #select_data = "not applied" - #print("BEFORE buildOutput:", type(outputs)) - if hasattr(action, "outputs"): - outputs = buildOutput(response, action, outputs)#, select_data) - - if hasattr(action, "select"): - select_data, action, outputs = buildSelect3(action, outputs) - #print("AFTER buildOutput:", type(outputs)) - #print("DEBUG buildSave") - #print("outputs type:", type(outputs)) - #print("action type:", type(action)) - #print("outputs keys:", list(outputs) if isinstance(outputs, dict) else "NOT A DICT") - - if hasattr(action, "savedata"): - buildSave(outputs, action) - - if hasattr(action, "prints"): - buildLog(action, outputs, response) - - #if hasattr(action, "conversion"): - #conversions = action.conversion.items() - #for key in action.conversion.items(): - #print(f"{action.conversion.items[key]}") - #convertedoutput = conversions[key] - #outputs[conversions[key]] = convertedoutput - - if action.showstatus is True and response.status_code == 200: - print(f"{action.name} successful") + buildLog(action, outputs, response) return outputs, response diff --git a/core/runtime/savedata.py b/core/runtime/savedata.py index 269f92d..d1c576e 100644 --- a/core/runtime/savedata.py +++ b/core/runtime/savedata.py @@ -1,25 +1,25 @@ import json -def buildSave(outputs, action): - save_data = {} +def buildSave(action, outputs): + if hasattr(action, "savedata"): + save_data = {} - for save_name in action.savedata: - save_data[save_name] = outputs[save_name] + for save_name in action.savedata: + save_data[save_name] = outputs[save_name] - with open(f"{action.savepath}", "w") as save_file: - json.dump(save_data, save_file) + with open(f"{action.savepath}", "w") as save_file: + json.dump(save_data, save_file) - #print(f"{save_name} saved by {action.name}") - print(f"Data saved by {action.name} to {action.savepath}") + print(f"Data saved by {action.name} to {action.savepath}") return outputs -def loadSave(outputs, action): - with open(f"{action.savepath}", "r") as save_file: - load_data = json.load(save_file) +def loadSave(action, outputs): + if hasattr(action, "loaddata"): + with open(f"{action.savepath}", "r") as save_file: + load_data = json.load(save_file) - for load_name in action.loaddata: - outputs[load_name] = load_data[load_name] - #print(f"{load_name} loaded by {action.name}") + for load_name in action.loaddata: + outputs[load_name] = load_data[load_name] - print(f"Data loaded by {action.name} from {action.savepath}") + print(f"Data loaded by {action.name} from {action.savepath}") return outputs diff --git a/core/runtime/select.py b/core/runtime/select.py index 10c6bf3..1913619 100644 --- a/core/runtime/select.py +++ b/core/runtime/select.py @@ -1,165 +1,34 @@ -def buildSelect(response, action, outputs): - #if hasattr(action, "select"): - - response_data = response.json() - #selection = action.select - #print(response_data) - - select_data ={} - for item, index in action.select.items(): - select_data[item] = response_data[item][index] - - print(select_data) - - #if select_data == None: - # selection = "not applied" - #else: - selection = select_data - - return selection, action, outputs - - -def buildSelect2(action, outputs): - #print(outputs) - select_data = [] - target = outputs[action.select["source"]] - selectmethod = action.select["selectmethod"] - targetkey = action.select["key"] - targetvalue = action.select["value"] - - if isinstance(targetvalue, dict): - for resolvekey, resolveval in targetvalue.items(): - print(resolvekey) - print(resolveval) - #outputtarget = outputs[resolvekey] - #for thing in resolveval: - outputtarget = outputs[resolvekey][resolveval[0]][resolveval[1]] - print (outputtarget) - targetvalue = outputtarget - #for item in target: - for item in target: - #print (item) - for key, value in item.items(): - #if isinstance(targetvalue, dict): - #for resolvekey, resolveval in targetvalue.items(): - #print(resolvekey) - #print(resolveval) - #outputtarget = outputs[resolvekey] - #for thing in resolveval: - #outputtarget = outputs[resolvekey][resolveval[0]][resolveval[1]] - #print (outputtarget) - #outputtarget = targetvalue - if selectmethod == "exclude": - if targetkey == key and item[key] != targetvalue: - select_data.append(item) - #print(item) - if selectmethod == "include": - if targetkey == key and item[key] == targetvalue: - select_data.append(item) - #print(item) - outputs[action.select["source"]] = select_data - #print(outputs) - return select_data, action, outputs - #for item in outputs[output_name]: - #for key, value in action.select.include.items(): - #if key in item and item[key] == value: - #select_data.append(item) - -def buildSelect3(action, outputs): - #print(outputs) - try: - select_data = [] - - target = outputs[action.select["source"]] - includekey = action.select["include"]["key"] - includevalue = action.select["include"]["value"] - excludekey = action.select["exclude"]["key"] - excludevalue = action.select["exclude"]["value"] - - - for item in target: - include_match = True - exclude_match = True - - if includekey: - include_match = item[includekey] == includevalue - - if excludekey: - exclude_match = item[excludekey] != excludevalue - - if include_match and exclude_match: - select_data.append(item) - - - outputs[action.select["source"]] = select_data - print(select_data) - return select_data, action, outputs - except (KeyError, TypeError): - return select_data, action, outputs - -def buildSelect4(action, outputs): - #print(outputs) +def buildSelect(action, outputs): +#***THIS IS THE CANONICAL BUILD*** select_data = [] - target = outputs[action.select["source"]] - #selectmethod = action.select["selectmethod"] - includekey = action.select["include"]["key"] - includevalue = action.select["include"]["value"] - excludekey = action.select["exclude"]["key"] - excludevalue = action.select["exclude"]["value"] - #if isinstance(targetvalue, dict): - #for resolvekey, resolveval in targetvalue.items(): - #print(resolvekey) - #print(resolveval) - #outputtarget = outputs[resolvekey] - #for thing in resolveval: - #outputtarget = outputs[resolvekey][resolveval[0]][resolveval[1]] - #print (outputtarget) - #targetvalue = outputtarget - #for item in target: - #include_match = True - #exclude_match = True + if hasattr(action, "select"): + try: + target = outputs[action.select["source"]] + includekey = action.select["include"]["key"] + includevalue = action.select["include"]["value"] + excludekey = action.select["exclude"]["key"] + excludevalue = action.select["exclude"]["value"] - for item in target: - include_match = True - exclude_match = True + + for item in target: + include_match = True + exclude_match = True - if includekey: - include_match = item[includekey] == includevalue + if includekey: + include_match = item[includekey] == includevalue - if excludekey: - exclude_match = item[excludekey] != excludevalue + if excludekey: + exclude_match = item[excludekey] != excludevalue - if include_match and exclude_match: - select_data.append(item) - #print (item) - #for key, value in item.items(): - #if isinstance(targetvalue, dict): - #for resolvekey, resolveval in targetvalue.items(): - #print(resolvekey) - #print(resolveval) - #outputtarget = outputs[resolvekey] - #for thing in resolveval: - #outputtarget = outputs[resolvekey][resolveval[0]][resolveval[1]] - #print (outputtarget) - #outputtarget = targetvalue - #if selectmethod == "exclude": - #if item[excludekey] != excludevalue:# and item[includekey] == includevalue: - #if includekey == key and item[key] == includevalue: - #if item[excludekey] == excludevalue: - #continue - #select_data.append(item) - #if item[includekey] == includevalue: - #if includekey == key and item[key] == includevalue: - #continue - #select_data.append(item) - #if excludekey == key and item[key] != excludevalue: - #select_data.append(item) - #print(item) - #if selectmethod == "include": - #if excludekey == key and item[key] == excludevalue: - #select_data.append(item) - #print(item) - outputs[action.select["source"]] = select_data - print(select_data) + if include_match and exclude_match: + select_data.append(item) + + outputs[action.select["source"]] = select_data + #print(select_data) + + return select_data, action, outputs + except (KeyError, TypeError): + select_data = ["no selection"] return select_data, action, outputs + diff --git a/core/runtime/skipstep.py b/core/runtime/skipstep.py new file mode 100644 index 0000000..0e743ae --- /dev/null +++ b/core/runtime/skipstep.py @@ -0,0 +1,21 @@ +def skipStep(definition, action, outputs): + if hasattr(definition, "skipstep"): + try: + if action in definition.skipstep: + condition = definition.skipstep[action] + + #if outputs.get([condition["output"]]) is None: + #return False + #current_value = 1 + #else: + current_value = outputs[condition["output"]] + #current_value = 1 + + if condition["operator"] == ">=": + if current_value >= condition["value"]: + print(f"Skipping {action.name}") + return True + + except KeyError: + #outputs = manageFailure(error) + return False diff --git a/plugins/rmass/actions/__pycache__/getmessage.cpython-314.pyc b/plugins/rmass/actions/__pycache__/getmessage.cpython-314.pyc index 913f75122245d19ee570a98b43117e353f8b3ab0..2bc694852e8756497b9d8d320e5b25cdea605db0 100644 GIT binary patch delta 373 zcmX|4yGjE=6y2G9zm3r~8U;hdpu%n?{(zE3EH0^qB^gaZbi?k%LJ$|Ll!@E;3I2nA zfSoDB*re4$w(tX-K*+t^!{OY+Iq%A!>>N3^A@F(fKD)no?37SEu2mjE^KpQv3_2K~ z1jxr!0TV2+!2vgz|5RAvTY%L7Qw@roufaNaumPn2!zSljoR_&*q&lFgaIpP7Z@Rd* z>V)pzkR%DONy3z{NjuSPgNgOC29x?BZL^}Yc(+N|B5}fSr#1dL)U}u-QSXklvNAfU zY0C_?A4gZ69%1H!oQ5=HN)ip?Cdr=BF*33b5kg;r zo-2aprP54wIoO5NnCVWca8))Z_Rb5PSbMoBnmAQ+OOXAk?2f#NRLb7)zUPjNsbmiy Ra(QX6huzE&eW}7L{sBbiW(EKN delta 417 zcmYj~yGjE=6oz+ZXYbkd9^*YCM5C~21Rp>oox&kl3TrY+R^x@8iD*FFO13m?Y2|x} zg%2Q>VYEn_ZVMm45iLA$4j<>7|NpgKe_uor%HM8j4~FqsL+Et4=>KwYC^5<)r8H1s73iHyreVlp(wVv?DPHyPVQ%Zqin*Crme zA4&t_B!`)%Iyg46oTB*y%}uV}Nj|;DrLvo}ha{IYGK07{wz6?W^OD|xxXJB5jhlq& KEA~lA27d$lt8^9s diff --git a/plugins/rmass/actions/getmessage.py b/plugins/rmass/actions/getmessage.py index b60802b..a0f7dcc 100644 --- a/plugins/rmass/actions/getmessage.py +++ b/plugins/rmass/actions/getmessage.py @@ -1,24 +1,22 @@ import os -name = "Get message" +name = "Get messages" kind = "action" -#id = "getmessage" - showstatus = True method = "GET" resolve = { - "targetkeys": ["id"], - "label": "path", + "path": ["messageheaders", "id"], + #"label": "path", } path = [ "https://rentmasseur.com/api/v1/mailbox/", - {"suffix": "path"} + {"resolved": "path"}, #{ # "output": "id", # #"keys": [0, "id"] @@ -33,22 +31,15 @@ headers = { "output": "access_token", "prefix": "Bearer ", }, -} - -recursive = { - "source": "emails", - #Transformation target. dynamic target to be resolved in each iteration - "target": "id" -} - +} outputs = { - "message": "messages", + "messages": "messages", "profile": "profileData", } select = { - "source": "message", + "source": "messages", "include": { "key": "seen", "value": False, @@ -58,6 +49,4 @@ select = { "value": 238302, } } -#prints = { -# "message": "messages" -#} + diff --git a/plugins/rmass/actions/synapsepush.py b/plugins/rmass/actions/synapsepush.py new file mode 100644 index 0000000..3f62dee --- /dev/null +++ b/plugins/rmass/actions/synapsepush.py @@ -0,0 +1,52 @@ +import os + +name = "Synapse Message Push" + +kind = "action" + +showstatus = True + +astoken = os.environ["AS_TOKEN"] + +resolve = { + "sender": ["message", "senderId"], + #"messageid": ["message", "id"], + "username": ["profile", "username"], + "location": ["profile", "location"], +} +keys = [ + { + "keytitle": "type", + "keyvalue": , + }, + { + "keytitle": "username", + "keyvalue": {outputs: senderId}, + }, + { + "keytitle": "csrf", + "keyvalue": { + "outputs": "csrf_token", + }, + }, + { + "keytitle": "remember", + "keyvalue": 1, + }, +] + +method = "POST" + +path = "https://rentmasseur.com/api/v1/login" + +outputs = { + "access_token": "accessToken", + "refresh_token": "refreshToken", +} + +savedata = [ + "access_token", + "refresh_token", +] + +savepath = os.environ["TOKEN_STORE"] diff --git a/plugins/rmass/operations/__pycache__/pullmessagelist.cpython-314.pyc b/plugins/rmass/operations/__pycache__/pullmessagelist.cpython-314.pyc index a6a5ccac831ee669b24a6363a149bb9d6490e371..3b85622385336654a666ebe2ca055c81a4836226 100644 GIT binary patch delta 345 zcmXv}yGjE=6rIQ2oxC=QiH!(a1cV^yKiIf77K4^6jGMu%**ut;O(nQk1#H~^@Lv>c z!ZZdf#BM?CodrEy?m72zIBMqBlJ-n|M36B_lXlZx*827l(8L#nrM33+>H8tKCpkec?3LJv%EV4A6O0A1z z(6Q}!EaQn-iX;`+Y4NysYFkRinbOHpYH6&m=b4J7_2txgv~A8av&f8d%ha~39C0JZ zQjDb1mWkLT^O-&$){EzZT~(E^FcVX0VUo;7DsT@~bF28gyx4Z^Y9n1$EGfqL9Yt>_ x+OVA*HmsLJ=_9Yd1~@D3C{_m&AD9^#8SgXrUS#lnz%JRq@_=2a bf#m}m1FP^279isLz|P9e)WlxI15^tDpu#Di diff --git a/plugins/rmass/operations/pullmessagelist.py b/plugins/rmass/operations/pullmessagelist.py index c0a98e5..b99e0aa 100644 --- a/plugins/rmass/operations/pullmessagelist.py +++ b/plugins/rmass/operations/pullmessagelist.py @@ -1,4 +1,4 @@ -from plugins.rmass.actions import pullmessagelist, refresh_tokens, getmessage +from plugins.rmass.actions import pullmessagelist, refresh_tokens, getmessage, checkavailable name = "Get Message List" @@ -7,20 +7,13 @@ kind = "operation" actions = [ refresh_tokens, pullmessagelist, - getmessage, + "recursiveset", #setavailable, ] -#sleeptime = 10 +recursiveset = { + "source": "emails", + "outputlabel": "messageheaders", + "actions": [getmessage], +} -#skipstep = { -# setavailable: { -# "output": "validTo", -# "operator": ">=", -# "value": 3600, -# } -#} - -#role = "activate" - -#sleeptime = 180 diff --git a/tokens.json b/tokens.json index 0762e38..66dfd11 100644 --- a/tokens.json +++ b/tokens.json @@ -1 +1 @@ -{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTE5MTgyMDEsIm5iZiI6MTc5MTkxODAyMSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkxODA4MX0.Y5Ej40c3Ji_-WLShpJkRSl3wF4XGxrLhE_rYMWxQmeDPHK03mv8bWX_7A7zmjjk3cYrwlBM5odn_eJWSaCI_Lg", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ1MTAwODEsIm5iZiI6MTc5MTkxODAyMSwianRpIjoiQ0NmdW9xTFdsUmZpais1c1VxU2FudFRVb0xZVkd3ZG9NQkRYY1ZnV0pzdz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTkxODA4MSwic3ViIjoiMjM4MzAyIn0.oWa2PwSyh110MOJ8ypsRCtiXNQWosNv4T_UZ9m0shUjsFTX0Qtr-bSnc7mS8-5TSW-szEnLHT89-T8KzNZApYg"} \ No newline at end of file +{"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTE5NTY3NTUsIm5iZiI6MTc5MTk1NjU3NSwic3ViIjoiMjM4MzAyIiwidXNlcm5hbWUiOiJYeHhvdGlxIiwidXNlclR5cGUiOjEsInN0YWdlTmFtZSI6Ilh4eG90aXEiLCJhcHByb3ZlZCI6MSwibG9jYXRpb25JZCI6NDcyLCJzZWFyY2hDaXR5IjoiYXRsYW50YSIsImNvdW50cnlTaG9ydCI6IlVTIiwic2Vzc2lvbkNvdW50cnlDb250aW5lbnQiOiJOQSIsImlzRnJvemVuIjowLCJsb2NhdGlvbkxhYmVsIjoiQXRsYW50YSwgR0EiLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTk1NjYzNX0.G1vCD8bSnaobc71onjgABLIlyoG1LOez4PRbdVSzcSe4aP-HefaU97gky9df18j-msaruFdFpuqWHozsZezspw", "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJleHAiOjE3OTQ1NDg2MzUsIm5iZiI6MTc5MTk1NjU3NSwianRpIjoiVGFUalhWcm5oUDY5bEdIYzR4OGdKemU1TFpBR2FwMUU3Uk5UMitGY2Rzbz0iLCJpc3MiOiJodHRwczovL3JlbnRtYXNzZXVyLmNvbSIsImlhdCI6MTc5MTk1NjYzNSwic3ViIjoiMjM4MzAyIn0.vZUZ0XqogvKCm8LPnoaPC-zNBwdafJCiSyPM6mv0L2FsM6NhOv4a2mVpHHifSa2ZIafse1MMlwSpMzJl1q7a5A"} \ No newline at end of file