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
6
1
import argparse
2
+ from time import sleep
3
+ from os .path import join
4
+ from os import walk
7
5
import requests
8
- import sys
6
+ from pyDataverse .api import NativeApi
7
+ from pyDataverse .models import Datafile
9
8
10
9
def parse_arguments ():
10
+ """ Parses cmd-line arguments """
11
11
parser = argparse .ArgumentParser ()
12
12
13
13
# Mandatory arguments
@@ -18,65 +18,72 @@ def parse_arguments():
18
18
19
19
# Optional arguments
20
20
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 ) + '\n Try 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__' :
38
47
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
45
53
dataset = api .get_dataset (args .doi )
46
54
files_list = dataset .json ()['data' ]['latestVersion' ]['files' ]
47
-
55
+ dataset_dbid = dataset .json ()['data' ]['id' ]
56
+
48
57
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/'
50
59
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
58
66
path = join ('repo' ,args .dir ) if args .dir else 'repo'
67
+
59
68
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
+
79
87
# publish updated dataset
80
-
81
88
resp = api .publish_dataset (args .doi , release_type = "major" )
82
89
0 commit comments