From cc6eb12f3a51e93546c5164ddc4ae851e56c3dac Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Fri, 10 May 2024 12:32:14 -0400 Subject: [PATCH 1/4] upgrade from pyDataverse 0.2.1 to 0.3.2 #43 Also add `requests` because it was pulled in as a transitive dependency previously. --- requirements.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3c036a0..49fefeb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ -pyDataverse==0.2.1 -CairoSVG==2.7.1 \ No newline at end of file +pyDataverse==0.3.2 +CairoSVG==2.7.1 +requests==2.31.0 From ad23316e20de1dd6d8d585c7a1b9dae12ee466d3 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Fri, 10 May 2024 15:41:58 -0400 Subject: [PATCH 2/4] get "create dataverse" working #43 --- create_sample_data.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/create_sample_data.py b/create_sample_data.py index d0dce43..4250d9e 100644 --- a/create_sample_data.py +++ b/create_sample_data.py @@ -1,4 +1,4 @@ -from pyDataverse.api import Api +from pyDataverse.api import NativeApi import json import dvconfig import os @@ -13,8 +13,8 @@ except: print("Using API token from config file.") paths = dvconfig.sample_data -api = Api(base_url, api_token) -print(api.status) +api = NativeApi(base_url, api_token) +print(api.get_info_version()) # TODO limit amount of recursion def check_dataset_lock(dataset_dbid): query_str = '/datasets/' + str(dataset_dbid) + '/locks' @@ -48,9 +48,8 @@ def check_dataset_lock(dataset_dbid): with open(dv_json) as f: metadata = json.load(f) print(metadata) - # FIXME: Why is "identifier" required? identifier = metadata['alias'] - resp = api.create_dataverse(identifier, json.dumps(metadata), parent=parent) + resp = api.create_dataverse(parent, json.dumps(metadata)) print(resp) resp = api.publish_dataverse(identifier) print(resp) From 789c940ba16ee3e8cbb9f9bb0640d657575f6a72 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Fri, 10 May 2024 15:49:26 -0400 Subject: [PATCH 3/4] get destroy_all_dvobjects.py working #43 --- destroy_all_dvobjects.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/destroy_all_dvobjects.py b/destroy_all_dvobjects.py index 29631f6..7364563 100644 --- a/destroy_all_dvobjects.py +++ b/destroy_all_dvobjects.py @@ -1,4 +1,4 @@ -from pyDataverse.api import Api +from pyDataverse.api import NativeApi import json import dvconfig import requests @@ -10,8 +10,7 @@ print("Using API token from $API_TOKEN.") except: print("Using API token from config file.") -api = Api(base_url, api_token) -print('API status: ' +api.status) +api = NativeApi(base_url, api_token) dataverse_ids = [] dataset_ids = [] @@ -35,9 +34,7 @@ def main(): print("Done.") def find_children(dataverse_database_id): - query_str = '/dataverses/' + str(dataverse_database_id) + '/contents' - params = {} - resp = api.get_request(query_str, params=params, auth=True) + resp = api.get_dataverse_contents(dataverse_database_id, auth=True) for dvobject in resp.json()['data']: dvtype = dvobject['type'] dvid = dvobject['id'] From 8bfeea47694e3709df49a6c193c584ba1cbe9086 Mon Sep 17 00:00:00 2001 From: Philip Durbin Date: Fri, 10 May 2024 16:13:30 -0400 Subject: [PATCH 4/4] get the rest of create sample data working #43 --- create_sample_data.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/create_sample_data.py b/create_sample_data.py index 4250d9e..77ea5f1 100644 --- a/create_sample_data.py +++ b/create_sample_data.py @@ -1,4 +1,5 @@ from pyDataverse.api import NativeApi +from pyDataverse.models import Datafile import json import dvconfig import os @@ -16,15 +17,13 @@ api = NativeApi(base_url, api_token) print(api.get_info_version()) # TODO limit amount of recursion -def check_dataset_lock(dataset_dbid): - query_str = '/datasets/' + str(dataset_dbid) + '/locks' - params = {} - resp = api.get_request(query_str, params=params, auth=True) +def check_dataset_lock(dataset_pid): + resp = api.get_dataset_lock(dataset_pid) locks = resp.json()['data'] if (locks): - print('Lock found for dataset id ' + str(dataset_dbid) + '... sleeping...') + print('Lock found for dataset id ' + str(dataset_pid) + '... sleeping...') time.sleep(2) - check_dataset_lock(dataset_dbid) + check_dataset_lock(dataset_pid) resp = api.get_dataverse(':root') buff = StringIO("") if (resp.status_code == 401): @@ -72,12 +71,15 @@ def check_dataset_lock(dataset_dbid): relpath = os.path.relpath(filepath,files_dir) # "directoryLabel" is used to populate "File Path" directoryLabel, filename = os.path.split(relpath) - resp = api.upload_file(dataset_pid, "'" + filepath + "'") + df = Datafile() + df_filename = filepath + df.set({"pid": dataset_pid, "filename": df_filename}) + resp = api.upload_datafile(dataset_pid, df_filename, df.json()) print(resp) - file_id = resp['data']['files'][0]['dataFile']['id'] + file_id = resp.json()['data']['files'][0]['dataFile']['id'] ## This lock check and sleep is here to prevent the dataset from being permanently ## locked because a tabular file was uploaded first. - check_dataset_lock(dataset_dbid) + check_dataset_lock(dataset_pid) # TODO: Think more about where the description comes from. A "sidecar" file as proposed at https://github.com/IQSS/dataverse/issues/5924#issuecomment-499605672 ? # L.A.: I implemented something along these lines - an (optional) directory called ".filemetadata" # in the dataset directory, where files containing extra json filemetadata records may be