|
@@ -0,0 +1,61 @@
|
|
|
+import requests
|
|
|
+from xml.etree import ElementTree
|
|
|
+from requests_oauthlib import OAuth1
|
|
|
+
|
|
|
+
|
|
|
+BASE_URL = 'http://kitdm.anka.kit.edu:8080/KITDM/rest'
|
|
|
+KEY = 'secret'
|
|
|
+SECRET = 'secret'
|
|
|
+TOKEN = 'KeQL6nNBv8qsnFVb'
|
|
|
+TOKEN_SECRET = '6JyJaO5TrkMK92dU'
|
|
|
+
|
|
|
+
|
|
|
+class Error(Exception):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class PermissionError(Error):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class NotFoundError(Error):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class ArbitraryError(Error):
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+class Object(object):
|
|
|
+ def __init__(self, root):
|
|
|
+ self.identifier = root.find('./entities/entity/digitalObjectIdentifier').text
|
|
|
+ self.note = root.find('./entities/entity/note').text
|
|
|
+
|
|
|
+
|
|
|
+class Client(object):
|
|
|
+ def __init__(self, base_url=BASE_URL, key=KEY, secret=SECRET,
|
|
|
+ token=TOKEN, token_secret=TOKEN_SECRET):
|
|
|
+ self.auth = OAuth1(KEY, SECRET, TOKEN, TOKEN_SECRET)
|
|
|
+ self.base_url = base_url
|
|
|
+
|
|
|
+ def get_object_ids(self, limit=None, since=None):
|
|
|
+ results = '?results={}'.format(limit) if limit else ''
|
|
|
+ url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, results)
|
|
|
+ root = self.get_response(url)
|
|
|
+ return (int(e.text) for e in root.findall('./entities/entity/baseId'))
|
|
|
+
|
|
|
+ def get_object(self, oid):
|
|
|
+ url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, oid)
|
|
|
+ return Object(self.get_response(url))
|
|
|
+
|
|
|
+ def get_response(self, url):
|
|
|
+ response = requests.get(url, auth=self.auth)
|
|
|
+
|
|
|
+ if response.status_code == 403:
|
|
|
+ raise PermissionError()
|
|
|
+ elif response.status_code == 404:
|
|
|
+ raise NotFoundError()
|
|
|
+ elif response.status_code != 200:
|
|
|
+ raise ArbitraryError()
|
|
|
+
|
|
|
+ return ElementTree.fromstring(response.text)
|