Skip to content

Commit 8d462c3

Browse files
committed
Refactor root Dataverse filter and fix tests
1 parent 18e0e1a commit 8d462c3

4 files changed

Lines changed: 22 additions & 24 deletions

File tree

dataverse/connection.py

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

44
from dataverse import Dataverse
5-
from utils import get_elements
5+
from utils import get_elements, is_not_root_dataverse
66

77

88
class Connection(object):
@@ -36,21 +36,19 @@ def connect(self):
3636
self.connected = True if self.status == 200 else False
3737
self.service_document = etree.XML(resp.content)
3838

39-
def get_dataverses(self):
39+
def get_dataverses(self, allow_root=False):
4040
# Get latest dataverse information
4141
self.connect()
4242

43-
# Dataverse 4.0 beta currently returns collection for "Harvard" DV,
44-
# which the user may not have permissions on. Could cause problems.
4543
collections = get_elements(
4644
self.service_document[0],
4745
tag="collection",
4846
)
49-
# removes the Harvard dataverse; this is gross
50-
# also removes the root dataverse (which users do not have read permission on)
51-
def is_not_harvard_or_root(collection):
52-
return (collection.attrib['href'].split('/')[-1] != 'harvard') and (collection.attrib['href'].split('/')[-1] != 'root')
53-
collections = filter(is_not_harvard_or_root, collections)
47+
48+
# Remove root Dataverses, which may cause permission issues
49+
# See https://github.com/IQSS/dataverse/issues/1070
50+
if not allow_root:
51+
collections = filter(is_not_root_dataverse, collections)
5452

5553
return [Dataverse(self, col) for col in collections]
5654

dataverse/test/test_dataverse.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import sys
21
import unittest
32

43
import logging
@@ -103,10 +102,6 @@ def setUpClass(self):
103102
)
104103

105104
self.dv = dataverses[0]
106-
if not self.dv.is_published:
107-
raise utils.DataverseException(
108-
'You must publish "{0}" to run these tests.'.format(self.dv.title)
109-
)
110105

111106
print "Removing any existing studies."
112107
studies = self.dv.get_studies()
@@ -199,12 +194,8 @@ def test_publish_dataset(self):
199194
self.assertTrue(self.s.get_state() == "PUBLISHED")
200195
self.dv.delete_dataset(self.s)
201196
self.assertTrue(self.s.get_state(refresh=True) == "DEACCESSIONED")
197+
202198

203-
def test_dataverse_published(self):
204-
self.assertTrue(self.dv.is_published)
205-
206-
if __name__ == "__main__":
207-
__file__ = sys.argv[0]
208-
suite = unittest.TestLoader().loadTestsFromTestCase(TestDatasetOperations)
209-
unittest.TextTestRunner(verbosity=2).run(suite)
199+
if __name__ == '__main__':
200+
unittest.main()
210201

dataverse/utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ class DataverseException(Exception):
1010
pass
1111

1212

13+
def is_not_root_dataverse(collection):
14+
col_alias = collection.attrib['href'].split('/')[-1]
15+
# Root dataverse may be named differently per host
16+
return col_alias != 'root' and col_alias != 'harvard'
17+
18+
1319
# factor out xpath operations so we don't have to look at its ugliness
1420
def get_element(root, tag='*', namespace=None, attribute=None, attribute_value=None):
1521
elements = get_elements(root, tag, namespace, attribute, attribute_value)

readme.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ Do not commit this file.
2828

2929
## Testing
3030

31-
Not all tests are functional.
32-
33-
In order to run any tests, you must first create and publish a Dataverse on the
31+
In order to run any tests, you must first create a Dataverse on the
3432
host you wish to test. Do not run tests on the production server.
33+
34+
To run tests
35+
36+
$ cd dataverse/test
37+
$ python -m unittest test_dataverse

0 commit comments

Comments
 (0)