From dc34ac5646bc0bf63012daaa58d1bd1c273e7b05 Mon Sep 17 00:00:00 2001 From: jryurkanin <104916543+jryurkanin@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:26:49 -0700 Subject: [PATCH 1/2] add export_folders container.py --- labkey/container.py | 58 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/labkey/container.py b/labkey/container.py index 73ba5d0..fb0204a 100644 --- a/labkey/container.py +++ b/labkey/container.py @@ -1,5 +1,6 @@ from .server_context import ServerContext - +import os +from datetime import datetime def create( server_context: ServerContext, @@ -103,6 +104,42 @@ def get_containers( return server_context.make_request(url, json=payload) +def export_archive( + server_context: ServerContext, + container_path: str = None, + download_directory: str = None, + includeSubfolders: str = "on", + includePhi: str = "on", + exportPhiLevel: str = "Restricted", + location: str = "2" +): + + """ + Export the select container's folder archive. A lot of API args are ignored. That could be addressed in future development. + + :param server_context: A LabKey server context. See utils.create_server_context. + :param container_path: the path of where you want to create the container. + :return: + """ + + headers = {"includeSubfolders": "on", + "includePhi": "on", + "exportPhiLevel": "Restricted", + "location": "2"} + timestamp = datetime.now().strftime("%Y-%m-%d %H_%M_%S") + filename = f"exported_archive_{timestamp}.zip" + + if download_directory != None: + os.chdir(download_directory) + + url = server_context.build_url("admin", "exportFolder.view", container_path) + content = server_context.make_request(url, headers=headers)['content'] + + with open(filename, "wb") as exported_file: + exported_file.write(content) + + return content + class ContainerWrapper: """ @@ -153,3 +190,22 @@ def get_containers( depth, include_standard_properties, ) + + def export_archive( + self, + container_path: str = None, + download_directory: str = None, + includeSubfolders: str = "on", + includePhi: str = "on", + exportPhiLevel: str = "Restricted", + location: str = "2" + ): + return export_archive( + self.server_context, + container_path, + download_directory, + includeSubfolders, + includePhi, + exportPhiLevel, + location + ) From ae00899aeab4e00b4ad1f706fb4dc57811e68f63 Mon Sep 17 00:00:00 2001 From: jryurkanin <104916543+jryurkanin@users.noreply.github.com> Date: Wed, 11 Oct 2023 14:39:11 -0700 Subject: [PATCH 2/2] Update container.py --- labkey/container.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/labkey/container.py b/labkey/container.py index fb0204a..9b6c2f2 100644 --- a/labkey/container.py +++ b/labkey/container.py @@ -122,7 +122,7 @@ def export_archive( :return: """ - headers = {"includeSubfolders": "on", + data = {"includeSubfolders": "on", "includePhi": "on", "exportPhiLevel": "Restricted", "location": "2"} @@ -133,7 +133,7 @@ def export_archive( os.chdir(download_directory) url = server_context.build_url("admin", "exportFolder.view", container_path) - content = server_context.make_request(url, headers=headers)['content'] + content = server_context.make_request(url, payload=data)['content'] with open(filename, "wb") as exported_file: exported_file.write(content)