From e977428480793ac34215fb63686e1bdf9dc019a0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 07:38:43 +0000 Subject: [PATCH 1/4] Initial plan From 2e0c2f82d33dc1ac83ee87c5d27e752081753bd4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 07:43:18 +0000 Subject: [PATCH 2/4] Add remove_s3_file function to wmill Python client Co-authored-by: Roderik-WU <179805420+Roderik-WU@users.noreply.github.com> --- .../wmill_client_test.cpython-312.pyc | Bin 0 -> 7910 bytes python-client/tests/wmill_client_test.py | 29 +++++++++ .../wmill/__pycache__/client.cpython-312.pyc | Bin 0 -> 90344 bytes python-client/wmill/wmill/client.py | 58 ++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc create mode 100644 python-client/wmill/wmill/__pycache__/client.cpython-312.pyc diff --git a/python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc b/python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d106c930dafb4fe61d409c2fc18fe10e7871557c GIT binary patch literal 7910 zcmb_h-A^0Y6`v1}8H^19L%;-BlPnNJ7D$|=`63M=Bw+(iHjs~{yP6u$5DdoS&WxAf z5|x!wZL037dD}=$tE^OMH%h8TRsVoZU;AP&j%>}Q(n{TzN_}veRFQb=bn5050}e9!ROWIe+>V&k)r;EFXo5K7hbMH;ZsVaL^?uE8&7(g zhIb}HFEY~%ZPc;TEJK~6MD{i%+9Yb8H#;gmAF)Pxnv?7zx3HI@lm>0cO7CSaD5RpT{$egTd$BqmR4kjAo13_^y932ql(1N50 zPz=kVJUj?U5OVnc@~0J83s~BVb!KS`OD1nwhGtt> zvS_(X`D_8*3F~p~;^hmImxf11b>3VZz5ev@Rtt7#W?k!oGNKoVu|KWp6VwJF6cl#3SyPYcKJRRJ`+A>e&_g&~ z!da??Z(Dr}tgA%jDuonD z6N)xNJx2zYC!*rmL}>Z?(rA4C=GDMh;GLP-LG5&8EO9wFerb8)z~cVsLFhzp4$09d ze0!L_05H`6S1No*#mDO$LAl;4#zPC@j8H~VuN4$YmE%fC5^zEEx}d5`iZ-SOWGx^^ zCB4R|82v>&7*TeDKlIj^90@9F+3vU)#5c{yDmzeWZPfJzudRCqP^m4&6CazmYhy=q5r zNfk;us>hll=OIq$O<1)l8t4wJHoDepiB%*bF9{gh^lH^V3*EpddZS6ph#VIMIfem2 z_1TqXK%3Hr0v)03LU90vAB4|Fn5uL@S#KzGCYW^9+spM@XjX9(0s@yX*tFOjmMSv1 zvPlmNpkhK(iNW8r`Lk|ccIT;Vb6d83cebPNi|J(hkr%G24o8x2%{5S+N3xwi$#z}L zw!WF|*!`l$?t_M|T&;!U5BgG`{^a24G(S>8aj5P~zV*{If2vTObv7oO`clq)$^Hwk zSf<*Mvs*gKcn+sLhm%LHJmar!CO&3Wg!ow~{Ln4FKzyJ*P#ib&vb5S3NvjYWBE1cg zmdWp|c0f`-pzMa;lx`4bl|5K|6NHab(3wgXie41`C zn7g_Vl>~i&yLP~xrv!J&JqOeLp#rwRYSmfDO5ssW$pp7G~5qYAxF zQ1u@uY=tV#JVt}JA2Vh;Xg&{7w`dLfBOgFmA^buMv%*wJ0&7f*;?q2=nmv<4IULN3 z2!jKA$@?<3huTl6^b#E4-=%2y`?%pI`!2OaZ>(RYjCwdRtUHXr*dJ0qcu4Dv>erd2 znS9jK-4Qtm8HZn(4M#9K2SrIyaH({g9K!>`k`mS=-G(h@&f+AxkSb|#GSF+}xE70R zq=QmGH5sXgycD$#lIW>`BXNUb0A`_vK>&PQ4H;K=%GLd+n@>)pdrqynhI15K?f>$< z^yIayv*q5KFIi@ac96<%TrF8=bH>@8a<<=#WI6^?9Rq6}`_s+?udBf3H5wA}0!!

kf<}=*PssHr-+xT*3a|00Hi4 zZp$?LQq8`{d!Izoy(4SQXYM#Lw~IXEcWq{4A;#YaYwMC>yf)EKc!mp0KIM*bRu(>H zO%}nz<&R{L;%(rMRyd&js=#ZwtlG?~rUHA&vg?d8V=O(V48wek^>-0!nA|Bk;9)-K zq62iEa0N1=Qfjz~FXAz)3lm)xJW#4O4c)4vAdnXIclSN8t+~2#6kR<pavfL^jZqH+b_gXj#S38kNXCD2^I5b(-JP&#j zGpwL**|5+`a7mb1hRQ_mmaARR{W*-K;(nUn$huSR?&px?wD{7_-sHZM5PTXPclcM3 z=G2xy&lDj4cj)E&t)vNXLX6_g2ll+-WAOxA+`xWhVkDfQINZlAN(yc)#9fJcv&y(G zg8F>MqMU*$8r~v)!#Jf(fGA}}8*x@)A1K9rqQ8Q}D(K(9?k|BT-9ApHdrq&pMlj&l zez{WM%kv#A$+m&?j=?AUz?&_#$QjUh#phl6x*FbykwKXUox@G+(B&bOuX+Gvnc+R4lA}z`vK&2Wd_dc`nNMzXrM=6!{ zT0^%GSl>ZMS~+b5&r+?5!Lw8iv(Y>#fUS+5jJv>POc0U>FIl;Kx9$OdFOjV6P4j(( z+{Q)7{p(5J>2&)@nm+@ZT(Z{pjPKpN%M}uXZ+`$1;KWjf;E!$Q&oU5H3wxT#eFs9y zTpW}~NW~HJyDA{3IAY<)7lNFsKw?)BIZI(}u5fc!M9;qOLJy!xn**#E*KJs?8xeA>m_EiK{xo+~O{36!KQJ(~&YtWmr31!{ntCYe=DEU%kE{P)*!qS$O zcD)kC%YqzPa z%d>hmTi?3+cGkIPbu`=5w;K4bjpYvI9F*O?di|sKKYai0u{Eya1=GN_yksf+8#yfH z_HJz6$z7xK?O4nWZd9n@#!Lk)=2|x@*f@W_11RO38=D!fE#C~K9KW%dEldwen`dt; zG(%}~=Ukx~N^mCL@ZGDqzWmrw%I)0PT+2aP0!#CPfs(P}xY+3Y#b7up2tHmBaP`UM z7be<@le8n8M}ly}O?>kn*4fZP38D_()DqXN^Ct}GoKz&J!-PaV1tQ1NH2pPI_ci7G zC)N5jRsG67!q6x0@tGE1s>Sz;!nfSGjj}oKB)(!jSzG<;`Hv<(ocQ&{981|+$q4@k DgM#OA literal 0 HcmV?d00001 diff --git a/python-client/tests/wmill_client_test.py b/python-client/tests/wmill_client_test.py index 1acbcb0bf783e..ebaa8dd619467 100644 --- a/python-client/tests/wmill_client_test.py +++ b/python-client/tests/wmill_client_test.py @@ -108,6 +108,35 @@ def test_download_upload_s3_file(self): ) print(file_key) + @unittest.skip("skipping") + def test_remove_s3_file(self): + # First upload a file + file_key = wmill.write_s3_file( + S3Object(s3="test_file_to_delete.txt"), b"This file will be deleted" + ) + print(f"Uploaded file: {file_key}") + + # Now remove it + wmill.remove_s3_file(S3Object(s3="test_file_to_delete.txt")) + print("File removed successfully") + + @unittest.skip("skipping") + def test_remove_s3_file_with_resource_path(self): + # Test with explicit resource path + file_key = wmill.write_s3_file( + S3Object(s3="test_file_with_resource.txt"), + b"This file will be deleted with resource path", + s3_resource_path=self._resource_path + ) + print(f"Uploaded file: {file_key}") + + # Now remove it with resource path + wmill.remove_s3_file( + S3Object(s3="test_file_with_resource.txt"), + s3_resource_path=self._resource_path + ) + print("File removed successfully with resource path") + if __name__ == "__main__": unittest.main() diff --git a/python-client/wmill/wmill/__pycache__/client.cpython-312.pyc b/python-client/wmill/wmill/__pycache__/client.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b90eebeca5de2ef50ea990e96616437650c7dff6 GIT binary patch literal 90344 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 YtwpPP+k;@{KCMivxYV4ZDLvc&2cE(Ep8x;= literal 0 HcmV?d00001 diff --git a/python-client/wmill/wmill/client.py b/python-client/wmill/wmill/client.py index 8c050f554cc70..a089bbde76fb6 100644 --- a/python-client/wmill/wmill/client.py +++ b/python-client/wmill/wmill/client.py @@ -984,6 +984,43 @@ def write_s3_file( raise Exception("Could not write file to S3") from e return S3Object(s3=response["file_key"], storage=s3object.get("storage") if s3object else None) + def remove_s3_file( + self, + s3object: S3Object | str, + s3_resource_path: str | None = None, + ) -> None: + """ + Remove a file from the workspace S3 bucket + + '''python + from wmill import S3Object + + s3_obj = S3Object(s3="/path/to/my_file.txt") + client.remove_s3_file(s3_obj) + ''' + """ + s3object = parse_s3_object(s3object) + + query_params = {} + if s3object is not None and s3object["s3"] != "": + query_params["file_key"] = s3object["s3"] + if s3_resource_path is not None and s3_resource_path != "": + query_params["s3_resource_path"] = s3_resource_path + if ( + s3object is not None + and "storage" in s3object + and s3object["storage"] is not None + ): + query_params["storage"] = s3object["storage"] + + try: + self.delete( + f"/w/{self.workspace}/job_helpers/delete_s3_file", + params=query_params, + ) + except Exception as e: + raise Exception("Could not delete file from S3") from e + def sign_s3_objects(self, s3_objects: list[S3Object | str]) -> list[S3Object]: """Sign S3 objects for use by anonymous users in public apps. @@ -1679,6 +1716,27 @@ def write_s3_file( ) +@init_global_client +def remove_s3_file( + s3object: S3Object | str, + s3_resource_path: str | None = None, +) -> None: + """ + Remove a file from the workspace S3 bucket + + '''python + from wmill import S3Object + + s3_obj = S3Object(s3="/path/to/my_file.txt") + wmill.remove_s3_file(s3_obj) + ''' + """ + return _client.remove_s3_file( + s3object, + s3_resource_path if s3_resource_path != "" else None, + ) + + @init_global_client def sign_s3_objects(s3_objects: list[S3Object | str]) -> list[S3Object]: """ From ec0bedd79e16c30273fd0fceecc1602f0862f776 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 07:43:41 +0000 Subject: [PATCH 3/4] Remove __pycache__ files and update .gitignore Co-authored-by: Roderik-WU <179805420+Roderik-WU@users.noreply.github.com> --- python-client/.gitignore | 4 ++++ .../wmill_client_test.cpython-312.pyc | Bin 7910 -> 0 bytes .../wmill/__pycache__/client.cpython-312.pyc | Bin 90344 -> 0 bytes 3 files changed, 4 insertions(+) delete mode 100644 python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc delete mode 100644 python-client/wmill/wmill/__pycache__/client.cpython-312.pyc diff --git a/python-client/.gitignore b/python-client/.gitignore index 3b7cf229361de..b08f40add2721 100644 --- a/python-client/.gitignore +++ b/python-client/.gitignore @@ -1,2 +1,6 @@ windmill-api/ .venv/ +__pycache__/ +*.pyc +*.pyo +*.pyd diff --git a/python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc b/python-client/tests/__pycache__/wmill_client_test.cpython-312.pyc deleted file mode 100644 index d106c930dafb4fe61d409c2fc18fe10e7871557c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7910 zcmb_h-A^0Y6`v1}8H^19L%;-BlPnNJ7D$|=`63M=Bw+(iHjs~{yP6u$5DdoS&WxAf z5|x!wZL037dD}=$tE^OMH%h8TRsVoZU;AP&j%>}Q(n{TzN_}veRFQb=bn5050}e9!ROWIe+>V&k)r;EFXo5K7hbMH;ZsVaL^?uE8&7(g zhIb}HFEY~%ZPc;TEJK~6MD{i%+9Yb8H#;gmAF)Pxnv?7zx3HI@lm>0cO7CSaD5RpT{$egTd$BqmR4kjAo13_^y932ql(1N50 zPz=kVJUj?U5OVnc@~0J83s~BVb!KS`OD1nwhGtt> zvS_(X`D_8*3F~p~;^hmImxf11b>3VZz5ev@Rtt7#W?k!oGNKoVu|KWp6VwJF6cl#3SyPYcKJRRJ`+A>e&_g&~ z!da??Z(Dr}tgA%jDuonD z6N)xNJx2zYC!*rmL}>Z?(rA4C=GDMh;GLP-LG5&8EO9wFerb8)z~cVsLFhzp4$09d ze0!L_05H`6S1No*#mDO$LAl;4#zPC@j8H~VuN4$YmE%fC5^zEEx}d5`iZ-SOWGx^^ zCB4R|82v>&7*TeDKlIj^90@9F+3vU)#5c{yDmzeWZPfJzudRCqP^m4&6CazmYhy=q5r zNfk;us>hll=OIq$O<1)l8t4wJHoDepiB%*bF9{gh^lH^V3*EpddZS6ph#VIMIfem2 z_1TqXK%3Hr0v)03LU90vAB4|Fn5uL@S#KzGCYW^9+spM@XjX9(0s@yX*tFOjmMSv1 zvPlmNpkhK(iNW8r`Lk|ccIT;Vb6d83cebPNi|J(hkr%G24o8x2%{5S+N3xwi$#z}L zw!WF|*!`l$?t_M|T&;!U5BgG`{^a24G(S>8aj5P~zV*{If2vTObv7oO`clq)$^Hwk zSf<*Mvs*gKcn+sLhm%LHJmar!CO&3Wg!ow~{Ln4FKzyJ*P#ib&vb5S3NvjYWBE1cg zmdWp|c0f`-pzMa;lx`4bl|5K|6NHab(3wgXie41`C zn7g_Vl>~i&yLP~xrv!J&JqOeLp#rwRYSmfDO5ssW$pp7G~5qYAxF zQ1u@uY=tV#JVt}JA2Vh;Xg&{7w`dLfBOgFmA^buMv%*wJ0&7f*;?q2=nmv<4IULN3 z2!jKA$@?<3huTl6^b#E4-=%2y`?%pI`!2OaZ>(RYjCwdRtUHXr*dJ0qcu4Dv>erd2 znS9jK-4Qtm8HZn(4M#9K2SrIyaH({g9K!>`k`mS=-G(h@&f+AxkSb|#GSF+}xE70R zq=QmGH5sXgycD$#lIW>`BXNUb0A`_vK>&PQ4H;K=%GLd+n@>)pdrqynhI15K?f>$< z^yIayv*q5KFIi@ac96<%TrF8=bH>@8a<<=#WI6^?9Rq6}`_s+?udBf3H5wA}0!!

kf<}=*PssHr-+xT*3a|00Hi4 zZp$?LQq8`{d!Izoy(4SQXYM#Lw~IXEcWq{4A;#YaYwMC>yf)EKc!mp0KIM*bRu(>H zO%}nz<&R{L;%(rMRyd&js=#ZwtlG?~rUHA&vg?d8V=O(V48wek^>-0!nA|Bk;9)-K zq62iEa0N1=Qfjz~FXAz)3lm)xJW#4O4c)4vAdnXIclSN8t+~2#6kR<pavfL^jZqH+b_gXj#S38kNXCD2^I5b(-JP&#j zGpwL**|5+`a7mb1hRQ_mmaARR{W*-K;(nUn$huSR?&px?wD{7_-sHZM5PTXPclcM3 z=G2xy&lDj4cj)E&t)vNXLX6_g2ll+-WAOxA+`xWhVkDfQINZlAN(yc)#9fJcv&y(G zg8F>MqMU*$8r~v)!#Jf(fGA}}8*x@)A1K9rqQ8Q}D(K(9?k|BT-9ApHdrq&pMlj&l zez{WM%kv#A$+m&?j=?AUz?&_#$QjUh#phl6x*FbykwKXUox@G+(B&bOuX+Gvnc+R4lA}z`vK&2Wd_dc`nNMzXrM=6!{ zT0^%GSl>ZMS~+b5&r+?5!Lw8iv(Y>#fUS+5jJv>POc0U>FIl;Kx9$OdFOjV6P4j(( z+{Q)7{p(5J>2&)@nm+@ZT(Z{pjPKpN%M}uXZ+`$1;KWjf;E!$Q&oU5H3wxT#eFs9y zTpW}~NW~HJyDA{3IAY<)7lNFsKw?)BIZI(}u5fc!M9;qOLJy!xn**#E*KJs?8xeA>m_EiK{xo+~O{36!KQJ(~&YtWmr31!{ntCYe=DEU%kE{P)*!qS$O zcD)kC%YqzPa z%d>hmTi?3+cGkIPbu`=5w;K4bjpYvI9F*O?di|sKKYai0u{Eya1=GN_yksf+8#yfH z_HJz6$z7xK?O4nWZd9n@#!Lk)=2|x@*f@W_11RO38=D!fE#C~K9KW%dEldwen`dt; zG(%}~=Ukx~N^mCL@ZGDqzWmrw%I)0PT+2aP0!#CPfs(P}xY+3Y#b7up2tHmBaP`UM z7be<@le8n8M}ly}O?>kn*4fZP38D_()DqXN^Ct}GoKz&J!-PaV1tQ1NH2pPI_ci7G zC)N5jRsG67!q6x0@tGE1s>Sz;!nfSGjj}oKB)(!jSzG<;`Hv<(ocQ&{981|+$q4@k DgM#OA diff --git a/python-client/wmill/wmill/__pycache__/client.cpython-312.pyc b/python-client/wmill/wmill/__pycache__/client.cpython-312.pyc deleted file mode 100644 index b90eebeca5de2ef50ea990e96616437650c7dff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90344 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 YtwpPP+k;@{KCMivxYV4ZDLvc&2cE(Ep8x;= From 522afec7fbb491ae34eff113e9625ccecc243bc9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 25 Feb 2026 08:34:51 +0000 Subject: [PATCH 4/4] Improve tests with read verification for file removal Co-authored-by: Roderik-WU <179805420+Roderik-WU@users.noreply.github.com> --- python-client/tests/wmill_client_test.py | 49 +++++++++++++++++------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/python-client/tests/wmill_client_test.py b/python-client/tests/wmill_client_test.py index ebaa8dd619467..47f6a73dca63c 100644 --- a/python-client/tests/wmill_client_test.py +++ b/python-client/tests/wmill_client_test.py @@ -110,32 +110,53 @@ def test_download_upload_s3_file(self): @unittest.skip("skipping") def test_remove_s3_file(self): - # First upload a file - file_key = wmill.write_s3_file( - S3Object(s3="test_file_to_delete.txt"), b"This file will be deleted" - ) + test_content = b"This file will be deleted" + s3_obj = S3Object(s3="test_file_to_delete.txt") + + # 1. Upload a file + file_key = wmill.write_s3_file(s3_obj, test_content) print(f"Uploaded file: {file_key}") - # Now remove it - wmill.remove_s3_file(S3Object(s3="test_file_to_delete.txt")) + # 2. Verify the file exists by reading it back + content = wmill.load_s3_file(s3_obj) + self.assertEqual(content, test_content) + print(f"File verified: content matches ({len(content)} bytes)") + + # 3. Remove the file + wmill.remove_s3_file(s3_obj) print("File removed successfully") + + # 4. Verify the file no longer exists (should raise an exception) + with self.assertRaises(Exception): + wmill.load_s3_file(s3_obj) + print("Verified file was removed (read failed as expected)") @unittest.skip("skipping") def test_remove_s3_file_with_resource_path(self): - # Test with explicit resource path + test_content = b"This file will be deleted with resource path" + s3_obj = S3Object(s3="test_file_with_resource.txt") + + # 1. Upload with explicit resource path file_key = wmill.write_s3_file( - S3Object(s3="test_file_with_resource.txt"), - b"This file will be deleted with resource path", + s3_obj, + test_content, s3_resource_path=self._resource_path ) print(f"Uploaded file: {file_key}") - # Now remove it with resource path - wmill.remove_s3_file( - S3Object(s3="test_file_with_resource.txt"), - s3_resource_path=self._resource_path - ) + # 2. Verify the file exists by reading it back + content = wmill.load_s3_file(s3_obj, s3_resource_path=self._resource_path) + self.assertEqual(content, test_content) + print(f"File verified: content matches ({len(content)} bytes)") + + # 3. Remove with resource path + wmill.remove_s3_file(s3_obj, s3_resource_path=self._resource_path) print("File removed successfully with resource path") + + # 4. Verify the file no longer exists (should raise an exception) + with self.assertRaises(Exception): + wmill.load_s3_file(s3_obj, s3_resource_path=self._resource_path) + print("Verified file was removed (read failed as expected)") if __name__ == "__main__":