Skip to content

Commit 8f10d96

Browse files
committed
Merge remote-tracking branch 'rliebz/4.0'
2 parents 852c095 + b2702d3 commit 8f10d96

39 files changed

Lines changed: 1100 additions & 927 deletions

.gitignore

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
.vagrant
22
.DS_Store
33
*pyc
4-
venv
5-
.cache
4+
.idea/
5+
.cache/
6+
local.py
7+
*~
8+
*.egg-info/

.gitmodules

Lines changed: 0 additions & 3 deletions
This file was deleted.

Vagrantfile

Lines changed: 0 additions & 20 deletions
This file was deleted.

dataverse/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from connection import Connection
2+
from dataverse import Dataverse
3+
from dataset import Dataset
4+
from file import DataverseFile

dataverse/connection.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from lxml import etree
2+
import requests
3+
4+
from dataverse import Dataverse
5+
from exceptions import UnauthorizedError, ConnectionError
6+
from utils import get_elements
7+
8+
9+
class Connection(object):
10+
11+
def __init__(self, host, token=None, username=None, password=None):
12+
# Connection Properties
13+
self.token = token
14+
self.username = username
15+
self.password = password
16+
self.host = host
17+
self.sd_uri = "https://{host}/dvn/api/data-deposit/v1.1/swordv2/service-document".format(host=self.host)
18+
self.service_document = None
19+
self.connected = False
20+
21+
self.connect()
22+
23+
@property
24+
def auth(self):
25+
return (self.token, None) if self.token else (self.username, self.password)
26+
27+
@property
28+
def has_api_key(self):
29+
return True if self.token else False
30+
31+
def connect(self):
32+
resp = requests.get(self.sd_uri, auth=self.auth)
33+
34+
if resp.status_code == 403:
35+
raise UnauthorizedError('The credentials provided are invalid.')
36+
elif resp.status_code != 200:
37+
raise ConnectionError('Could not connect to the Dataverse')
38+
39+
self.service_document = etree.XML(resp.content)
40+
self.connected = True
41+
42+
def get_dataverses(self, refresh=False):
43+
if refresh:
44+
self.connect()
45+
46+
collections = get_elements(
47+
self.service_document[0],
48+
tag="collection",
49+
)
50+
51+
return [Dataverse(self, col) for col in collections]
52+
53+
def get_dataverse(self, alias, refresh=False):
54+
return next((dataverse for dataverse in self.get_dataverses(refresh)
55+
if dataverse.alias == alias), None)

0 commit comments

Comments
 (0)