Skip to content

Commit 096c496

Browse files
committed
Merge pull request #14 from IQSS/test-improvements
Improve consistency, usability, tests, and documentation.
2 parents b6aec5b + bdf0944 commit 096c496

File tree

11 files changed

+472
-266
lines changed

11 files changed

+472
-266
lines changed

dataverse/__init__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
from connection import Connection
2-
from dataverse import Dataverse
3-
from dataset import Dataset
4-
from file import DataverseFile
1+
from requests.packages import urllib3
2+
urllib3.disable_warnings()
3+
4+
from .connection import Connection
5+
from .dataverse import Dataverse
6+
from .dataset import Dataset
7+
from .file import DataverseFile

dataverse/connection.py

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,79 @@
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
15-
self.sd_uri = "https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document".format(host=self.host)
16-
self.service_document = None
17-
self.connected = False
18-
19-
self.connect()
14+
self.sd_uri = 'https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document'.format(host=self.host)
15+
self._service_document = None
16+
17+
self.get_service_document()
2018

2119
@property
2220
def auth(self):
2321
return self.token, None
2422

25-
def connect(self):
23+
def get_service_document(self, refresh=False):
24+
if not refresh and self._service_document is not None:
25+
return self._service_document
26+
2627
resp = requests.get(self.sd_uri, auth=self.auth)
2728

2829
if resp.status_code == 403:
29-
raise UnauthorizedError('The credentials provided are invalid.')
30+
raise exceptions.UnauthorizedError('The credentials provided are invalid.')
3031
elif resp.status_code != 200:
31-
raise ConnectionError('Could not connect to the Dataverse')
32+
raise exceptions.ConnectionError('Could not connect to the Dataverse')
3233

33-
self.service_document = etree.XML(resp.content)
34-
self.connected = True
35-
36-
def get_dataverses(self, refresh=False):
37-
if refresh:
38-
self.connect()
34+
self._service_document = etree.XML(resp.content)
35+
return self._service_document
36+
37+
def create_dataverse(self, alias, name, email, parent=':root'):
38+
resp = requests.post(
39+
'https://{0}/api/dataverses/{1}'.format(self.host, parent),
40+
json={
41+
'alias': alias,
42+
'name': name,
43+
'dataverseContacts': [{'contactEmail': email}],
44+
},
45+
params={'key': self.token},
46+
)
47+
48+
if resp.status_code == 404:
49+
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(parent))
50+
elif resp.status_code != 201:
51+
raise exceptions.OperationFailedError('{0} Dataverse could not be created.'.format(name))
52+
53+
self.get_service_document(refresh=True)
54+
return self.get_dataverse(alias)
55+
56+
def delete_dataverse(self, dataverse):
3957

58+
resp = requests.delete(
59+
'https://{0}/api/dataverses/{1}'.format(self.host, dataverse.alias),
60+
params={'key': self.token},
61+
)
62+
63+
if resp.status_code == 401:
64+
raise exceptions.UnauthorizedError('Delete Dataverse unauthorized.')
65+
elif resp.status_code == 404:
66+
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(dataverse.alias))
67+
elif resp.status_code != 200:
68+
raise exceptions.OperationFailedError('Dataverse {0} could not be deleted.'.format(dataverse.alias))
69+
70+
self.get_service_document(refresh=True)
71+
72+
def get_dataverses(self, refresh=False):
4073
collections = get_elements(
41-
self.service_document[0],
42-
tag="collection",
74+
self.get_service_document(refresh)[0],
75+
tag='collection',
4376
)
44-
77+
4578
return [Dataverse(self, col) for col in collections]
4679

4780
def get_dataverse(self, alias, refresh=False):

0 commit comments

Comments
 (0)