From e826985605c1ab6d518d2f35c50fe6cdfc03859e Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Fri, 19 Jun 2026 17:10:06 +0300 Subject: [PATCH 1/2] Update zipfile name format in download_folder_as_zip method to include resource identifier --- waterbutler/server/api/v1/provider/metadata.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waterbutler/server/api/v1/provider/metadata.py b/waterbutler/server/api/v1/provider/metadata.py index add78e150..cffa56f3c 100644 --- a/waterbutler/server/api/v1/provider/metadata.py +++ b/waterbutler/server/api/v1/provider/metadata.py @@ -127,7 +127,7 @@ async def get_file_revisions(self): return self.write({'data': [r.json_api_serialized() for r in result]}) async def download_folder_as_zip(self): - zipfile_name = self.path.name or f'{self.provider.NAME}-archive' + zipfile_name = self.path.name or f'{self.provider.NAME}-{self.path_kwargs.get('resource')}-archive' self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', make_disposition(zipfile_name + '.zip')) From db83a314eb091fd08d612988d0e6618dc2707ebb Mon Sep 17 00:00:00 2001 From: Ostap Zherebetskyi Date: Fri, 19 Jun 2026 17:41:37 +0300 Subject: [PATCH 2/2] Update zipfile naming convention in download_folder_as_zip method to include resource identifier --- tests/server/api/v1/test_metadata_mixin.py | 4 ++-- waterbutler/server/api/v1/provider/metadata.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/server/api/v1/test_metadata_mixin.py b/tests/server/api/v1/test_metadata_mixin.py index 48308e806..8e7ed2271 100644 --- a/tests/server/api/v1/test_metadata_mixin.py +++ b/tests/server/api/v1/test_metadata_mixin.py @@ -233,7 +233,7 @@ async def test_download_folder_as_zip(self, http_request, mock_stream): await handler.download_folder_as_zip() assert handler._headers['Content-Type'] == 'application/zip' - expected = 'attachment; filename="test_file.zip"; filename*=UTF-8\'\'test_file.zip' + expected = 'attachment; filename="guid1-test_file.zip"; filename*=UTF-8\'\'guid1-test_file.zip' assert handler._headers['Content-Disposition'] == expected handler.write_stream.assert_called_once_with(mock_stream) @@ -249,7 +249,7 @@ async def test_download_folder_as_zip_root(self, http_request, mock_stream): await handler.download_folder_as_zip() assert handler._headers['Content-Type'] == 'application/zip' - expected = 'attachment; filename="MockProvider-archive.zip"; filename*=UTF-8\'\'MockProvider-archive.zip' + expected = 'attachment; filename="guid1-MockProvider-archive.zip"; filename*=UTF-8\'\'guid1-MockProvider-archive.zip' assert handler._headers['Content-Disposition'] == expected handler.write_stream.assert_called_once_with(mock_stream) diff --git a/waterbutler/server/api/v1/provider/metadata.py b/waterbutler/server/api/v1/provider/metadata.py index cffa56f3c..befe3352d 100644 --- a/waterbutler/server/api/v1/provider/metadata.py +++ b/waterbutler/server/api/v1/provider/metadata.py @@ -127,7 +127,7 @@ async def get_file_revisions(self): return self.write({'data': [r.json_api_serialized() for r in result]}) async def download_folder_as_zip(self): - zipfile_name = self.path.name or f'{self.provider.NAME}-{self.path_kwargs.get('resource')}-archive' + zipfile_name = f'{self.path_kwargs.get("resource")}-{self.path.name}' if self.path.name else f'{self.path_kwargs.get("resource")}-{self.provider.NAME}-archive' self.set_header('Content-Type', 'application/zip') self.set_header('Content-Disposition', make_disposition(zipfile_name + '.zip'))