|
1 | 1 | import os |
2 | 2 | from datetime import datetime |
3 | | - |
| 3 | +import json |
4 | 4 | import requests |
5 | 5 | from dotenv import dotenv_values |
6 | 6 |
|
@@ -217,9 +217,11 @@ def process_collection_descendants(collection, headers_v1, base_headers_v2, head |
217 | 217 | new_folder = create_folder_if_not_exists_or_get(dataset["name"], v2_parent_id, v2_parent_type, v2_dataset_id, headers_v2) |
218 | 218 | process_dataset_files_and_folders(dataset, headers_v1, base_headers_v2, 'folder', new_folder['id'], v2_dataset_id, new_folder) |
219 | 219 | # TODO add dataset metadata to the folder |
| 220 | + add_dataset_metadata_to_folder(dataset, v2_dataset_id, new_folder['id'], headers_v1, base_headers_v2) |
220 | 221 | else: |
221 | 222 | new_folder = create_folder_if_not_exists_or_get(dataset["name"], v2_parent_id, v2_parent_type, v2_dataset_id, headers_v2) |
222 | 223 | process_dataset_files_and_folders(dataset, headers_v1, base_headers_v2, 'folder', new_folder['id'], v2_dataset_id, new_folder) |
| 224 | + add_dataset_metadata_to_folder(dataset, v2_dataset_id, new_folder['id'], headers_v1, base_headers_v2) |
223 | 225 | # TODO add dataset metadata to the folder |
224 | 226 |
|
225 | 227 |
|
@@ -798,7 +800,6 @@ def add_file_metadata(file_v1, file_v2_id, headers_v1, headers_v2): |
798 | 800 | print("Successfully posted file machine metadata to V2") |
799 | 801 | break # machine metadata no need to iterate through all the keys |
800 | 802 |
|
801 | | - |
802 | 803 | def add_dataset_metadata(dataset_v1, dataset_v2_id, headers_v1, headers_v2): |
803 | 804 | # Get metadata from Clowder V1 |
804 | 805 | endpoint = ( |
@@ -853,6 +854,46 @@ def add_dataset_metadata(dataset_v1, dataset_v2_id, headers_v1, headers_v2): |
853 | 854 | break # machine metadata no need to iterate through all the keys |
854 | 855 |
|
855 | 856 |
|
| 857 | +def add_dataset_metadata_to_folder(dataset_v1, dataset_v2_id, folder_v2_id, headers_v1, headers_v2): |
| 858 | + # Get metadata from Clowder V1 |
| 859 | + endpoint = ( |
| 860 | + f"{CLOWDER_V1}/api/datasets/{dataset_v1['id']}/metadata.jsonld?superAdmin=true" |
| 861 | + ) |
| 862 | + dataset_name = dataset_v1['name'] |
| 863 | + metadata_file_name = dataset_name + '_metadata.json' |
| 864 | + metadata_v1 = requests.get(endpoint, headers=headers_v1).json() |
| 865 | + with open(metadata_file_name, "w") as metadata_file: |
| 866 | + json.dump(metadata_v1, metadata_file) |
| 867 | + |
| 868 | + # upload the file to the folder in v2 |
| 869 | + dataset_file_upload_endpoint = f"{CLOWDER_V2}/api/v2/datasets/{dataset_v2_id}/filesMultiple?folder_id={folder_v2_id}" |
| 870 | + |
| 871 | + response = requests.post( |
| 872 | + dataset_file_upload_endpoint, |
| 873 | + headers=headers_v2, |
| 874 | + files=[("files", (metadata_file_name, open(metadata_file_name, "rb")))], |
| 875 | + ) |
| 876 | + |
| 877 | + # Clean up the local file after upload |
| 878 | + print(f"Type response {type(response)}") |
| 879 | + try: |
| 880 | + os.remove(metadata_file_name) |
| 881 | + except Exception as e: |
| 882 | + print(f"Could not delete locally created metadata file: {metadata_file_name}") |
| 883 | + print(e) |
| 884 | + |
| 885 | + if response.status_code == 200: |
| 886 | + print(f"Uploaded file: {metadata_file_name} to dataset {dataset_v2_id} and folder {folder_v2_id}") |
| 887 | + response_json = response.json() |
| 888 | + if type(response_json) == dict: |
| 889 | + return response.json().get("id") |
| 890 | + elif type(response_json) == list: |
| 891 | + return response_json[0].get("id") |
| 892 | + else: |
| 893 | + print(f"Failed to upload file: {metadata_file} to dataset {dataset_v2_id} and folder {folder_v2_id}") |
| 894 | + return None |
| 895 | + |
| 896 | + |
856 | 897 | def register_migration_extractor(): |
857 | 898 | """Register the migration extractor in Clowder v2.""" |
858 | 899 | migration_extractor = { |
|
0 commit comments