Skip to content

Commit f307d7c

Browse files
committed
Refactor getting service document and add Connection tests
1 parent 381a7f8 commit f307d7c

2 files changed

Lines changed: 55 additions & 9 deletions

File tree

dataverse/connection.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,27 @@ def __init__(self, host, token):
1212
self.token = token
1313
self.host = host
1414
self.sd_uri = 'https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document'.format(host=self.host)
15-
self.service_document = None
15+
self._service_document = None
1616

17-
self.connect()
17+
self.get_service_document()
1818

1919
@property
2020
def auth(self):
2121
return self.token, None
2222

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

2629
if resp.status_code == 403:
2730
raise exceptions.UnauthorizedError('The credentials provided are invalid.')
2831
elif resp.status_code != 200:
2932
raise exceptions.ConnectionError('Could not connect to the Dataverse')
3033

31-
self.service_document = etree.XML(resp.content)
34+
self._service_document = etree.XML(resp.content)
35+
return self._service_document
3236

3337
def create_dataverse(self, alias, name, email, parent=':root'):
3438
resp = requests.post(
@@ -46,6 +50,8 @@ def create_dataverse(self, alias, name, email, parent=':root'):
4650
elif resp.status_code != 201:
4751
raise exceptions.OperationFailedError('{0} Dataverse could not be created.'.format(name))
4852

53+
self.get_service_document(refresh=True)
54+
4955
def delete_dataverse(self, alias):
5056
resp = requests.delete(
5157
'https://{0}/api/dataverses/{1}'.format(self.host, alias),
@@ -59,12 +65,11 @@ def delete_dataverse(self, alias):
5965
elif resp.status_code != 200:
6066
raise exceptions.OperationFailedError('Dataverse {0} could not be deleted.'.format(alias))
6167

62-
def get_dataverses(self, refresh=False):
63-
if refresh:
64-
self.connect()
68+
self.get_service_document(refresh=True)
6569

70+
def get_dataverses(self, refresh=False):
6671
collections = get_elements(
67-
self.service_document[0],
72+
self.get_service_document(refresh)[0],
6873
tag='collection',
6974
)
7075

dataverse/test/test_dataverse.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def test_connect(self):
6969

7070
assert connection.host == TEST_HOST
7171
assert connection.token == TEST_TOKEN
72-
assert connection.service_document
72+
assert connection._service_document
7373

7474
def test_connect_unauthorized(self):
7575
with pytest.raises(exceptions.UnauthorizedError):
@@ -116,6 +116,47 @@ def test_delete_dataverse(self):
116116

117117
assert dataverse is None
118118

119+
def test_get_dataverses(self):
120+
connection = Connection(TEST_HOST, TEST_TOKEN)
121+
original_dataverses = connection.get_dataverses()
122+
assert isinstance(original_dataverses, list)
123+
124+
alias = str(uuid.uuid1()) # must be unique
125+
126+
connection.create_dataverse(
127+
alias,
128+
'Test Name',
129+
'dataverse@example.com',
130+
)
131+
132+
current_dataverses = connection.get_dataverses()
133+
try:
134+
assert len(current_dataverses) == len(original_dataverses) + 1
135+
assert alias in [dataverse.alias for dataverse in current_dataverses]
136+
finally:
137+
connection.delete_dataverse(alias)
138+
139+
current_dataverses = connection.get_dataverses()
140+
assert [dataverse.alias for dataverse in current_dataverses] == [dataverse.alias for dataverse in original_dataverses]
141+
142+
def test_get_dataverse(self):
143+
connection = Connection(TEST_HOST, TEST_TOKEN)
144+
alias = str(uuid.uuid1()) # must be unique
145+
assert connection.get_dataverse(alias) is None
146+
147+
connection.create_dataverse(
148+
alias,
149+
'Test Name',
150+
'dataverse@example.com',
151+
)
152+
153+
dataverse = connection.get_dataverse(alias)
154+
try:
155+
assert dataverse is not None
156+
assert dataverse.alias == alias
157+
finally:
158+
connection.delete_dataverse(alias)
159+
119160

120161
class TestDataset(object):
121162

0 commit comments

Comments
 (0)