Skip to content

Commit ff8c62c

Browse files
committed
new method upload to folder - we find the folder, may need to deprecate old method since it looks like it won't find the right folders
1 parent 4640c19 commit ff8c62c

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

scripts/migration/migrate.py

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,13 +255,17 @@ def process_dataset_files(dataset, headers_v1, headers_v2, parent_type, parent_i
255255
files_endpoint = f"{CLOWDER_V1}/api/datasets/{dataset['id']}/files"
256256
files_response = requests.get(files_endpoint, headers=headers_v1)
257257
files_json = files_response.json()
258+
# TODO WORK HERE
258259
for file in files_json:
259260
if 'folders' in file:
260261
print(f"This file is in a folder")
262+
current_file_folder_name = file['folders']['name']
261263
matching_folder = None
262264
for folder_v2 in all_v2_dataset_folders:
263265
if folder_v2['name'] == file['folders']['name']:
264-
print(f"Upload this file to a folder")
266+
print(f"Upload this file to a folder")
267+
matching_folder = folder_v2
268+
download_and_upload_file()
265269
else:
266270
print(f"This file is not in a folder")
267271
# TODO upload it to the folder
@@ -620,6 +624,48 @@ def add_dataset_folders(dataset_v1, dataset_v2, headers):
620624
add_folder_hierarchy(folder["name"], dataset_v2, headers)
621625

622626

627+
def download_and_upload_file_to_folder(file, folder, dataset_v2_id, headers_v2):
628+
"""Download a file from Clowder v1 and upload it to Clowder v2."""
629+
filename = file["filename"]
630+
file_id = file["id"]
631+
file_folder = folder
632+
633+
# Download the file from Clowder v1
634+
v1_download_url = f"{CLOWDER_V1}/api/files/{file_id}?superAdmin=true"
635+
print(f"Downloading file: {filename}")
636+
download_response = requests.get(v1_download_url, headers=clowder_headers_v1)
637+
638+
with open(filename, "wb") as f:
639+
f.write(download_response.content)
640+
641+
# Upload the file to Clowder v2
642+
dataset_file_upload_endpoint = f"{CLOWDER_V2}/api/v2/datasets/{dataset_v2_id}/files"
643+
if folder:
644+
dataset_file_upload_endpoint += f"Multiple?folder_id={folder['id']}"
645+
response = requests.post(
646+
dataset_file_upload_endpoint,
647+
headers=headers_v2,
648+
files={"file": open(filename, "rb")},
649+
)
650+
else:
651+
print(f"This file is not in a folder")
652+
653+
# Clean up the local file after upload
654+
try:
655+
os.remove(filename)
656+
except Exception as e:
657+
print(f"Could not delete locally downloaded file: {filename}")
658+
print(e)
659+
660+
if response.status_code == 200:
661+
print(f"Uploaded file: {filename} to dataset {dataset_v2_id}")
662+
return response.json().get("id")
663+
else:
664+
print(f"Failed to upload file: {filename} to dataset {dataset_v2_id}")
665+
666+
return None
667+
668+
623669
def download_and_upload_file(file, all_dataset_folders, dataset_v2_id, headers_v2):
624670
"""Download a file from Clowder v1 and upload it to Clowder v2."""
625671
filename = file["filename"]

0 commit comments

Comments
 (0)