Skip to content

Commit e1e54eb

Browse files
committed
Allow dataverse creation/deletion
1 parent 5844d26 commit e1e54eb

2 files changed

Lines changed: 38 additions & 5 deletions

File tree

dataverse/connection.py

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
import requests
33

44
from dataverse import Dataverse
5-
from exceptions import UnauthorizedError, ConnectionError
5+
import exceptions
66
from utils import get_elements
77

88

99
class Connection(object):
1010

1111
def __init__(self, host, token):
12-
# Connection Properties
1312
self.token = token
1413
self.host = host
1514
self.sd_uri = "https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document".format(host=self.host)
@@ -25,12 +24,41 @@ def connect(self):
2524
resp = requests.get(self.sd_uri, auth=self.auth)
2625

2726
if resp.status_code == 403:
28-
raise UnauthorizedError('The credentials provided are invalid.')
27+
raise exceptions.UnauthorizedError('The credentials provided are invalid.')
2928
elif resp.status_code != 200:
30-
raise ConnectionError('Could not connect to the Dataverse')
29+
raise exceptions.ConnectionError('Could not connect to the Dataverse')
3130

3231
self.service_document = etree.XML(resp.content)
33-
32+
33+
def create_dataverse(self, alias, name, email, parent=':root'):
34+
resp = requests.post(
35+
'https://{0}/api/dataverses/{1}'.format(self.host, parent),
36+
json={
37+
'alias': alias,
38+
'name': name,
39+
'dataverseContacts': [{'contactEmail': email}],
40+
},
41+
params={'key': self.token},
42+
)
43+
44+
if resp.status_code == 404:
45+
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(parent))
46+
elif resp.status_code != 201:
47+
raise exceptions.OperationFailedError('{0} Dataverse could not be created.'.format(name))
48+
49+
def delete_dataverse(self, alias):
50+
resp = requests.delete(
51+
'https://{0}/api/dataverses/{1}'.format(self.host, alias),
52+
params={'key': self.token},
53+
)
54+
55+
if resp.status_code == 401:
56+
raise exceptions.UnauthorizedError('Delete Dataverse unauthorized.')
57+
elif resp.status_code == 404:
58+
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(alias))
59+
elif resp.status_code != 200:
60+
raise exceptions.OperationFailedError('Dataverse {0} could not be deleted.'.format(alias))
61+
3462
def get_dataverses(self, refresh=False):
3563
if refresh:
3664
self.connect()

dataverse/exceptions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,9 @@ class UnpublishedDataverseError(DataverseError):
4545

4646
class VersionJsonNotFoundError(DataverseError):
4747
"""Raised when requested json data for a version is not found"""
48+
pass
49+
50+
51+
class DataverseNotFoundError(DataverseError):
52+
"""Raised when a Dataverse cannot be found"""
4853
pass

0 commit comments

Comments
 (0)