From f4742f00e01e98461bf7ac269d7242a143ebdce6 Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Thu, 8 Oct 2026 09:31:29 -0400 Subject: [PATCH] v1 server and lifecycle manager working. execution contract added --- .dockerignore | 8 +++ Containerfile | 9 +++ __pycache__/auth.cpython-314.pyc | Bin 0 -> 1191 bytes __pycache__/dispatch.cpython-314.pyc | Bin 0 -> 1922 bytes __pycache__/executerequest.cpython-314.pyc | Bin 0 -> 551 bytes __pycache__/lifecyclemanager.cpython-314.pyc | Bin 0 -> 1076 bytes __pycache__/logs.cpython-314.pyc | Bin 0 -> 462 bytes __pycache__/managefailure.cpython-314.pyc | Bin 0 -> 1174 bytes __pycache__/operation.cpython-314.pyc | Bin 0 -> 1574 bytes __pycache__/outputs.cpython-314.pyc | Bin 0 -> 846 bytes __pycache__/savedata.cpython-314.pyc | Bin 0 -> 1272 bytes checkavailable.py | 5 ++ core/__init__.py | 5 ++ core/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 430 bytes core/apirequest/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 197 bytes .../__pycache__/execute.cpython-314.pyc | Bin 0 -> 726 bytes .../__pycache__/key.cpython-314.pyc | Bin 0 -> 486 bytes .../__pycache__/object.cpython-314.pyc | Bin 0 -> 440 bytes .../__pycache__/request.cpython-314.pyc | Bin 0 -> 1122 bytes core/apirequest/execute.py | 26 +++++++++ core/apirequest/key.py | 9 +++ core/apirequest/object.py | 11 ++++ core/apirequest/request.py | 28 +++++++++ core/execution/__init__.py | 2 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 147 bytes core/execution/action/__init__.py | 3 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 199 bytes .../action/__pycache__/action.cpython-314.pyc | Bin 0 -> 1189 bytes core/execution/action/action.py | 25 ++++++++ core/execution/executioncontract.py | 9 +++ core/execution/operation/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 208 bytes .../__pycache__/logs.cpython-314.pyc | Bin 0 -> 560 bytes .../__pycache__/managefailure.cpython-314.pyc | Bin 0 -> 1189 bytes .../__pycache__/operation.cpython-314.pyc | Bin 0 -> 1102 bytes .../__pycache__/outputs.cpython-314.pyc | Bin 0 -> 985 bytes .../__pycache__/savedata.cpython-314.pyc | Bin 0 -> 1370 bytes .../__pycache__/skipstep.cpython-314.pyc | Bin 0 -> 800 bytes core/execution/operation/operation.py | 41 +++++++++++++ core/execution/operation/skipstep.py | 14 +++++ core/manager/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 180 bytes .../__pycache__/manager.cpython-314.pyc | Bin 0 -> 1309 bytes core/manager/manager.py | 25 ++++++++ core/runtime/__init__.py | 9 +++ .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 345 bytes core/runtime/__pycache__/logs.cpython-314.pyc | Bin 0 -> 470 bytes .../__pycache__/managefailure.cpython-314.pyc | Bin 0 -> 966 bytes .../__pycache__/outputs.cpython-314.pyc | Bin 0 -> 859 bytes .../__pycache__/savedata.cpython-314.pyc | Bin 0 -> 1368 bytes core/runtime/logs.py | 11 ++++ core/runtime/managefailure.py | 19 ++++++ core/runtime/outputs.py | 21 +++++++ core/runtime/savedata.py | 24 ++++++++ dispatch.py | 55 ++++++++++++++++++ lifecyclemanager.py | 23 ++++++++ login.py | 5 ++ manage.py | 4 ++ manager.py | 4 ++ plugins/__init__.py | 1 + plugins/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 173 bytes plugins/rmass/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 205 bytes .../checkavailable.cpython-314.pyc | Bin 0 -> 521 bytes .../checkavailableoperation.cpython-314.pyc | Bin 0 -> 310 bytes .../__pycache__/credentials.cpython-314.pyc | Bin 0 -> 449 bytes .../rmass/__pycache__/csrf.cpython-314.pyc | Bin 0 -> 214 bytes .../rmass/__pycache__/getcsrf.cpython-314.pyc | Bin 0 -> 319 bytes .../rmass/__pycache__/login.cpython-314.pyc | Bin 0 -> 810 bytes .../loginoperation.cpython-314.pyc | Bin 0 -> 248 bytes .../rmass/__pycache__/manager.cpython-314.pyc | Bin 0 -> 762 bytes .../refresh_tokens.cpython-314.pyc | Bin 0 -> 704 bytes .../refreshoperation.cpython-314.pyc | Bin 0 -> 270 bytes .../__pycache__/rmdefinition.cpython-314.pyc | Bin 0 -> 656 bytes .../__pycache__/setavailable.cpython-314.pyc | Bin 0 -> 920 bytes .../setavailableoperation.cpython-314.pyc | Bin 0 -> 514 bytes .../__pycache__/setnotset.cpython-314.pyc | Bin 0 -> 524 bytes .../setunavailable.cpython-314.pyc | Bin 0 -> 563 bytes plugins/rmass/actions/__init__.py | 1 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 329 bytes .../checkavailable.cpython-314.pyc | Bin 0 -> 599 bytes .../__pycache__/getcsrf.cpython-314.pyc | Bin 0 -> 350 bytes .../actions/__pycache__/login.cpython-314.pyc | Bin 0 -> 841 bytes .../refresh_tokens.cpython-314.pyc | Bin 0 -> 835 bytes .../__pycache__/setavailable.cpython-314.pyc | Bin 0 -> 951 bytes .../__pycache__/setnotset.cpython-314.pyc | Bin 0 -> 590 bytes .../setunavailable.cpython-314.pyc | Bin 0 -> 626 bytes plugins/rmass/actions/checkavailable.py | 30 ++++++++++ plugins/rmass/actions/getcsrf.py | 13 +++++ plugins/rmass/actions/login.py | 47 +++++++++++++++ plugins/rmass/actions/refresh_tokens.py | 51 ++++++++++++++++ plugins/rmass/actions/setavailable.py | 47 +++++++++++++++ plugins/rmass/actions/setnotset.py | 24 ++++++++ plugins/rmass/actions/setunavailable.py | 26 +++++++++ plugins/rmass/manager.py | 24 ++++++++ plugins/rmass/operations/__init__.py | 2 + .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 241 bytes .../checkavailable.cpython-314.pyc | Bin 0 -> 381 bytes .../__pycache__/login.cpython-314.pyc | Bin 0 -> 306 bytes .../__pycache__/setavailable.cpython-314.pyc | Bin 0 -> 556 bytes plugins/rmass/operations/checkavailable.py | 11 ++++ plugins/rmass/operations/login.py | 10 ++++ plugins/rmass/operations/manageoperation.py | 7 +++ plugins/rmass/operations/setavailable.py | 23 ++++++++ requirements.txt | 1 + server.py | 25 ++++++++ setavailable.py | 8 +++ 108 files changed, 750 insertions(+) create mode 100644 .dockerignore create mode 100644 Containerfile create mode 100644 __pycache__/auth.cpython-314.pyc create mode 100644 __pycache__/dispatch.cpython-314.pyc create mode 100644 __pycache__/executerequest.cpython-314.pyc create mode 100644 __pycache__/lifecyclemanager.cpython-314.pyc create mode 100644 __pycache__/logs.cpython-314.pyc create mode 100644 __pycache__/managefailure.cpython-314.pyc create mode 100644 __pycache__/operation.cpython-314.pyc create mode 100644 __pycache__/outputs.cpython-314.pyc create mode 100644 __pycache__/savedata.cpython-314.pyc create mode 100644 checkavailable.py create mode 100644 core/__init__.py create mode 100644 core/__pycache__/__init__.cpython-314.pyc create mode 100644 core/apirequest/__init__.py create mode 100644 core/apirequest/__pycache__/__init__.cpython-314.pyc create mode 100644 core/apirequest/__pycache__/execute.cpython-314.pyc create mode 100644 core/apirequest/__pycache__/key.cpython-314.pyc create mode 100644 core/apirequest/__pycache__/object.cpython-314.pyc create mode 100644 core/apirequest/__pycache__/request.cpython-314.pyc create mode 100644 core/apirequest/execute.py create mode 100644 core/apirequest/key.py create mode 100644 core/apirequest/object.py create mode 100644 core/apirequest/request.py create mode 100644 core/execution/__init__.py create mode 100644 core/execution/__pycache__/__init__.cpython-314.pyc create mode 100644 core/execution/action/__init__.py create mode 100644 core/execution/action/__pycache__/__init__.cpython-314.pyc create mode 100644 core/execution/action/__pycache__/action.cpython-314.pyc create mode 100644 core/execution/action/action.py create mode 100644 core/execution/executioncontract.py create mode 100644 core/execution/operation/__init__.py create mode 100644 core/execution/operation/__pycache__/__init__.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/logs.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/managefailure.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/operation.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/outputs.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/savedata.cpython-314.pyc create mode 100644 core/execution/operation/__pycache__/skipstep.cpython-314.pyc create mode 100644 core/execution/operation/operation.py create mode 100644 core/execution/operation/skipstep.py create mode 100644 core/manager/__init__.py create mode 100644 core/manager/__pycache__/__init__.cpython-314.pyc create mode 100644 core/manager/__pycache__/manager.cpython-314.pyc create mode 100644 core/manager/manager.py create mode 100644 core/runtime/__init__.py create mode 100644 core/runtime/__pycache__/__init__.cpython-314.pyc create mode 100644 core/runtime/__pycache__/logs.cpython-314.pyc create mode 100644 core/runtime/__pycache__/managefailure.cpython-314.pyc create mode 100644 core/runtime/__pycache__/outputs.cpython-314.pyc create mode 100644 core/runtime/__pycache__/savedata.cpython-314.pyc create mode 100644 core/runtime/logs.py create mode 100644 core/runtime/managefailure.py create mode 100644 core/runtime/outputs.py create mode 100644 core/runtime/savedata.py create mode 100644 dispatch.py create mode 100644 lifecyclemanager.py create mode 100644 login.py create mode 100644 manage.py create mode 100644 manager.py create mode 100644 plugins/__init__.py create mode 100644 plugins/__pycache__/__init__.cpython-314.pyc create mode 100644 plugins/rmass/__init__.py create mode 100644 plugins/rmass/__pycache__/__init__.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/checkavailable.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/checkavailableoperation.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/credentials.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/csrf.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/getcsrf.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/login.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/loginoperation.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/manager.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/refresh_tokens.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/refreshoperation.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/rmdefinition.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/setavailable.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/setavailableoperation.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/setnotset.cpython-314.pyc create mode 100644 plugins/rmass/__pycache__/setunavailable.cpython-314.pyc create mode 100644 plugins/rmass/actions/__init__.py create mode 100644 plugins/rmass/actions/__pycache__/__init__.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/checkavailable.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/getcsrf.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/login.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/refresh_tokens.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/setavailable.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/setnotset.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/setunavailable.cpython-314.pyc create mode 100644 plugins/rmass/actions/checkavailable.py create mode 100644 plugins/rmass/actions/getcsrf.py create mode 100644 plugins/rmass/actions/login.py create mode 100644 plugins/rmass/actions/refresh_tokens.py create mode 100644 plugins/rmass/actions/setavailable.py create mode 100644 plugins/rmass/actions/setnotset.py create mode 100644 plugins/rmass/actions/setunavailable.py create mode 100644 plugins/rmass/manager.py create mode 100644 plugins/rmass/operations/__init__.py create mode 100644 plugins/rmass/operations/__pycache__/__init__.cpython-314.pyc create mode 100644 plugins/rmass/operations/__pycache__/checkavailable.cpython-314.pyc create mode 100644 plugins/rmass/operations/__pycache__/login.cpython-314.pyc create mode 100644 plugins/rmass/operations/__pycache__/setavailable.cpython-314.pyc create mode 100644 plugins/rmass/operations/checkavailable.py create mode 100644 plugins/rmass/operations/login.py create mode 100644 plugins/rmass/operations/manageoperation.py create mode 100644 plugins/rmass/operations/setavailable.py create mode 100644 requirements.txt create mode 100644 server.py create mode 100644 setavailable.py diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ed1cec4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.git +.gitignore +__pycache__/ +*.pyc +*.pyo +*.pyd +.venv/ +venv/ diff --git a/Containerfile b/Containerfile new file mode 100644 index 0000000..9841970 --- /dev/null +++ b/Containerfile @@ -0,0 +1,9 @@ +FROM python:3.13-slim + +WORKDIR /rmmanager + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . diff --git a/__pycache__/auth.cpython-314.pyc b/__pycache__/auth.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c82521436eb96765c8e5236077ce17f3b1449283 GIT binary patch literal 1191 zcmah|%}*0S6rbI0yW4LN3`BjEsGRQ&mAUG)I) zohuy@UE%yW6D+U-@mm`^Dds#`iAY&5@g}(6lk;U|BHOZ*Q?h>IPk?24 z9L%~QH&|>EAi=zM2#`=-xCv6eU)=X7CDLdaqiU%FtD3G6&CqFI%~;j+E0&Z%gJlFO zP$!yN!%U6BO;|PwEFt*PgqW1wME2ojoHYl|=LFtJk#UDQKE18=j)v(Td8YWRI9@1<$OT=N}nEoqOGL<@4M#04iYsZh&I6W6ukn zN)uoyc*QPu?f>aODoA-xPX}IRk$Nn?r-i#B1ISAy4$M~HB1a>M&2kxHTs3Q3A;(fx zwHmC@plUmw7%!ksLkLz8#A~*eQV?$+`52?pIyQ79aZxcbM7mmsRB5OfZy1P0!9*n{ zE|rZ6q}~S7bdr*(?7~YG7PMjL7*fCUT2!LafGrX`alm~u+#Yf&Dmk98Tau$<4p`D5 z8qcg5b(pEBue3@A)$6LRu0oViO|q75yry0|CW^5eLH6Odj9K6$5(&;zSAW zN0KdN{K5zPk!}4*iMRWQ_u@P8-GsH!9*8&Vt$`V9@$2AN^G$0oZ7sEfL;JzWeQENX zRRdCCJ{o%kFqMeLW-1z(CK@%9fritl&IX+B?iNlvJ=wU}U<~*EdS%TJ-vt_RH_gpr zgNgW?MeKP3dpPd_8s_p4|6h4fH!5Zg&ZBXr^3}rAjQ#cqf^ZC?#~^qN{6E0bDY$bA XZhgC+++98Z*DPgw`a+5cQ+A|3%i$dx literal 0 HcmV?d00001 diff --git a/__pycache__/dispatch.cpython-314.pyc b/__pycache__/dispatch.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23122dbe28e219d014fa890ebed7c1cd8a57ebe2 GIT binary patch literal 1922 zcma)7%}*Og6o2de@cLu@g+m}tgN-SQ6R_KSkZ+_)2?8ah)~4O|KpHvr0vl}ac6J>F zs|O#A6e*T^p;D!iQ=C)s2lU)tw*eY7Arex#^ae`)fX*yl>~PA+p7%BH?Qh%Oap!dnVErU#$tvj@0syTvli>{>02?9@MmQ>8qlp=~W_z9Pt}NMFpyvC8}_x zP%SK|ceHu6xLho&MW%y_5`q|5@_+v)!PoikjGdsygAswLVF1IUF!^53j`iqj z#nbD1q2n>UB;PWhV+=tN=A0^0AB7zy^PF_(FDP6-PGNg%W(cxR5#*y;@PF#Jd+-K6#U}wB#GHdT>R>zOWp^3g^-RiKI}#6Pc_xF zuvqG(0kcc$GL9hC)XR_5lB-5u5(CjI<^-}-k|!rP$!g6qYL;nI<7l!oa4NT`SJYgo z@JK7=Q01Tzp`05pYb;~QX;^OlQJVPEn`q9H&e4FaaI`VK6Yg(4eiKgG;bfED5+hH; zE8$h|nz%WTX{R>_vj2#=eHJ3AJpl%W*Umq`{OodjdOdw{^Y}%Zi|_x;qBhwz}Cn0RHqnzsjUtcNCTaq>M$H)I0% zSW!o6R(-4%YxL>J7MwQ)(O!)Qj@WeffkCuAV{hl4A#!;E(Qbw#hexwhb>{#g+6A2= zzW_vD1VH3z0W4lWIMtKr3=!#@VW!Bm$1)7_4#wZX`L_^y3lZ{r2V*-@xZ(f6jWGcy F#Q#*?tziHF literal 0 HcmV?d00001 diff --git a/__pycache__/executerequest.cpython-314.pyc b/__pycache__/executerequest.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb8e26c51a76eaba91a9d8ce765abade83e57961 GIT binary patch literal 551 zcmZuu%}N4M6h7A(bHB2k2g%L4pq4?|kQ+@1Apic2dbT;MRV9>CCwQ7C~SkpUgB)Jh%WI zmB9f$lm!RrXbXzckC0Rv$X5!d@Fnpzd*tB3Ime|{gMLAR`%S2U4!awx6pzv0xEfwn z1Ez=e{h2lRw=M;BT|SVPyZWdm&KzbD3p*{_WRgp|Ozu#-$D%E4n3&L_OoW<E}q2HxTbfk2!eorDi|W+?$%4sF~s5UCmDt>%)_~$|R}X*Kg~i z%s82!q_a=)hxn*GP8a5}a600hPE(N3yfg8qzz-=tWzqQ=NJ{Vo2c{faw&`~95lQn< UJSY{@rxHTw6V$n^AZ;Q41u)TT`2YX_ literal 0 HcmV?d00001 diff --git a/__pycache__/lifecyclemanager.cpython-314.pyc b/__pycache__/lifecyclemanager.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..442eaa9327478ac650bc3485970858c50d81d96d GIT binary patch literal 1076 zcmZ`&-A@xi5TE;KkABdSGZrEe+8~7s&?e%8iC-}$3TV*W12K`9)axQAZLit8BNEi$ zgRznj@U4%$`j_~sX`^HrnDAV;xH)S{qD-I^T=;kJ0@WJK!M(u$mp0+zeSl&D;4IAZ(?aIp z!r@I-$&`mq%9W1fhEB@m`G&$GPP=IqE(G18S6#9zMat_^6_p{gaM>yPCBihv_o}|< zx*WS~ni=^;r%dw2!m?e=({i~`DLf`LU$Pg7wPKaXp(9saVM+3oSiVPYI2Dg#EgHuw zcz^CBsx{crx?iupT-{n~YMGXv-cB|2(RJ->B)QrDroZ0RjHFxoKz*U153g(c3Pdvp zmHJ$HKv|it(g6-XQ*7 vH2n_5mBDXyT@D8KD&=#)v32`U?J1HZ?ZV_POniaZFEu1(fA>VCn8^GC*#h1B literal 0 HcmV?d00001 diff --git a/__pycache__/logs.cpython-314.pyc b/__pycache__/logs.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..211195440574f77297b5509577d770854c3e52b9 GIT binary patch literal 462 zcmdPq^MJU~VRLlA>FLkU9=qcVdgQ!*1w5s+pBVrC%z zTmd8+7{V9=fHXP?0I5I&CQ!ZrgPSx1LpjjQBIOuXn4&Ny9-y5@OyR;hQZO+F1|9|z zsNM1m-m(k~oD6bMH{D{i^3!C##a2+1nO9PLi#4+(H5W*Mxtc7u*bTd^o^C7lj|chgOd429tKwK&p`bQewvJ66IU`6@dCL; m+(6u9UTn=F@5&S z%OneML?@p427}WW88l%X3d}MrF&2}6g6}F=z5;s_(%etFEzLNQ7q(VYpV*dRTV-xg zOT!5H2sWI4XDCjI_`bhrWZBVlCWO-}`BU*@aeJjbb-yh<=<*Mbh3h-jy}-V(@ILTs48&V!7%Q6n?v2+iS1AO>AMD#Ep|Sb!wothztr%%Y`(yDNQ3&*`P+P7VpN{Vtbd} zaSI%fk3I%C#K#=VjUz`cNE}HV${|8y*KY~-uq_Wl*2(F zwEXrjPd*I*{6Phm_#tzu5~dB0pu`mcIV*=aCi93VD_`^!1SBNso~P(7_>hnBLeXCk zkyr?z0F%ANU_n9><9)?YA&kOFDEVIpB$v3WkQV=>DOb}RmbEXnY71#4?TeOXBchQ$ zYw30MehZl`l;&}Oi61LZH7wQ*MWr0E5}EoVqel2}Luo2CZAH=RElaC%!{gA!Pd*R% zP8Z1`+farzs=YuamjRQ{g6S!9V{nICA-1NlPW>2_g%ae3O`0F-)DS=d*1ba!DmmA} z^sLjYj4B_TX}x8BjWqrumA$!Py-9c_BjROBzy?!8?@H4cP%o~yWFE+7e4_|C)jCTbG0N^ z%;iUG2uj`s{y#eeCEvwbYorGWxcdTV=J+Uz%bj)7vHKffeahXd2$gqof+LxpJKS9| z*#Jxv&{DWM&{GwpV86kTX=BkQNMtIXY3WU5Kloajv0K%uX4@OBIu30RJZ>sYwXRwA zYFfsArHXW;X=DGUVk-z)mXGAK=-{wVF-@(hTC@U-g36*8!a;k}cxEF7wQMXo>*K1S zYS_zCVxg%tG|U^HTOu(hbp};!LvQLdk40yO1D0l+B&lXw6geajD*}tI9tY?-9&hM% z4GVRnX4^DWYQ`aaCA(=fw5+N;)zz%kaBiBFHB8M?XqJrm6_%YF>#D425`aS8rnkHe z2XeeG&+N)G?fmgrq+L9a$J+Um$VA6CkRn^}c5n8j)Si?Y#HPE?da-OLe-fSDN%f)& z9q~XM?~CzWG2V^ui&svV`Fnlo+MaZ65S!h({$suuyVc3R^g$?kE>e7UXTBF-=oB4~ z#lAGRC(R9_Q{9zb^sUbFu{7S761!4jN9aj&&*S~{?cMb4pQHQf=cu72-7%|dkYlpGe)m$08S zv8Fd`IH;Jqyo$Ro$*%^Lj! zSV?Mhnf$PLt6`|Ey7s=6A|icQ?5pJWmxtrHLy!+){1BugxN!u@-{JZZOdP@dOa3x< IpJPG(0l+6w%m4rY literal 0 HcmV?d00001 diff --git a/__pycache__/outputs.cpython-314.pyc b/__pycache__/outputs.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab0b252990e95aef85c398dc7118e1659acbbefc GIT binary patch literal 846 zcmah{OK%cU6h6bu2<0Kuf>wc464RlyVIY=;3)7^jaYLY_i>ZlyWXjy&Q09@Dp{6T| z3sZJAF6<9*VORbN_hJo@yCTuVZ4>+f-hmlH*!U%L?|FRZp6}c{8+Ri?AUIt4)(H3j zemRZ@$~8t|VzglomcfQS>M>+}HQFPQoh6^+kG4of8$_sjl{2KGYa6sk3zWf#Ova7K z?*LLDGS%5L-Q2W_71^rOXAWMTgBPy=-jE5*`hnjgiT;CtXBSD%!L;j=+ch+a&#t1s z=uYqmM5^kHKZpNlS#-5@_LZkE0qSJ36qF(W`=%J+$yucszyhp5>CoLf0HTlFELF++ zG1IVg4bz5hU{pfZ8FpQ@@l|Pg} z?zYQ=2dkHFzccYa!Nef3-cJbKgm9B6TttV-^?tI@O%{5|C!Ny8&hO~MtJTl(ew6r&*I?cwu1Q`BaNwD$%dIBbGM9-vmhDV`OH&l}*SAQ;#@v6C C;s(E#lWe@ z#*4+6z>y=~ynEu{y@Y304kmi>29|`xlQY{b2%0dPot@c#=AZfh|JxmP*joT)H}GXC z$^v{Rrzz;`Qt!n_8D2t+i9iuzY&R5{7>AmTF+K?JKPfCa-;5_uz?;Ln&N7r61ci+= zGcal#32++oCc0|&6r|;JDqz+G-H?is#^;rEuHh?EaZ%%!3i+JIr%G8x zGbyT^D+WxOC0{BkrD8!dOY=n;$3@Cdrf7nOnUk_yc zzwe%`h&w|64|`iRzMfo5)?C9|+@XDJ&p!4^JhnOCMcziL@}6zutNN%8lO}fJvn$R2!*QiV|tu;72!! zpG#;|Ck5$~=v4HeORowGsLF6G+N)jb?lpJK>D_#ED30ujBU_PUSI>InePl!4b&XU+ zJpPuzi5a^34R!|nn=AVRlNHO3(0eS{btvxF9KHi#=+s0|2w>|dN6%X^52tJ}vDqCS zH*Jqw!w9FLTJ6Jkgh-(s)d|Ni%vZ4f;;l^QS+Br! IsPvop1FG@regFUf literal 0 HcmV?d00001 diff --git a/checkavailable.py b/checkavailable.py new file mode 100644 index 0000000..127fc02 --- /dev/null +++ b/checkavailable.py @@ -0,0 +1,5 @@ +from plugins import rmass +from core.operation.operation import buildOperation + +outputs = buildOperation(rmass.checkavailableoperation) + diff --git a/core/__init__.py b/core/__init__.py new file mode 100644 index 0000000..8248335 --- /dev/null +++ b/core/__init__.py @@ -0,0 +1,5 @@ +from .apirequest import executeRequest +from .runtime import buildSave, loadSave, buildLog, manageFailure, buildOutput +#from .execution import buildOperation, buildAction +from .execution.action import buildAction +from .execution.operation import buildOperation diff --git a/core/__pycache__/__init__.cpython-314.pyc b/core/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0d3a3cfaaf99968084bb69dfdb7455e91759bb3 GIT binary patch literal 430 zcmYLFO-lnY5KX$@tt~~p_aGD&q5B6!@KUlM73$q3c0-NqZq{^C^yc5`?-2Y4UINmC zcIETlZ_n0@soDce4WNP#F{^(+azHD=-&YtY1hP_81TsQPTC<3 zIK%~)c;FEqd=fy=cupFU2%?6&X_xe%H$rpo48{JB*@9xM2kei^B$K-?%|LgGi5)2T`&l zr)!=kvTP5R$wEk$WErnGWZ9&C(cwiYa#gTPd2Gh)V^*gIejSYQCmL_j>;uidQM^To H92(;fJvDd6 literal 0 HcmV?d00001 diff --git a/core/apirequest/__init__.py b/core/apirequest/__init__.py new file mode 100644 index 0000000..613d1c5 --- /dev/null +++ b/core/apirequest/__init__.py @@ -0,0 +1 @@ +from .execute import executeRequest diff --git a/core/apirequest/__pycache__/__init__.cpython-314.pyc b/core/apirequest/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..efc5454a32a2b2fbc13471c61dad130efd822825 GIT binary patch literal 197 zcmdPq0S%*!l^kJl@xyv1RYo1apelWJGQ0W<+*UonXBftit! M@jioc5gU*L0N8pk>p=mrQ)G` z?Lk^k<`W2B{1koygBV5+f_m^4h#$b2&Bj{r!Ms27d+*Kr&D$&$HQ@68<%i*Y3E;a3 zmcrvi=6AS>VGm5y0SbG_lsafjqS6{Xfo?X<`p2w8JB_Gf%5|U_6K#O5{1Uehb;Jt$ zku$PQ{4ByD?JwUEXpSG5pZQy^V%SC8B=Q)w)4V|1{aew^Eb%kjlT5hQI2WVyaaTP< zm!2uL)3@KE(Zq;_JZ+R!aSJ17wAF5q}as;3|f% zrN;Q?q-4bRew0^Fj*gF}<<--}Pvz#cP(8i-YI|C&o$MU%j4w@!SErTwoBZqixHGA= zW*4BcHit|_i??P?DAeNZId2GhR!p2MdqE&2{%Ap*jr010uKbN~PV literal 0 HcmV?d00001 diff --git a/core/apirequest/__pycache__/key.cpython-314.pyc b/core/apirequest/__pycache__/key.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7c97d264a30959040e76bb583f8d645309de4b5 GIT binary patch literal 486 zcmdPqPP{ZP*A`W12c&sj41}L(*(*=hpI~vXJC*4njgkw2^2{Y0P(_wf*6s_ zLS`2*0c~PJ771h02f2><7Dsk!Wm#fQY3ePu{L+$w(h{&pNoGk-swUGduFT@hyyB9? zyyVndEGe1EB|sg_KpnT(A&QG{v4S-hgFL0Crf^GLKO;XkRX-)MEHg#FC^t7TFEKr} zNI$V4vnaK&G_|-yAE;Zepz;<+QfX#Rig#*d5h%z&zAknE5)BMDc=#u9_4+rsK4BM} zpgKq7I=kE@cDV%>D@v~@o7@l(pOG<_|EhpS2kQqm22P$1uU`Hcq92%>h5)z7CK$>m64wUeYA5Us>^dEF7ec8|3M0a1P2nOi!NYCHLv0PfBW>K2;(s`o z{1|6@)p@V#oL7Q+2_OaQ(8gjoY8aR&LeI7W%B0LtxN=QLK2N$~;Dv$D6KdM^fsh^VE)N=y%EpEi=D)6SVnY^gZv%g zA{gtrs5Z$h-I1}HebDdqcdht%`lfCC5S&VX5y%&(Y0wJM@l5ccVGx!QF@9^@>lv6P j59Bv+b>DIAa6k`OR+MsOUl(pl5JDfY`mLy_5YvAF%q&=e literal 0 HcmV?d00001 diff --git a/core/apirequest/__pycache__/request.cpython-314.pyc b/core/apirequest/__pycache__/request.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ab67a865f4d1bbc5c54c58494fc1f3d8de812c5 GIT binary patch literal 1122 zcmaKs%TE(Q7{F)SeYKP>7KB0?Ak-F?R}B&(!I%)l7YUM$Sv)kFrMuY0KGxYSis8^> zz15Q(IcNfji5&R@xSR5@%|w$Xa`A?NKfsyou7Dx$#9Y?lULlsuNbE(H%nrLH z@My4$DVZi`G`9?Z4|IdYG0C=N5AHdK*sNxy^D3eZ#Y!Xkg|=oQHgESHacNCaHAox< z%P3fgHK4YvzZQLvv=OrSg_9Ihu`CG5&48qJ&`11?ZfRK)`E^sznU<1EX^2+!l!a^h zRZPk0mY&Zcu7NfY2ep?4&9oY`n;NB`<&><30*4kFVfuFO~X&SNf!GbXECY@dtO zLTx3kF5ak$Qx$QlDo$6#>968UB@ipk)!KSXv&TZ`M(jgdRfz8k@vWOX>xV-#wQ$d7 z`lE0ZzFuZXeE1Vx6-M@jk)46v%;DI>TKL-LlcVtH&efyvM472a2g-8?f!<%OVDJug z(hj;~WnYEwsyBs-^QU-AU|#e>@)0%qL$MX{Wqk#;~@Y5 literal 0 HcmV?d00001 diff --git a/core/apirequest/execute.py b/core/apirequest/execute.py new file mode 100644 index 0000000..b451791 --- /dev/null +++ b/core/apirequest/execute.py @@ -0,0 +1,26 @@ +import requests + +from .request import buildRequest + +session = requests.Session() + +def executeRequest(definition, outputs): + request = buildRequest(definition, outputs) + + response = session.request( + method=request["method"], + url=request["path"], + json=request.get("object"), + headers=request.get("headers") + ) + +# if definition hasattr(cookies): +# sessioncookies = {} + +# for cookie_name, cookie_key in cookies: + +# session.cookies.set( +# sessioncookies[cookie_name] = response[cookie_key], + + + return response diff --git a/core/apirequest/key.py b/core/apirequest/key.py new file mode 100644 index 0000000..ac076a4 --- /dev/null +++ b/core/apirequest/key.py @@ -0,0 +1,9 @@ +def buildKey(key, outputs): + value = key["keyvalue"] + + if isinstance(value, dict) and "output" in value: + value = outputs[value["output"]] + + return { + key["keytitle"]: value, + } diff --git a/core/apirequest/object.py b/core/apirequest/object.py new file mode 100644 index 0000000..79a1eb3 --- /dev/null +++ b/core/apirequest/object.py @@ -0,0 +1,11 @@ +from .key import buildKey + +def buildObject(keys, outputs): + object = {} + + for key in keys: + object.update( + buildKey(key, outputs), + ) + + return object diff --git a/core/apirequest/request.py b/core/apirequest/request.py new file mode 100644 index 0000000..ea1dc62 --- /dev/null +++ b/core/apirequest/request.py @@ -0,0 +1,28 @@ +from .object import buildObject + +def buildRequest(definition, outputs): + request = { + "method": definition.method, + "path": definition.path, + } + + if hasattr(definition, "keys"): + request["object"] = buildObject(definition.keys, outputs) + + if hasattr(definition, "headers"): + headers = {} + + for header_name, header_value in definition.headers.items(): + value = header_value + + if isinstance(value, dict) and "output" in header_value: + value = outputs[value["output"]] + + if isinstance(header_value, dict) and "prefix" in header_value: + value = header_value["prefix"] + value + + headers[header_name] = value + + request["headers"] = headers + + return request diff --git a/core/execution/__init__.py b/core/execution/__init__.py new file mode 100644 index 0000000..af15bc1 --- /dev/null +++ b/core/execution/__init__.py @@ -0,0 +1,2 @@ +#from . import action +#from . import operation diff --git a/core/execution/__pycache__/__init__.cpython-314.pyc b/core/execution/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c9c3a8a72f95c238b198c7aac2a29efd1614441 GIT binary patch literal 147 zcmdPq^MY(Pc>LlA>9gC?WjN`@jPApbK+@|J;qMt*Lp zeoA6lW{Q4MZf;^;VtQ(kesX?Ms(xxkYI12wW`3T2e0*kJW=VX!UP0w84x8Nkl+v73 XyCPPg0U#@iL5xq#jEsy$%s>_Zo)95) literal 0 HcmV?d00001 diff --git a/core/execution/action/__init__.py b/core/execution/action/__init__.py new file mode 100644 index 0000000..b1d3e8d --- /dev/null +++ b/core/execution/action/__init__.py @@ -0,0 +1,3 @@ +from .action import buildAction +#from .runtime import buildSave, loadSave, buildLog, manageFailure, buildOutput +#rom .orchestrator import buildOperation diff --git a/core/execution/action/__pycache__/__init__.cpython-314.pyc b/core/execution/action/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7d54a86cc166f0ff7da18e3954f22932ef2dfbe GIT binary patch literal 199 zcmdPqjGhc0j3tcn3_(oF44TX@8G#a- zjJLRxN;7j(9Ft2j^Yi>PnQpNqf|*6kKB!P=J6Z`?r%(lgv_>!47@6CJPzIor<>2RnAa7iA0dvm4& za3+kla9hg70$00W4P=xwNGVhq6=yZArhL?w(x@hFU)rD2sV>i28m0_tjDn1R5YRwI zzXjs(rvQs9ER42L&ZQ`W-nxj;xXO%@W7$jACSrltZm}efJTNGY7cQ;3l$(Y$pE>zl zyD$Oh=gY^}#f~D1T;;nbS&#uUt;pLgpWO?<2v`;IQkJi@BdW@(K=Qmw$E$YXb^IN? zki>(XOf##@w9q-?-?gZ1%ucRXOQ4f`S&OeL)AyguU?;OvS5?b`MUMNgWVENio)WcY z)y43?w*ahtpIZUIzAj(W*S_ai(f0XL_i|G2sWYv&je_OqeU;Ozdo0=(wHS0HXM`Dq zlPX<$6&EX%yxa+z#LeXpAscQf-os$QA{M0>Yy1mXv<~ZH6J%h~SJp!c&O1Ua>Jk?8 z^m@**5%Wt(rd6ymiu;*vA|*CqPpE0%g5f=205B2n0(^fE;xtb+UDL) z6OJFk@#E-?`h!Mvx(3f9vHC_MlGsgo0ozSDb_mCgqp^D73v5K^ct}@ff2^Kw^e1Wo z&%M=z<{>nXBZGCl5xG;-PGP7ChYsLS{Ye9wA6J?a^9K|2Uzd(17LJY3-oS_9_rrUk z`m6nL{K%L(4Mz8aBm3IO1uqgj=WUOOM<%Rl5qm$O>^!?Bz1XeLVi_gc+a}*ydq|xqLmDvL5AJ3($C1xP1R3HEXz#MFUrkL z%u7s9Ez(cUFG|%ES1?ks^>(!5s&&sU571U4rf^{$DVP`o z0}q1<)OL9WZ&?NgP6j!!s}vYwKrR6THii_SDKZT546T_H8ll=TRQp~`MIh3DT!s7Df&gZxrup+>8VBf$@xX8`uPQ^MTsEe z^mFpli}eaBZ*e4*X6B^$akBE?P}N=@yD;{;s>MZBi)*S@ z7kLyryzcM_-Vm0Zpfe-!f`GyeVX3RasuzURzOgd%@_lAzP_zE=g@=Jh56EB_-7 zz7MQG`d2YO(9kAJTZX;djy%i)5vM?awV7#adG~lvBF>b-s^^MhRZGCN3IPEyS zh$lI6^~OJ8;zhHCB}*DiNZ{g41Al<;b!(Ug5)Xcpz8~KopU?O6`rfVhU=)Z=EPQ@3 z$pReHjc6LNCfghMn(KkAVz1iu{+E+{ON3Sb73r zGR25rurAE^*iE+RodS*I2L1T?Ecdfs*xAOHMS`v-0Y?8tACn23>nINSOzX39V4j{7 zF*ES!DL@2n^x@_Es))+rZf5^T)N@2>`hO_Bw6EE2Uvhx_eRex3l@+auROz*5S0u|; zY{!yHhKi)^38`#gFYI6>)f8RXL^Y(_lI4_2$g;{#b$fh?RG){{83`jBZ)y6bq?ByU z(5+O&4VqZfZI{!P8ggS@j%Sp^#HU*Ese1NE80`qDwvcKJ9E#(6(+6Uv5k3r$bi#>NII){( zhbN9=Vkb7%ijD2fwPVwV{K$^{vGAd=v)UZL*A(uz`3EP$_1(&T=s;L}7y2~>;?1*R z2u7RH+ih;fp gJ2gXfs^~7hLbmi-TlDSyWEqC}4$>KyU_>wdH(J*C1ONa4 literal 0 HcmV?d00001 diff --git a/core/execution/operation/__pycache__/operation.cpython-314.pyc b/core/execution/operation/__pycache__/operation.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fd4a505dd42bc4e313b487a3d4398507df427e0 GIT binary patch literal 1102 zcmY*YO-vI}5T4z#-7ckDpn&|e&;)|1HLWoiP>7}nXe$OyF`%X~uI*A*+wSJ=E25_! zIT<~ecrqOI#@)n(i+AvVKH-Ev@kRm%qZj9Gx5Q4`dEd;NpWSa}<7%KCP(FPB_~=a= zz#%u9BD&!C0fIW*hn$cF%1<#XWJD@vJk&G7ZBMo>BT>o0ZCP(drm};jtS_Tb#lhZe zd&W=wh=rV-?Z^aZU<7i$GeFgxFbXl{7jL%^6Pfa`W|WJI+M3RMWm9udOkh68eZwpv z_B;4yjaoH|W}u=~wUR!k8RZ($Pw!I&YM51?YCkrtMXFl`fj4nQ#?yoU;~%K%umrc< zi~kQxNP;CU37s%E31E4KAkT9gS%Mr)xGbG@eZ^jYFytlIgk{f?IN@fT#-JUB`Evky z{tS*RUu;%-f)&Zw{ABxCMxn=~z*Xssw=J!NWR;LS^dECb(MyMn3?pVj_7HM*ll>**se1iR|#!|s6%?~$k| zGyB257tc1Y>;)6M!Nh)O==Jq2c`r1z8=Csk6aE&Bzn%LOo!RM#Y@}b_ISxQ*@b^hK zbPk+=fVq96o3mS!pZcbsr~e*#(DTO*W5-uxDOG$QK((#x-ZdawZ+4vQuYWa+-(BHi7*-6EW9 z;srcmJm}Gb2S|+m4L=&%=axk8JTXvg}W*aDL>pCm4X-0R8 z?qS;_zXXVZ=+3uu+Obv^CvthNjqXxB2oDPY&*=nst>AHRqNm_>^el~8(yDsZuIj(= zx1XXXYfmr$B9phqza;pB0*^R=IGWi%lrai@A35(tYWy;ZbE(FjC*CDrT->(2f z*C529(Bl;A06Adg4ZxF;ao+I)eThfZ*AKZ{01Dh?`$1un%zV;I-0Oy>5?0rA!YL*y z8N{a;ifWjWT13PxD@BuZNV<+xnRv9ash3TIcynm`0md3m`iK`JL)TOTQCQJbG!=K! zx}@82ugH=qkzmWzR@YIHas)1U2>T3e6K+%5C?n#(sI;O=B}BSfNQyA5?MoyQ@e3h> z@Kh@yL6$ZZS-_=|q)KZD3q=hhLDLbItd<13@wC28{HtYULtbc3g8L|$^>D^VdQ{*v z6ni`OdhX3aWv(6>+I#WU9s1?t>-=bqPgnW$5ue!!oJL1$(M&a(If>rf&F#$m3|xCR z^dVFWB)$a_^`ZP81dHGW-?zlTQlXOBafGnU$a4Z09; z==Dv<-G}kM={ugoNrs;DNv1i|0W@eFFkKlS-g_lYE^nawI6}?lxYkdkL=1E8>SKCw Hn413p_{P*M literal 0 HcmV?d00001 diff --git a/core/execution/operation/__pycache__/savedata.cpython-314.pyc b/core/execution/operation/__pycache__/savedata.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbee47d58696fbc4588878bad5e2f98adc1089e8 GIT binary patch literal 1370 zcma)+O-vI(6oB7$x9u+5*7A=CwgjnE(1O+&z?i6sN!1Wilft3eEOf;c+OE?U173P0 zUM$80kL85kynFKCy+%Z{axl@0Hxv^RPrkR^r9w>bZT8K)nfEt4UpwIQHUNt2!rS}0 z1K=wewxDgwPA3i}xC3!61_g*a+M&S3dDM3B3@60XSLP zfLZLZ3p7Uny3vcCn?qxKH)vd#H@Ju6OAW!ivY@7e(~H5d+Yn7dDJX`J)75Ov)|J9N zL%5&MWep)+%;<(wXIi#k2w5eghMk5xS1jnoLf&vGGX)L3B+8OXQ<~b89IfeHZC=eg zvAa+x7z`Rik$bs}8c8b)S~|iq86~UCsw^^-V`>CDU(=QhRY4==R!ZTrE~S`}J$ zWpu?Hzw>lWuiGz=y5Ee-R~qDf5W20_b~;Q5lh#E6;AQ>|E4q;!f|Db;hv38>ShYyf zJ&vaU#_>vr)&nan} zK}H8;^!*sMZ3wh!h@^=qMt>TN+6y}w{VbT5lpmELk(0%pIVJAuu(3vRGBcU@97U7j z@;Ou`*pj^Ew$;E&pz80bT>U8ZZ%F+wVp}a8tFfoC=i2+0{$&X{X$Wt-psmY-tUFX$ z{LnqT?0zS9Zi!x#p0Ucp`lGc+l}yza-4xINa1uQtc$!P&yGJk{Q`g|Bv|k=^z8R6P zNK%+LPirF0sIix@gBq-!FJ^M-;=Fo^b>SMZlqdGLd5+^ggZxvFxz=BuBG=50;qo8& CDgUnk literal 0 HcmV?d00001 diff --git a/core/execution/operation/__pycache__/skipstep.cpython-314.pyc b/core/execution/operation/__pycache__/skipstep.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5f87e3fa42e7f5f6b4ef808fdf428c33820b969 GIT binary patch literal 800 zcmZuwL2nX46n?wQQYcVBARCcASV2@^J$;$PpqB~Psz&M$-$ z?$GmRFOLGx#(|$YUoj|J#{)&%xXRL25LrV%3bVjl;~>L5W)@^BZNpZzp=%8t+f+?L zg07-ndg%dXcZBVRv}@m}%9B{a(lDzbS<$gY5o!{)Z#FgQF+wWB zwkJ~4tVs8?C~e7#tjnr`twPDnQ={wZ*j`cu)Cr%-mOvYmPHdj$= z5+@2fvdE!YO;Ciggt(H5ByMDvNONOPx3uQS;07^>yhO$LPW9JhYr!e)WCJ~i_c)L` z3Zy!YR4;h#IG8yKX4)&=V0LfyBoc2|x{1YZB)9kU#2wrZb=`@!rQ@FK`C{#IH?h$1 zE&T9b*0G2RPHehJJ7c-c$}9SBF5c0qpjl zG9>@5Um{jsEni>e;4|laXkorE6xr9(l=": + if current_value >= condition["value"]: + print(f"Skipping {action.name}") + return True + + except TypeError, KeyError: + return False diff --git a/core/manager/__init__.py b/core/manager/__init__.py new file mode 100644 index 0000000..5762ccb --- /dev/null +++ b/core/manager/__init__.py @@ -0,0 +1 @@ +from . import manager diff --git a/core/manager/__pycache__/__init__.cpython-314.pyc b/core/manager/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24adde11d8d54c81ea904f4ed14561f88d416464 GIT binary patch literal 180 zcmdPqAx7v&4Y(V-N=hn4pZ$LO@0XLmXoeqbGw0V+o@?LlBcPgC_G!MxcZy z<1O~w#Jt4x)FMAkrdtd}%s|1F44*-oZ|Ui0SwHoLP3Of*21v$;`Yr@0)Mtz4>Oi{ZtF!_Tk<8 z`4t9WpE!1-Eu($`8#TBOd1?a2K>T~$88WbQ$R*y89nzpY3Irc~pyXPThE#@4@ zqjpTD3zP@Oz5&S0w9Cd7m^{QR_KVgcF9P&IfytSrv5|*!o=V&W;Bm(Y$hG|%CEguc zrEk%Rn;6w$q1un5%=k4D&*BnhM|$Dk^AbxuPO2V5J%@ zykOf?VVBV&*=nsKB2R;wOUHuHyN4^aqL9>^uC8+fR}j<;9$hBR-emOk+HK20tsS4MSTNb`j@eV1yP z{Z9X5*KTXa(v4>`dh6gu>)=}Wb!0vAHoY}8w&Omdy91g#u$tL+r{1LXSW1hfba!f} z>+EiD_*L?G^2MkgjBCO8W-zgo+3ml)c5k!)`f}=^!MN36%xn*hn~VdRdtkLh80YnP zN{bW5jlUqRcSBd8j<|@oGsJMLpOh ZAEfHR!xx64s69Bh2Uowc9x7q(_zpyB`}P0; literal 0 HcmV?d00001 diff --git a/core/manager/manager.py b/core/manager/manager.py new file mode 100644 index 0000000..4b124f8 --- /dev/null +++ b/core/manager/manager.py @@ -0,0 +1,25 @@ +from datetime import datetime +from core.operation.operation import buildOperation + +def buildManager(definition): + operations = definition.operations + + current_time = datetime.now().time() + + for operation in operations: + if hasattr(operation, "role") and operation.role == "activate": + if definition.uptime <= current_time <= definition.downtime: + while True: + current_time = datetime.now().time() + outputs = buildOperation(operation) + + if hasattr(operation, "role") and operation.role == "deactivate": + if definition.downtime <= current_time <= definition.uptime: + while True: + current_time = datetime.now().time() + outputs = buildOperation(operation) + +# if hasattr(operation, "role") and role == offline: +# outputs = buildOperation(operation) + + diff --git a/core/runtime/__init__.py b/core/runtime/__init__.py new file mode 100644 index 0000000..9d915dd --- /dev/null +++ b/core/runtime/__init__.py @@ -0,0 +1,9 @@ +#from .managefailure import manageFailure +#from . import outputs +#from . import managefailure +#from . import savedata +from .outputs import buildOutput +from .savedata import buildSave, loadSave +from .logs import buildLog +#from . import managefailure +from .managefailure import manageFailure diff --git a/core/runtime/__pycache__/__init__.cpython-314.pyc b/core/runtime/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..92035227190a7f200f0779fb21e11ff926a3572a GIT binary patch literal 345 zcmXw!&q~BF5XL9{n_a0Mym?vFi$&PpMLbFiqOjgA(bO7gn0@DS4I8!tmj?AEOj4ZkvaZglF|(IBtcqO!D+j61?DI@lMo zMowDRvAQ~EqA{wvOh-1BL%df$-n6vG3}>3D0Hq3@7c{c&Rpf9JzhB2yjNU7(u!Egu z53;Q?&K81as$IXMvOB4&Oqos#9G0c%gf7eJ{K?YOR&vu+XKDxI?nC`9wjZAm@;e5y P{{iVc?0vzJO3?oU9Y0#e literal 0 HcmV?d00001 diff --git a/core/runtime/__pycache__/logs.cpython-314.pyc b/core/runtime/__pycache__/logs.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64fda39411528cbd2f4510367b02cc00d0f51e76 GIT binary patch literal 470 zcmdPqnpvbA!wORr#>4}((}*ctSVsyb#=yYC zU;?#Up21s|fq|1j4(g^`j8=Y{%(vJIiZb&`if^%ImZataDKJ-)-Yxe0 z(vpHwpaL$iOnhEqZt5*g2s=BqvX}*EmztV_!YwWRjQreG{glMA%oP2i+}y;x#Prl6 z{p9?jRQ;mTypl|yWKMp1v0g#tEsmtp%$yXT{PZGFSb+kr*c?bSFg#FHUoN{)_PV0U zMMaZqie?u%WIMR-aPZ#Xm+Z)yp?HBu<_5pmRer?_d`jO~nK`*WGczcee+Fu0@Y7@j u8@7_6h!@B$;sz48IBatBQ%ZAE?TYw;T(CW$`1`=j$jJDGiH(s9tQG*RY+yS8 literal 0 HcmV?d00001 diff --git a/core/runtime/__pycache__/managefailure.cpython-314.pyc b/core/runtime/__pycache__/managefailure.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b65f5ebc0012c254efdb586cf53922e2c43fb85b GIT binary patch literal 966 zcmZuw&1(}u6n~rD?52$gi6m)lib-vo7%T~BKm-ws(hr1M0;UIpal1RVD@k^p-L0k| z*4rKf^`L)(w;uK6&2y^NmLUb9Uc6Q6AK=V>n2YZ)Z{F{Hzj<>d9vcNp3n!nSJ_`Yy zFd-l+yL2`~*$zB{8n+BfoWrnOM z7(zn|(EsUIBY}3v&(St%4tFd=l-;N%bX5pq=V0y54T`E$tg5x@+{Dn@2-m|2SV+*i z#6~Q@*VcoMp3@F+@!olW5x5BT&@>F|tkXQh95tSfRUk2p6nzWfRlTJt-R)#vMHW&l zq~=u{Yn_e!cD9_KH;h)73BGYRZ@A{=m6AlHP1%$!3u88NB3NAmk+4C1EfQ%qJ8~N} zn?zt73)G?%Az_5Ej)^F{&qgHOeNB^yE^d-hmp9!=5=MrsVXE{lB!ZD?=p7T8Y{Z2^ zAb*LYieIGSQF81sIlG^nb;LpX!rR&1htBBFNbF6jhjz1`rk^PE3)er0 zpQ0b5doTNUoBjCXgNXbinm&l;jxv+qGMAmjlZmOGIGCyIiC<@K?N9uTZd308 pXQ(+&F`vlIwyxSObPKb+V*6~;b%Il#dDi>GZn;{>- zm1B6qxXL(6l@4sfB3Q7^JcgW4_In_DbM$lU@jA`ufCzOja|Tp)b;B?E3yi^vY}WNC z9{@5Svh~@TZfu&xiCo?3Gbdi0hnKqm@8|@$u@~?_Vqh=m>17&oWZHGX?Hal9&z@qS z>`w3qM5gYHKPUg;a>wP;-BF*t0%*|5GEj*D>|ik{&{~xQKnNZ}<+Xcv0Yo3&EK|z` z2-`Gujra}SAe?HUwn@UOscNPrX)+?LqRJMzB^d_N6cW&F%djmo7bZcBOhea9M1!)W z>KYEwRwU-R4;0Cg2tPIT!zPj~lf>sd#Qzo@6YfZA*@#4L>K|xQ8RrHI>YNs}4~7iArzBDOV4r9qc$!8j(7LtAYrTNCy;NlQ5^H$T#& z1EXZ-OZ8Lr^H!%iyuW<<{s)`<6HX0ND}z*_mnvMQN+nDWaYU!+U znS3(lpzwkjM0}_1R))l*j*6|`WC$ybaT>BY@ L`RiL?5)a7<}^D#UjSrD$y0!VNKZV3GlfW|f>WtFq{Ho~cn*%o!RkIyDXJi>7qDsLf}tV}90* zN$8su?x8Ee=Rk8Q{CsOxf22fLHl9swg8n047&z7r@C~tZI?u z`ylCZK+yU9FyW5>01(k1K=g$hd{Wp0zhJ>%2T=HL08i8aOu~TxUa14fCLYM4`Mi>G z2xN3XM&FN7*``2?rbwQ6V)U26sJw`q(T{@p$OX`u5{Yc;tS(VkM~yX+$jW5l(}hEd zE9B9YU|sT++gF0i!D^tda_N&auqq9_jIXzLuEd|jpJ^Xj2bLt{q%pG50PQ_CWWC|a z;>X^RCC_`YdtLNd^o&;)UOasMu#&C%V{78sO*hdag14nKv2zIHF?9`|O2>s!_uEnV zq9jFl>$Dcqj0$@NTj;^A`CK-iDbB0sSr5(;O9f(ogXcKz3&_6&nQPnb7P%I77^nXL DCAa{H literal 0 HcmV?d00001 diff --git a/core/runtime/logs.py b/core/runtime/logs.py new file mode 100644 index 0000000..aca56c0 --- /dev/null +++ b/core/runtime/logs.py @@ -0,0 +1,11 @@ +def buildLog (action, outputs): +# try: + for print_name, print_key in action.prints.items(): + print( + f"{print_name}:", + f"{outputs[print_key]}", + ) + + # except KeyError: + #outputs[print_key] = "N/A" + # return diff --git a/core/runtime/managefailure.py b/core/runtime/managefailure.py new file mode 100644 index 0000000..ff94b43 --- /dev/null +++ b/core/runtime/managefailure.py @@ -0,0 +1,19 @@ +from core.runtime.outputs import buildOutput +from core.execution.action.action import buildAction +#from core.runtime.outputs import buildOutput + +def manageFailure(error, action, outputs): + if hasattr(action, "recoverPolicy"): + errors = action.recoverPolicy + error_type = type(error) + + print(f"{type(error).__name__} detected during {action.name}. Applying recovery policy.") + + if error_type in errors: + repairs = errors[error_type] + + for repair in repairs: + outputs, response = buildAction(repair, outputs) + + return outputs + print(f"{error}") diff --git a/core/runtime/outputs.py b/core/runtime/outputs.py new file mode 100644 index 0000000..a64740a --- /dev/null +++ b/core/runtime/outputs.py @@ -0,0 +1,21 @@ +def buildOutput(response, action, outputs): + + response_data = response.json() + response_objects = [response_data] + + while response_objects: + response_object = response_objects.pop() + + for key, value, in response_object.items(): + + 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 + + + return outputs + + diff --git a/core/runtime/savedata.py b/core/runtime/savedata.py new file mode 100644 index 0000000..44998b6 --- /dev/null +++ b/core/runtime/savedata.py @@ -0,0 +1,24 @@ +import json + +def buildSave(outputs, action): + save_data = {} + + 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) + + print(f"{save_name} saved by {action.name}") + + return save_file + +def loadSave(outputs, action): + 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}") + + return outputs diff --git a/dispatch.py b/dispatch.py new file mode 100644 index 0000000..0a4bee0 --- /dev/null +++ b/dispatch.py @@ -0,0 +1,55 @@ +from core.execution.action import buildAction +from core.execution.operation import buildOperation +import plugins +import importlib +import threading +from lifecyclemanager import manageLifecycle + +lifecycles = {} + +def buildDispatch(request): + dispatch = [] + + for key in request["module"]: + dispatch.append(request["module"][key]) + + resolveddispatch = "plugins."+ ".".join(dispatch) + + module = importlib.import_module(resolveddispatch) + + mode = request.get("mode", "oneshot") + + if mode == "continuous": + + state = { + "mode": "continuous" + } + + lifecycles[resolveddispatch] = state + + print(f"Dispatching: {module.name}") + + thread = threading.Thread( + target=manageLifecycle, + args=(module, state) + ) + + thread.start() + print(f"Started lifecycle: {module.name}") + + elif mode == "stop": + if resolveddispatch in lifecycles: + state = lifecycles[resolveddispatch] + state["mode"] = "stop" + print(f"Stopping lifecycle: {module.name}") + else: + print(f"No registered lifecycle: {module.name}") + + elif mode == "oneshot": + outputs = manageLifecycle(module, {"mode": "oneshot"}) + + else: + raise ValueError(f"Unsupported lifecycle mode {mode}") + + return + #outputs = manageLifecycle(module, state) diff --git a/lifecyclemanager.py b/lifecyclemanager.py new file mode 100644 index 0000000..1cf7388 --- /dev/null +++ b/lifecyclemanager.py @@ -0,0 +1,23 @@ +from core.execution.operation import buildOperation +from core.execution.action import buildAction +import time + +def executeContract(module): + if module.kind == "operation": + outputs = buildOperation(module) + + elif module.kind == "action": + outputs = buildAction(module) + + +def manageLifecycle(module, state): + if state["mode"] == "continuous": + while state["mode"] == "continuous": + outputs = executeContract(module) + + time.sleep(module.sleeptime) + + elif state["mode"] == "oneshot": + outputs = executeContract(module) + + return diff --git a/login.py b/login.py new file mode 100644 index 0000000..a39d8bd --- /dev/null +++ b/login.py @@ -0,0 +1,5 @@ +from plugins import rmass +from core.execution.operation import buildOperation + +outputs = buildOperation(rmass.operations.login) + diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..898b8d2 --- /dev/null +++ b/manage.py @@ -0,0 +1,4 @@ +from plugins import rmass +from operation import buildOperation + +outputs = buildOperation(rmass.checkavailableoperation) diff --git a/manager.py b/manager.py new file mode 100644 index 0000000..629aa24 --- /dev/null +++ b/manager.py @@ -0,0 +1,4 @@ +from core.manager.manager import buildManager +from plugins import rmass + +outputs = buildManager(rmass.manager) diff --git a/plugins/__init__.py b/plugins/__init__.py new file mode 100644 index 0000000..8abf564 --- /dev/null +++ b/plugins/__init__.py @@ -0,0 +1 @@ +from . import rmass diff --git a/plugins/__pycache__/__init__.cpython-314.pyc b/plugins/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94fd1484f28b6108eaf78e661831929afd3191c5 GIT binary patch literal 173 zcmdPqo%v4|bW2LNHtF(m*1 literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/checkavailable.cpython-314.pyc b/plugins/rmass/__pycache__/checkavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c6d9bd747751439f738f0782cbe8b7911164d06 GIT binary patch literal 521 zcmXw0J&PML5Y>KZeS2PW7?UQAA(aVOT#@Do2Ny`vrBGa@3CgbGRlJfGY1TP!wWM-+ ze)U;R(C^dceEGybLI>;rpprsm6L=SHukF58;lnwjt7{{-1jJ`GV21c&r_A0P8+ zpB*nIJwB#4eLP^4O!m7&obPu-5?zLUI*d^=JB+R#mZ!Av>@z$>$yvHWNxm0{c=jMX LpWz?aOnv*miUFf~ literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/checkavailableoperation.cpython-314.pyc b/plugins/rmass/__pycache__/checkavailableoperation.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d9b0dde8f19bcb3035a62d87ba51654b64bc637 GIT binary patch literal 310 zcmY*VyH3ME5Zrq>h5#<01*M>}i0mIgsZB$XKA^+C*e15my1PW8Lwo`?Kfr$=QPZK5 z5Cs*TrThSU5)@1^yF1d%uJ$ZC7z5(<@#Xdj>z5z?K!2NUg3Uc#kvX}5j98LUOEYHK z#A_5aZutZjY{3(1gE>2en12&A#mohbD(lXLrL?)xOBZRm)Y4SfR;^@bV&bB_lKDz( zMBRv+Mqb7v2b!TZKMwBNALV_*bVmRL#X|` FegOLCQGEaa literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/credentials.cpython-314.pyc b/plugins/rmass/__pycache__/credentials.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e2c2f0fd4007fdf329c21275fbfa9840ad847e6 GIT binary patch literal 449 zcmdPq;J>Oi7_;SRrGe^qDI49%dhz&@A4Oq!g t!~TZlX-=wL5g(At2*ky_K;i>4BO~K&2F@=m%#3ni^Md_YD6Ll8p=Ll9#LV-S-vgC_GWW_Q<+DwT|q zl7eC@ef^@;ypr6+;^NfOBE97NT>Zp?O#L!L{ha*t%sf9$rdw>esU;ctDYsY(5=$~x zGJFOZeM?(EBR@A)KP9m&Gey5BH#adaF+H_NzaXa+sH+$#0yI!Rxwt4zub}c4hfQvN mN@-52T@eRRFUW1h{6OLZGb1D84NkrWwg>FGO)N!hKrsL&967H5 literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/getcsrf.cpython-314.pyc b/plugins/rmass/__pycache__/getcsrf.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be2d255c59ecfc0835dc814dd52db9ec6bf365dc GIT binary patch literal 319 zcmXv|!Ait15KY>&)h@fRCvUQ#D2v$ORm6+v-aN#;OW4M?+B7AZthlG*7l?o1fA|rS z(}F*+us>ib`e0_>4D;sA$!M4&4_tjdzWe&!H~$F!$ade84lx9XVZbbafQ1k;!Xk=+ zu=oH?lhtS@U~+ZGZYH3fL^F5c?0UXBECE_`PN^0RNN$XxJ%c&qb^=2 WrybeEC>p;VZNgv>ye4|!cYgp)6kTrs literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/login.cpython-314.pyc b/plugins/rmass/__pycache__/login.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0f3da96da90f6720b21dafb29fe91c06875a3cc8 GIT binary patch literal 810 zcmZ`#O>fgM7JmI{djOacyrQHyJZChfqd7*uXKZj))fC0o8^JDoOhh<4*d z{{~kMh#$aTK&s585+`nv_6Km%jxi)GC4RpA`hESN*>Hebn`hq+zv=+|EXl>Pm*D)f z0y)?PSbG5kz`D?IP3SwIZ(T$$cWi9jykx@oPs+TKGO>ki40jBqD^yp=tdN5tcCm-F ziZw9YRj6wS3pa(0uL+1(@G5TMHqu31;Z|1{4!$m2tla_YonK`muci4aISAsRwDI=d z+rblDf&SKDAmI@`5rGJ)G-*VFuo5OD%&3GZ;ruvZV`+>y+n08di8K>jIwjo`$q|hu zWHh4DJIbWde=``K-t~n@c@H5*V-cwWG-KUS5+RZXXz~b!Wh2rfqY>qNS;JkhVO6lf z=su&|UwYn>R_5sq2NT|o98}r6$?#$iB$KHqDH2ChW z<#2X|6%f?h(`Pf-nm#YgnrRhIDZKnwc&db%*O|UAYI?^hOj9MBf0A2^qqo~o&yC_f ra8`0_Za-Am0%m)&&>1FWVyvq#0-=zVgVAj*b|dW zGV}9_S2BDCav5%!>SyHVrs}68mSv{s7v<(A<|U@57U>t{lmayu14R;xi}k@KD*|~0WO=a^kodsN$jEq?LG&(z@CP;qR-PLyoF7=3xtW^S Ii#UMN04T{ka{vGU literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/manager.cpython-314.pyc b/plugins/rmass/__pycache__/manager.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cdbad41522a403662ae56b5515d8513166369c9 GIT binary patch literal 762 zcmcIiyKdA#6usl|`Y|>uK|-^63566Z(7K^Q5u!=7j!0NpP;Ss5Pl6*qR^!=4L?TKm z_y-DVeglagSSi|QP%0`aEVf9?cpVcERSIq~_ntH7p1Gr$d(9gJRQ&k-<=`U%_*Q~C z^vh!USnV9cE(FL2QD)6YT_n&7?4khsS{Dnv0)5;;LhqyA%&|79@*U_y&;6S#QJ~*% zU9myqfmWej^NOu2Vf{yM`C2d9 z1IDR{vQ#?H{Oyew&wFJ$Y^-%3u5C+q#y#EKeB$qHv>mBsImgOU0xw@mlHcvQv~s}* z0`C08SsXiy|4Q9IrM8kfa}%;K XCJVLn=u}^>T%B6_Q@L9Frkd{;`oER~ literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/refresh_tokens.cpython-314.pyc b/plugins/rmass/__pycache__/refresh_tokens.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c2b11b8b40be4393b9e3f26c036b20a19069d4a GIT binary patch literal 704 zcmZ8e%Z}496m{Nd9-V!>C|lRv-P>U4?YDVp8^wRCEA?IMmwC zUpKHm#VOAjPUt2}1`mr%sV7In#GdwH9xA(_Ia7g5`DY0fDyiI@X|IX0OA4v-QbrRd zqzV$A)2!&}-iq_9j7jCMIZYA@RQZx_*q`X2JseYhN4MRJspo&Y5_wJwdcg!P*VRQ< zNG!U0yt}!>spO*kqWqURPpUP0B_8N5hW_MNy|tEM7(4HzvG?)4CfJY0jl1{G8oPCo zGu`>eTik8)*0E09)^b9#@!Bzp9yUS8xZf2Qtz}N#-w+?*$m_XNx2 z=EBJZKZQhmGm0j{$E9{Fi)$Y>rmQp{>vaZYO zh;xudt&*ye4IC`A;z^nD^9MZFr&(cob*7|lYU3Q<|3si~huD$kkT128JWbBCl!H=9 zk(^54W!_*}g*Vs{eJW3~BC9i99F&)4yr|&h-OU|D*vd++ZlSv(-`LLT?wSq1jvuYr zWc9G^d4r%Oo*#fkwXhnuHpHOQ9AjV!-DsW@5zMLR%^ktsQtpYq2)TzG24E|U_v+>A zWAHHqOU`&_l`f1gRg&d~mH6`u4XN?$Zw&*fq*jbpHZw CMxC+% literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/setavailable.cpython-314.pyc b/plugins/rmass/__pycache__/setavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0e318eafa54f1e3e3c741acd4fb18fc26abb40d GIT binary patch literal 920 zcmY*X&2G~`5MJAf?Kr<}(f|^NR6Rfiid(e;snANP0JT*Ws-@+YRNHuImiSNJbs#xe zJVAOY55R>tC=bBBQiW74mq?tr8TAF&{IrER?0oaBXXcw(KgwkdAgoyX{{D*$z^_qo zZR!+Uoe2ZdQ*BlRx@Q%P=_gKG$m6OC=HE9%9N`zGhl|LVU}fJ4(4G2&cIny7Amr^2us4} z;2bOppNG-{SS+Wz+II@de6#|X1AS3RE*&mA)&GsIlC!T^mqW$$3W zzusodr)#DeV3#?FQXB@=mgktrCuVoqM6H$=y3Di?Z6A3ku+0C|W@{m9djaWBN~&JS z{E+dCNW+vKGOvSOuKEFfM?UtoO^gB@RCxYooA{GDgOpe|Pl&xxt~yv~ zws^uvtj)DHMivez*CyJv$N+u<>BsbIv? z%zq!P>i4+*-0`f?#v8$cs4@DR=r?i1iX=%tL29VoixR_RF_MSbnaGG$keoX&KZq4M zBS-ol9n6#lo2NS`JE!%N`uW1sGwGtVc2Rg1WryjzpO=56??-y9gH&;_b*aw|YH?CY zsPcXF);|3}MD$ zl7%nPeDd4*p*gdxQtNVOgSCXE(JLDn31TnGN_?!Ooh~cB`@@ICpI3(ymK%RjPV1yzDL)CkJxEXXFZLF zfF5~WFhuA$?!xgQ>S;JI5_?_bSa#C$_%QGJ>~PuhXNNP_aOw}lkGzf#G2*kYRG&Hd EKd^<9r~m)} literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/setnotset.cpython-314.pyc b/plugins/rmass/__pycache__/setnotset.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e2a79ccbb831db45ae05dc5a06df33d2f7ded8d GIT binary patch literal 524 zcmYLF%WB&|6dk?gq)vj9MHbzZtU`;Yfj}UAfI?d85L_dY?(8zL25VYrMrf`C&PwzP zoK^Y@{e!Oa1%*&3(@jcOT@(cQfsRs}oW-4U&m8W#Gmlr=OGqR8d-dVaKP*WHZM?5aV%1* zqe>RxJWUBF6Pn{JDJG0dt?2czq`(E}+RdiQf1Zk{Na)LaLl0=aPY!gcEyFN=qSmjq z_1VGY(Z$ha|DykGYwxRZy|I72_N;2(EN_0^`M&(H^6LkvwLW|E!|%+3+OZtBwjAHA T?0N+)tyb=h_xh8acl6MI&FhYp literal 0 HcmV?d00001 diff --git a/plugins/rmass/__pycache__/setunavailable.cpython-314.pyc b/plugins/rmass/__pycache__/setunavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..872c88a88a7224401a3547c955f5ee750f312f92 GIT binary patch literal 563 zcmYjNO>5LZ7@mA5yXr#J9y|y|JQQUIp&lx&5V6vgQrEHdwkxxnVKdug5+;+tdJ5tX z*wRD&3;qMo{sN&0GF~d4JP3jQ0VnM)^*PKu@59UUyzl$q#`P9Zc=Pw`^jHJncT+53 zFUa{vMJg}^Nb3Os2HGkZfWEnGyZZai6<;!>4~=#GvRYRO4TL!`huXu7QGnAM#jK`dRG@Va)g6i;UeuGSo8ig?R(M>-Uhwh;Mwl>yXOZe*zdjClkOpz2`XYD z?Ucookqf27aiLgPa4cxbq|ravf4>z8k>yVy4U3pO<+qee zbJQHGr#3WA`w6^X{_XkbWO_6`VMpxS{f#fHrz@MM{#MmFYv1|w`g{9s<<{4LcXPh; n!}aGuZ5ftbw;JJPBkWuXZO_#!vt9wMPGz4tFFu&uS1JDhFi)9^ literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__init__.py b/plugins/rmass/actions/__init__.py new file mode 100644 index 0000000..2d020a5 --- /dev/null +++ b/plugins/rmass/actions/__init__.py @@ -0,0 +1 @@ +from . import login, getcsrf, refresh_tokens, checkavailable, setavailable, setunavailable, setnotset diff --git a/plugins/rmass/actions/__pycache__/__init__.cpython-314.pyc b/plugins/rmass/actions/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c382f1abb5e6e6315c61dc460dc74d0b64cfd63e GIT binary patch literal 329 zcmYL^Jx;_h5Jv6%Y_e#{6)30z5-DjAwP`5!07Twol9)~Gl|5OBj+4-H5iUT1O8TkzgWH zOvM5hBE#&At)p{R#^0PSl$lRQ(<|+>9d0-?xh;#W(2=- zfJZCHW_|P}xi(0=FLTdqOrO{!APraqWC3}=lJLq7MCPxn!AwxKaIsatv!Qh>NT~X^7V&7Si literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/checkavailable.cpython-314.pyc b/plugins/rmass/actions/__pycache__/checkavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9b9da0d7ef99e0c2bd6dc8dfef5e94b0c5de3c8 GIT binary patch literal 599 zcmXw0&5GMF5SIVs#EG-pWmyWn1bPaEh`latVGG+r3#F*JmZG)QSdAqaNp|a;OiwxP zYxL6B=qm)B0(}9)zCh({JAz^K&8PX8PtRs)0$hm6@2|f+0R9Y@{}KHw?%%qi0~i>9 zJ>y~D_&6{D4o!$7cOZtyHxZ8U2#;}sC&)*hfq3eA>9H4o8ZCjt#(4G=EKas(*9~DM zxn(6Y?K~@Jwy}_8hDq_-25)Xw+sne3N?#$Qs4$#pO>4ExBuAuTsJTQW%VaGK+E7|a zQ8Gbo%&FF7?TUt!EMG~RUe~6Oifzd-*+N;Hsy24&9y{u1BRABcm7-tR_ig-&5=GVA z!jFcST5o47#_1eWPMBa~{eF?yP!LXSxM3o*uJgm#EC z!mU1RqtVee@?d01msM*=&$-O&lD<@r-8A=|Ky#P+!1KI){GopO5T!e|56|zI!xPxSft~Jd O`@nzX|47w^Q~V3fKfRg& literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/getcsrf.cpython-314.pyc b/plugins/rmass/actions/__pycache__/getcsrf.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25b86690fc7578eac531b9c357cc3fdda6de7913 GIT binary patch literal 350 zcmXv|!Ab)$5KVT|-MXbMJ$WrELQxyMco6X-+LIn)?-IJPyS7P|WVXeg7QeuM@Z^{H z3zAd8A1L$(%u;GRsx!5}WCz1rDWkkra^W)RBTi=3-q!QG)$M z+d8_tpqZ9}rhJj7)JVw{p9({ZdFhR;zxWJv7tzwGfZA=U|;ss rw@rvK{*L!6vW~mHwR=^v-s@D+IzFq&CPIzg`|&0WTESav+FtMrDrjid literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/login.cpython-314.pyc b/plugins/rmass/actions/__pycache__/login.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b290d28555d2498b9f4599cf1ae8e09f0996665 GIT binary patch literal 841 zcmZ`$%Wl&^6dgN$Ol&88gn-0`ipQcnGD2b%A*3#Nib6Cg%eESlY2zmLSTo~PsaRO- zSdri02iWidhz~%DhD{_^>@4*M7&|GYNQ~t1Ip-cUh{xn*#CO;%>>|QLC%)D z1gD=h$iN=J#&aM6Hl=|p(!`dm?1BzFv!B1QefR1)llFgH&IOl)T?}z`*G8sBo<>fI zd|br=t|6mjbzI%ksAWkPuSkejWfiaCb=<(0kSRTl8!c1%xG4i{+yI-Ge-%MqDf=Zm z3}fYxo(x&Mqg=eb|EBvGm!PxN?J78=6B)`8RW^-CI4XrP8KqRgga~oWcwbpP!4H(n zQkkSuD6gRVk_~CBAg2+H-cqit&g<^Z$<2Y3iD)ClX)Gh%fTq0FV-X@rh{pHPs0ex=u&f13S{6^PpaF|0>XUKUM`ZxfIub12tSOTTWyK_-${L1o zUwLA{j)f#L70RXYIOI&HO$FtJi5K^;opd6U6Hz%}ddh^z0S}4-6l6^MM3Mz63ZKAf zai;3Q-w}8ek(eA(j*?NTPg)>e%#0T2Ef&+Zl8J&3Bi2tx^bx@Zw+Li56x- zbNVi?m`yLYZSAc8ac(U>z1DzcX63hmx0*R~_nyWMup86unbnx?X^(GaZXRe!3z`OI P2KE1fTkj#?(D{D@QlRp^ literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/refresh_tokens.cpython-314.pyc b/plugins/rmass/actions/__pycache__/refresh_tokens.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c04658f3b359255c9a1d02f22d75162cbc4fb8bb GIT binary patch literal 835 zcmZ8e%Wl*#6m{O2Ofu7HtHOe+l@Nb6Bz;x=g~ab!CK%_`yx z`WtNd2)<$D4I_1h*hK0NU}uJ>7xq2Z=iGaIy*G#gpw^?CuNOZ|0B$t+wVYLOTdSY} zrv@_KfI~wVho&%h05XMzEMX&CILHw$a*>C8)I$L@p&>lf7d{GAE`kOc=sRdYQ}j@T z{D~=o)!9cw5vn*;+BJ0_oeWNl6LX?#4AJO57_Wafl!37+y>lXB&d#JWrRP~uN5}M% z6uXR^F~ZYhX}#V*t{8}#j1(froRf-8Vwyu-W^ndcr8_nhTFYhhvJxp}S&ctIpx7V@Eq0uSvix^=xLVP1*&{i41s3KX8FX#ig4Q5Q;< zbehFipTVs%1LX6+-@x)57xtz&Jut>yI1#%l*4 z+-?HRSl5@6)-pHU-w-Zg&+E9Gz}cAF8%iIVjo*g*Qbiu=@fBm U?hogFq%wDP>yh~>V%y60Po`7@Hvj+t literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/setavailable.cpython-314.pyc b/plugins/rmass/actions/__pycache__/setavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4868c6cfb46dc71a551063e2d1825fb1d967ab8e GIT binary patch literal 951 zcmY*XO-~a+7@pm2cemSbC`A(wHN+^QOI3MT@407~nC0Vp#GDolncroc2yK^1DI#L~O!ZLkZr3YY2EcB_2tUwTmAQx-(U zL>8p6WtrW~p7dbU(FJ0_3^ZVNPcmiUwN;D)9MpL6YMy<;O>C}ROw}(o#yhcb zZS*o*=CVh5%0&+5sSa^1E)$CzwC%m646%@Mopy*%8TPqCT*fu*c1a)>sT^X)^H-G^ zad40vRM6la<*I{4=N3=-h_$)a#>m0}<=S`x@$LtLj(!5?$;J4R+4dYP*3c!E88{Ad z(IE~@-wqFnO9diUCzh2gmYV;bu1UD(8epl9l@3SWAvL)u_8&*PmmdEH>1>0 zD+-mKjO1ay92v0+(o-kZyRjnY4_zQ_u8`=N> literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/setnotset.cpython-314.pyc b/plugins/rmass/actions/__pycache__/setnotset.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f046dfa56947ea7a4ec16b513e3b8401aff1500 GIT binary patch literal 590 zcmYjN&ubGw6rTN&-A!WJk}3*%PZ7i+l;6DF`VC()Vh)UL{a?1NHkAOYZw)F><_;DW zn^cHJ>;b}hO9O{EP$gBU5p4r)*8Y^D&RMf35(W?5jPigU^MJ!dT673J60+&ObK8gR z{^6?+FMGs2YQODB=afx=L%^gJiGT|>uVgexnKZh+qqFBez&P2#IA#Junj|cZTf->C zbj)$Kh3Rk@r2?==6aP4(v4`n@yEp4nj}mDL8Zv2~a^XpX3y?Mw8IP4GW5hr<7A*k- zu5^x<#&qu3RPGXKg$(@2ljfL${|Q}}Kb6n0AB9Y<&A5l-FrSVrx8+&R!UKX~15@ch#Ws+{t?t3PaPhpQt*s@8{;sUd_#4YwOef%Y%!9 z%g#mT+s4z++SToytF_&{F{|JExb?mMAa{yesJcFV^TTOQ-J)Vttiq@`dTtggsJ5D0 NGyC$asl(>MhWJz}Yk*zQddE`|@T!?=g>V-Y6p#m)`f`Hw~e`MX?Th zC9Xaxk)tjmS`z{4XgjEbTIRZKbGDp~UMr$^jeY&P+E;`k!0eb^?eUVlax7wiO-yiz zMQq}9b*wAp602ijy{3apN>CzYC==}g+Vw7rYsa$Mc;9FqHJ%^6{P3bp8Yj&+$ETHd z4DPoDolqXqUdW_P`@mx%-4UAthr)?P$OT(E6B=ep`B_4jT}G>Ya#{}n#_3ax6DA;{ zY09#s){i4h#~e@gFzxr_OaS(28uVhC_;`imA&2R%C-pd$1{WY5CMG;lbYs9kR= 3600" +} + +availabletime = int(os.environ.get("AVAILABLE_DURATION",3)) + +duration = availabletime - 1 + +keys = [ + { + "keytitle": "option", + "keyvalue": 1, + }, + { + "keytitle": "duration", + "keyvalue": duration, + }, +] + +method = "PUT" + +path = "https://rentmasseur.com/api/v1/account/dashboard/availability" + +headers = { + "Authorization": { + "output": "access_token", + "prefix": "Bearer ", + }, +} + +outputs = { + "available_until": "validTo" +} + +prints = { + "Available until": "available_until" +} diff --git a/plugins/rmass/actions/setnotset.py b/plugins/rmass/actions/setnotset.py new file mode 100644 index 0000000..6680f36 --- /dev/null +++ b/plugins/rmass/actions/setnotset.py @@ -0,0 +1,24 @@ +import os + +name = "Unset Availability" + +kind = "action" + +availabletime = int(os.environ.get("AVAILABLE_DURATION",3)) + +duration = availabletime - 5 + + + +keys = [ + { + "keytitle": "online", + "keyvalue": 0, + }, +] + +method = "PUT" + +path = "https://rentmasseur.com/api/v1/account/dashboard/availability" + +#headers = "Authorization:" f"Bearer {access_token}" diff --git a/plugins/rmass/actions/setunavailable.py b/plugins/rmass/actions/setunavailable.py new file mode 100644 index 0000000..60ca251 --- /dev/null +++ b/plugins/rmass/actions/setunavailable.py @@ -0,0 +1,26 @@ +import os + +unavailabletime = int(os.environ.get("AVAILABLE_DURATION",3)) + +duration = unavailabletime - 1 + +name = "Set Unavailable" + +kind = "action" + +keys = [ + { + "keytitle": "online", + "keyvalue": 2, + }, + { + "keytitle": "duration", + "keytitle": duration, + }, +] + +method = "PUT" + +path = "https://rentmasseur.com/api/v1/account/dashboard/availability" + +#headers = "Authorization:" f"Bearer {access_token}" diff --git a/plugins/rmass/manager.py b/plugins/rmass/manager.py new file mode 100644 index 0000000..34b8ba2 --- /dev/null +++ b/plugins/rmass/manager.py @@ -0,0 +1,24 @@ +import os +from datetime import datetime +from . import setavailableoperation + +operations = [ + setavailableoperation, + #setunavailableoperation + #setnotsetoperation +] + +uptime = datetime.strptime( + os.environ["TIME_UPTIME"], + "%H:%M" +).time + +downtime = datetime.strptime( + os.environ["TIME_UPTIME"], + "%H:%M" +).time + +offline = datetime.strptime( + os.environ["TIME_OFFLINE"], + "%H:%M" +).time diff --git a/plugins/rmass/operations/__init__.py b/plugins/rmass/operations/__init__.py new file mode 100644 index 0000000..c6042c6 --- /dev/null +++ b/plugins/rmass/operations/__init__.py @@ -0,0 +1,2 @@ +from . import login, checkavailable, setavailable + diff --git a/plugins/rmass/operations/__pycache__/__init__.cpython-314.pyc b/plugins/rmass/operations/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1646f6611de00a4d6343c18a60c168a41e036762 GIT binary patch literal 241 zcmdPq^)5E0w9@Z&(@m0X~2Q zd7%;$Tc!R0HxQ7xlFvQ%Irm(jc>PTT^|bwR_YD1`z5JHdk#z`Ufv!=4FHwv&jxBA) zM3b0mdVms3+X>OmkPK;PX*Z!qD6l`<;eZ;uY;sW>H|IK4a%4QoN0O`JMmJ+#E90dF zPseP=M9FSTe(zuWP*Dm!Kl~QWMl<1(Y0=bILC@?>$|*#uP*zN-kfp7lB!PXBwqUp5 z02o@ciW@o>b!Obo_=wgZA#)xTO~s>(%|sT-s$w#OLu=km#)8{D+k%TZ`5DeWXpPRWgm=RW2bH) literal 0 HcmV?d00001 diff --git a/plugins/rmass/operations/__pycache__/login.cpython-314.pyc b/plugins/rmass/operations/__pycache__/login.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e3130a966936f7e1ba5613df5fa6d970c1401c2a GIT binary patch literal 306 zcmX|5!Ait15KYo#<7(|e@GK$-MQFTv5zi|u9(rFPY-6o9O-ZtX;Gy_8et_TLFGwyf zc=A@*A8@)<2WH;PyqPz1mhA5$u=n`m;RWz}DE^F$$>tQ24&9<0U!xiJct$)qLOJnK z9(lUJ3z8Afa(aSN_A@M{B=A!CrL%W|)uybPz~)<+npRoqE7RPhlW^G9DdGddgTdV~gg(L;f1&d=Pdd8h2OaGvh{d0D+OuenymA}E)Gu%zRA>MI literal 0 HcmV?d00001 diff --git a/plugins/rmass/operations/__pycache__/setavailable.cpython-314.pyc b/plugins/rmass/operations/__pycache__/setavailable.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02a6f9227059af18576b4fac92e8f96cd65dc2fb GIT binary patch literal 556 zcmYjO!H&}~5OrcFaoV(mF08nL#Hm7ReqgDD#35V|GH`5>X}oP{5=Zu=5_^jHg8l|~ zBtC&JK#F`}B~IKT?GNCHvf4R3&CHv5Gaf&iPDaSu_vpu`+Ck{|5d62`OafRno5rWkNafTSLHj}ddhXBdK&w<0UNz(CjEAY5Tan8$n;Fv`LNCk~9*2*zyu z6wRYQgZ$hxULm)6WrD4MjaHW?(gOH_=LP>*2s7R6#AbgdR^n0#z54)iFDiXCc`M+_ zi`(*0)-chb;*oK#ot^11PBx)FIiMaWRTf&9Qhyq-tqVO=zK zA-zx~*LpEfveF9MZ50{78^9l6xR40OV#tu(zU!#+|S6S4b4ZSF3))Zo?9$7j2cSygt z&|}AOexdbGw7w3`TXG%DTGIQ-JL|}-BXJ*)vD*fHgeGwt4#fSA#>aU_XUCTvy?1=", + "value": 3600, + } +} + +role = "activate" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f229360 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/server.py b/server.py new file mode 100644 index 0000000..4238e9e --- /dev/null +++ b/server.py @@ -0,0 +1,25 @@ +import socket +import json +from dispatch import buildDispatch + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +server.bind(("127.0.0.1", 19001)) + +server.listen() + +while True: + connection, address = server.accept() + while True: + data = connection.recv(4096) + + request = json.loads(data) + +# if not data: +# break + + dispatch = buildDispatch(request) + + connection.close() + +# server.close() diff --git a/setavailable.py b/setavailable.py new file mode 100644 index 0000000..ac0e310 --- /dev/null +++ b/setavailable.py @@ -0,0 +1,8 @@ +import time +from plugins import rmass +from core.execution.operation import buildOperation + +while True: + outputs = buildOperation(rmass.operations.setavailable) + + time.sleep(rmass.operations.setavailable.sleeptime)