Skip to content

Commit 1529526

Browse files
committed
check dataset locks
1 parent d92492f commit 1529526

File tree

1 file changed

+65
-58
lines changed

1 file changed

+65
-58
lines changed

dataverse.py

Lines changed: 65 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
from pyDataverse.api import NativeApi, DataAccessApi
2-
from pyDataverse.models import Datafile
3-
from os.path import isdir, join
4-
from time import sleep
5-
from os import walk
61
import argparse
2+
from time import sleep
3+
from os.path import join
4+
from os import walk
75
import requests
8-
import sys
6+
from pyDataverse.api import NativeApi
7+
from pyDataverse.models import Datafile
98

109
def parse_arguments():
10+
""" Parses cmd-line arguments """
1111
parser = argparse.ArgumentParser()
1212

1313
# Mandatory arguments
@@ -18,65 +18,72 @@ def parse_arguments():
1818

1919
# Optional arguments
2020
parser.add_argument("-d", "--dir", help="Uploads only a specific dir.")
21-
22-
args = parser.parse_args()
23-
return args
24-
25-
26-
def check_dataset_lock(dataset_dbid):
27-
query_str = '/datasets/' + str(dataset_dbid) + '/locks'
28-
params = {}
29-
resp = api.get_request(query_str, params=params, auth=True)
30-
locks = resp.json()['data']
31-
if (locks):
32-
print('Lock found for dataset id ' + str(dataset_dbid) + '... sleeping...')
33-
time.sleep(2)
34-
check_dataset_lock(dataset_dbid)
35-
36-
37-
if __name__ == '__main__':
21+
22+
args_ = parser.parse_args()
23+
return args_
24+
25+
26+
def check_dataset_lock(num):
27+
""" Gives Dataverse server more time for upload """
28+
if num <= 1:
29+
print('Lock found for dataset id ' + \
30+
str(dataset_dbid) + '\nTry again later!')
31+
return
32+
33+
query_str = dataverse_server + \
34+
'/api/datasets/' + str(dataset_dbid) + '/locks/'
35+
resp_ = requests.get(query_str, auth = (token, ""))
36+
locks = resp_.json()['data']
37+
38+
if bool(locks):
39+
print('Lock found for dataset id ' + \
40+
str(dataset_dbid) + '\n... sleeping...')
41+
sleep(2)
42+
check_dataset_lock(num-1)
43+
return
44+
45+
46+
if __name__ == '__main__':
3847
args = parse_arguments()
39-
dataverse_server = args.server.strip("/")
40-
api = NativeApi(dataverse_server , args.token)
41-
data_api = DataAccessApi(dataverse_server)
42-
43-
# the following deletes all the files in the dataset
44-
48+
token = args.token
49+
dataverse_server = args.server.strip("/")
50+
api = NativeApi(dataverse_server , token)
51+
52+
# the following deletes all the files in the dataset
4553
dataset = api.get_dataset(args.doi)
4654
files_list = dataset.json()['data']['latestVersion']['files']
47-
55+
dataset_dbid = dataset.json()['data']['id']
56+
4857
delete_api = dataverse_server + \
49-
'/dvn/api/data-deposit/v1.1/swordv2/edit-media/file/'
58+
'/dvn/api/data-deposit/v1.1/swordv2/edit-media/file/'
5059
for f in files_list:
51-
fileid = f["dataFile"]["id"]
52-
resp = requests.delete(
53-
delete_api + str(fileid), \
54-
auth = (args.token , ""))
55-
56-
# the following adds all files from the repository to Dataverse
57-
60+
fileid = f["dataFile"]["id"]
61+
resp = requests.delete(
62+
delete_api + str(fileid), \
63+
auth = (token , ""))
64+
65+
# the following adds all files from the repository to Dataverse
5866
path = join('repo',args.dir) if args.dir else 'repo'
67+
5968
for root, subdirs, files in walk(path):
60-
if '.git' in subdirs:
61-
subdirs.remove('.git')
62-
if '.github' in subdirs:
63-
subdirs.remove('.github')
64-
for f in files:
65-
df = Datafile()
66-
df.set({
67-
"pid" : args.doi,
68-
"filename" : f,
69-
"directoryLabel": root[5:],
70-
"description" : \
71-
"Uploaded with GitHub Action from {}.".format(
72-
args.repo),
73-
})
74-
resp = api.upload_datafile(
75-
args.doi, join(root,f), df.json())
76-
check_dataset_lock(
77-
resp['data']['files'][0]['dataFile']['id'])
78-
69+
if '.git' in subdirs:
70+
subdirs.remove('.git')
71+
if '.github' in subdirs:
72+
subdirs.remove('.github')
73+
for f in files:
74+
df = Datafile()
75+
df.set({
76+
"pid" : args.doi,
77+
"filename" : f,
78+
"directoryLabel": root[5:],
79+
"description" : \
80+
"Uploaded with GitHub Action from {}.".format(
81+
args.repo),
82+
})
83+
resp = api.upload_datafile(
84+
args.doi, join(root,f), df.json())
85+
check_dataset_lock(5)
86+
7987
# publish updated dataset
80-
8188
resp = api.publish_dataset(args.doi, release_type="major")
8289

0 commit comments

Comments
 (0)