From 939a7fd1914c26fb417377d5dc34f782f9bc111b Mon Sep 17 00:00:00 2001 From: kodi Date: Thu, 12 Mar 2026 17:28:23 +0100 Subject: [PATCH] feat: monaco editor toegevoegd voor py bestanden --- .../file_ops_service.cpython-313.pyc | Bin 21962 -> 21987 bytes .../backend/app/services/file_ops_service.py | 1 + webui/backend/data/tasks.db | Bin 81920 -> 81920 bytes .../test_api_edit_golden.cpython-313.pyc | Bin 11550 -> 12391 bytes .../test_ui_smoke_golden.cpython-313.pyc | Bin 15019 -> 15076 bytes .../tests/golden/test_api_edit_golden.py | 13 +++++++++++++ .../tests/golden/test_ui_smoke_golden.py | 1 + webui/html/app.js | 2 +- 8 files changed, 16 insertions(+), 1 deletion(-) diff --git a/webui/backend/app/services/__pycache__/file_ops_service.cpython-313.pyc b/webui/backend/app/services/__pycache__/file_ops_service.cpython-313.pyc index 7e6c6a8acfbfe9b072de47651441403aa8a410a0..f6d0058c329d71183fb7b63fc35580dbc57768d1 100644 GIT binary patch delta 384 zcmXwzyGufG9L0axF8`I z25q&}w|}6ahG=MLaA<32EriDCrgYA7K4&=R{ustkjZtgJbsRbR-)}=F(gHd-9e$oNF&~eNPyi#$h092`adJp)b zlNlW_lYcI6LNlE&xBwg7EtW*%=~Dbvz=htMn6%4kwb@-&yk9QaExa)Mr>bWXiC>p1 BX(a#v delta 340 zcmaF7n(@?XM)l9Uyj%=G5O-`-=G!0!hQ}Zd41i@A7#KgFnyB9CrpH+%8q5iVf_h9v zV!=W{C>$&jEUL#+BpxglEFLTY6qg8=43;urERvL9P+|y{mSPB&F=c|7S0t4#t0}kf z2QQ--M@ec$iGFf%aTO<+l~IzLqscj0i%ENP6jLA*qxR-CES!vtI-9q#YO*mJZhpXR z$H5r6Sze@`opJi+`O=N-j7K*sD(kQ?GH&)$zr@NYv{_O29~-0pW(AWFR>r!`rIvG9 z80SwewXE3OZD+>FcwqA(`?-vaM>Z!o>N7H)-aNrcn33`P<|WSTjEt8zuW{*QWW2uF z%q@?R@x$h&?voiASvFgGRxvYjZ{Fe~%E-vM`IPT07NE0IgRU?!&YNr%>cr0@c7s>q SqcE2k(**{h4-%96LPG)2>0X-v diff --git a/webui/backend/app/services/file_ops_service.py b/webui/backend/app/services/file_ops_service.py index 10bceef..b211e2a 100644 --- a/webui/backend/app/services/file_ops_service.py +++ b/webui/backend/app/services/file_ops_service.py @@ -18,6 +18,7 @@ TEXT_CONTENT_TYPES = { ".yaml": "text/yaml", ".json": "application/json", ".js": "text/javascript", + ".py": "text/x-python", ".css": "text/css", ".html": "text/html", } diff --git a/webui/backend/data/tasks.db b/webui/backend/data/tasks.db index 497436b5f6e714a5593c0b1b27eae0b5ba6a2618..5a841db9554b36a678af68772411355f9e7a6337 100644 GIT binary patch delta 1092 zcmZo@U~On%ogmF6w`r8yT5I`EPbKJ6y@7#`&6oYX?6!=j+Kl8zh*x zL^i8zILsLYvfCiZJk=!4(oEMd(cDPa#5mbRH_^<@RM*rbInBtzAT7k*xJFXT^P4+8nc^exe*zB5;{e?qCrj}$D$Ghbu7H20G6zFH>6_l35rF2=r5{#}sDhlK>+9u>73T+|*)yix4MDEWs0#ASok^ST?mZG%$$5rp?^I z)WX~#YWo#+MgtBmW?oGOemOofUd_#l0@A$oOzT_Kc4JwI@Cg delta 158 zcmV;P0Ac@tfCYen1&|v7H<27e0XMN=q#pxL1A~(XAV;%MAPNJKkSmitx+t@&BUuat zP6j~$vkEX529b~=vq3h)c?cv5Jpc;04-1nHuo$x_u)_(FkXExjy2k|sBn*83vkbsL z43UsFlS|AHlfTRevz5$mQxFCR)Bp~u4O$EC3WNzM2h_2Fzz4U~Cjl@B1_2Kq01qCs MArKS~mmWU>;->mCZ2$lO diff --git a/webui/backend/tests/golden/__pycache__/test_api_edit_golden.cpython-313.pyc b/webui/backend/tests/golden/__pycache__/test_api_edit_golden.cpython-313.pyc index 8f449a7dc3e6019498a0bc5040ff8afb22817971..614cd71ef6d0415663c515500239cbc9664858de 100644 GIT binary patch delta 1152 zcmY+EU1%It6oBW>&Tc0ApG~sepR7p}+|6w5E^Vj?ty+RwZH&PVDu`wrcW*Zn*4gFG zZIWFnfvU8H_Ql(1iYP@CS`phiEfkdKgReq@O6#JJl1CfNgD;}zOlh{x!^d~;JwJ2q z4*SWgn{Pz_ibR4EJcl;Fw$_HON0*f4&tSPCy(TfDOH9@Y^XUm)&PekLQ^0(l`SpHX z@hqSZ=!1FyeV(u$i0JY5RWQ}FUa(%zf?z?cA1}<&dc9H5f-D1ZY!-0@VF20*hc}p6qx;G`iOj^) zHxbVws)z)l1n7h-4Li@N%?;ja(sqQ?C0<_I+idZ%l$LW;C+VC!MDG?m_|G_g@>4q2?8w#!G%C`#Z z>d=NdDSl6|hwP2?-pk8Bt54oh!?)GchMHO(ShX$=uNM#fqCPJE9Lu_*|64is7PjxP zY>QiFo!MeG`CLH9vRhDg%KbZeOeVINO3#p*`%(HT37v*Rb_Q`)yp)|F=fv6U>!jgs zW}ha3CERa`{ke(3w^2_5tP7-@(asei^Z}wFi*9#cRQ&qz zW00E2n}H7@$XW9)_=o&?LRQ4F@gw^lXanb+=y9t~4c=%Nb(7U7FHC`@6FuxNlJ#Lpz41PJ2XT9 delta 757 zcmZ9JOK1~e5P)|!$>!BOYfBnpn}>=1+SEW01ij>-VpTGMpH#>k&oJ%~~Z z6|_+GR}|4w1w}z9WiJ&(@m>T`Pzs(rcoG%s#Y>%8p^fh0`f&0?BO4XRet6t!L5q$=c9;C8IA zn|TMC!!#$F(=->F%QQEd+q5>cHq$(4o^Xs7c~QM)(ud|V&9C}-pkiYkM#k3V0cPZb zc@QrXPUCCm3)!dR*(-MKl-ATrIc%r$<9*TIySPbH1P@SqGe@hEZ_3dXO< z0=Or!fL|g^iG}VgOpDLm!!TmxdiH_BDc=w?(QL;V(z6KdCTw)Pk8a0~wP-(7MJ^FC zMq}I7yROG0J+stxjj+)#TKbpco0S{%dRlyoAA!?GE-@l!{;tLJZ8JiTLtAY*CChf>44swWit&bh0+Ro~- zVsCnv|0$&-grf)+6q9Mj>J(ofTqevA1mQMej_{E1SbR*UU_h*;V#NLM3s$_=W3!*<0`2$L3y|M&xsk6}nkkBBG9Qb|=H=4SoRj~_h)v$h%Qu-x)oOEs z>Kw+&1*#&G1=M*b|5Oua^q(xKuFDw^92gvA$&|-BSyo+K rrJ4F>Ei*P|#<0zXmR^h^RZNVQGdQkGXkL`i{K5d@eW;q;ZzTf&4GA~u delta 173 zcmaD-y1JC_GcPX}0}xz$v?=qu#zwwkX(ltC$$Ts-o0m&Rb52%MwPJLfoT#e2IYD&} z<75SOk;ww;yptW(6*>Kb1A+rBnetdcJXZhUpy0sC6V+uIgC{@WQxFPe3l1@50-4Of zpumvMpc%UPq56H+&Bt}Ourg|Ht}))pG@0E@aPluR{>{l|Y|M None: + file_path = self.root / "script.py" + file_path.write_text("print('hello')\n", encoding="utf-8") + + response = self._request("GET", "/api/files/view", params={"path": "storage1/script.py", "for_edit": "true"}) + + self.assertEqual(response.status_code, 200) + body = response.json() + self.assertEqual(body["path"], "storage1/script.py") + self.assertEqual(body["name"], "script.py") + self.assertEqual(body["content_type"], "text/x-python") + self.assertEqual(body["content"], "print('hello')\n") + def test_save_success(self) -> None: file_path = self.root / "notes.txt" file_path.write_text("hello", encoding="utf-8") diff --git a/webui/backend/tests/golden/test_ui_smoke_golden.py b/webui/backend/tests/golden/test_ui_smoke_golden.py index f1f4144..a4777d3 100644 --- a/webui/backend/tests/golden/test_ui_smoke_golden.py +++ b/webui/backend/tests/golden/test_ui_smoke_golden.py @@ -156,6 +156,7 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('function openRenamePopup()', app_js) self.assertIn('document.getElementById("rename-btn").onclick = openRenamePopup;', app_js) self.assertIn('return triggerActionButton("rename-btn");', app_js) + self.assertIn('".py"', app_js) self.assertIn('function openVideoViewer()', app_js) self.assertIn('function openPdfViewer()', app_js) self.assertIn('async function loadMonacoModule()', app_js) diff --git a/webui/html/app.js b/webui/html/app.js index 4674aa3..4156e31 100644 --- a/webui/html/app.js +++ b/webui/html/app.js @@ -562,7 +562,7 @@ function isEditableSelection(item) { if (lower === "dockerfile" || lower === "containerfile") { return true; } - return [".txt", ".log", ".md", ".yml", ".yaml", ".json", ".js", ".css", ".html"].some((suffix) => lower.endsWith(suffix)); + return [".txt", ".log", ".md", ".yml", ".yaml", ".json", ".js", ".py", ".css", ".html"].some((suffix) => lower.endsWith(suffix)); } function monacoLanguageForName(name) {