Skip to content

Test improvements #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Apr 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions dataverse/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from connection import Connection
from dataverse import Dataverse
from dataset import Dataset
from file import DataverseFile
from requests.packages import urllib3
urllib3.disable_warnings()

from .connection import Connection
from .dataverse import Dataverse
from .dataset import Dataset
from .file import DataverseFile
71 changes: 52 additions & 19 deletions dataverse/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,79 @@
import requests

from dataverse import Dataverse
from exceptions import UnauthorizedError, ConnectionError
import exceptions
from utils import get_elements


class Connection(object):

def __init__(self, host, token):
# Connection Properties
self.token = token
self.host = host
self.sd_uri = "https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document".format(host=self.host)
self.service_document = None
self.connected = False

self.connect()
self.sd_uri = 'https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document'.format(host=self.host)
self._service_document = None

self.get_service_document()

@property
def auth(self):
return self.token, None

def connect(self):
def get_service_document(self, refresh=False):
if not refresh and self._service_document is not None:
return self._service_document

resp = requests.get(self.sd_uri, auth=self.auth)

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

self.service_document = etree.XML(resp.content)
self.connected = True

def get_dataverses(self, refresh=False):
if refresh:
self.connect()
self._service_document = etree.XML(resp.content)
return self._service_document

def create_dataverse(self, alias, name, email, parent=':root'):
resp = requests.post(
'https://{0}/api/dataverses/{1}'.format(self.host, parent),
json={
'alias': alias,
'name': name,
'dataverseContacts': [{'contactEmail': email}],
},
params={'key': self.token},
)

if resp.status_code == 404:
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(parent))
elif resp.status_code != 201:
raise exceptions.OperationFailedError('{0} Dataverse could not be created.'.format(name))

self.get_service_document(refresh=True)
return self.get_dataverse(alias)

def delete_dataverse(self, dataverse):

resp = requests.delete(
'https://{0}/api/dataverses/{1}'.format(self.host, dataverse.alias),
params={'key': self.token},
)

if resp.status_code == 401:
raise exceptions.UnauthorizedError('Delete Dataverse unauthorized.')
elif resp.status_code == 404:
raise exceptions.DataverseNotFoundError('Dataverse {0} was not found.'.format(dataverse.alias))
elif resp.status_code != 200:
raise exceptions.OperationFailedError('Dataverse {0} could not be deleted.'.format(dataverse.alias))

self.get_service_document(refresh=True)

def get_dataverses(self, refresh=False):
collections = get_elements(
self.service_document[0],
tag="collection",
self.get_service_document(refresh)[0],
tag='collection',
)

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

def get_dataverse(self, alias, refresh=False):
Expand Down
Loading