dm.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import requests
  2. from xml.etree import ElementTree
  3. from requests_oauthlib import OAuth1
  4. BASE_URL = 'http://kitdm.anka.kit.edu:8080/KITDM/rest'
  5. KEY = 'secret'
  6. SECRET = 'secret'
  7. TOKEN = 'KeQL6nNBv8qsnFVb'
  8. TOKEN_SECRET = '6JyJaO5TrkMK92dU'
  9. class Error(Exception):
  10. pass
  11. class PermissionError(Error):
  12. pass
  13. class NotFoundError(Error):
  14. pass
  15. class ArbitraryError(Error):
  16. pass
  17. class Object(object):
  18. def __init__(self, root):
  19. self.identifier = root.find('./entities/entity/digitalObjectIdentifier').text
  20. self.note = root.find('./entities/entity/note').text
  21. class Client(object):
  22. def __init__(self, base_url=BASE_URL, key=KEY, secret=SECRET,
  23. token=TOKEN, token_secret=TOKEN_SECRET):
  24. self.auth = OAuth1(KEY, SECRET, TOKEN, TOKEN_SECRET)
  25. self.base_url = base_url
  26. def get_object_ids(self, limit=None, since=None):
  27. results = '?results={}'.format(limit) if limit else ''
  28. url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, results)
  29. root = self.get_response(url)
  30. return (int(e.text) for e in root.findall('./entities/entity/baseId'))
  31. def get_object(self, oid):
  32. url = '{}/basemetadata/digitalObjects/{}'.format(self.base_url, oid)
  33. return Object(self.get_response(url))
  34. def get_response(self, url):
  35. response = requests.get(url, auth=self.auth)
  36. if response.status_code == 403:
  37. raise PermissionError()
  38. elif response.status_code == 404:
  39. raise NotFoundError()
  40. elif response.status_code != 200:
  41. raise ArbitraryError()
  42. return ElementTree.fromstring(response.text)