Source code for annotations.managers

from django.conf import settings

import requests
from bs4 import BeautifulSoup
import json


[docs]class RepositoryManager(object): __name__ = 'RepositoryManager' def __init__(self, endpoint, **kwargs): self.endpoint = endpoint for k, v in kwargs.iteritems(): setattr(self, k, v) def __repr__(self): return self.__name__
[docs] def collections(self): return []
[docs] def collection(self, collection_id): return []
[docs] def get(self, uri): return {}
[docs] def browse(self): return []
[docs] def search(self, query): return []
[docs]class JARSManager(RepositoryManager): __name__ = 'JARS' getPattern = '{endpoint}/rest/resource/?uri={uri}' getPatternID = '{endpoint}/rest/resource/{id}/' browsePattern = '{endpoint}/rest/resource/' collectionPattern = '{endpoint}/rest/collection/' collectionBrowsePattern = '{endpoint}/rest/collection/{collection}/' contentPattern = '{endpoint}{content_location}' token = settings.JARS_KEY def _cast(self, resource): return { 'title': resource.get('name', None), 'uri': resource.get('uri', None), 'id': resource.get('id', None), 'public': resource.get('public', None) } def _cast_collection(self, collection): return { 'id': collection.get('id', None), 'uri': collection.get('uri', None), 'title': collection.get('name', None), } def _retrieve(self, remote, allow_redirects=True): try: response = requests.get(remote, allow_redirects=allow_redirects) return json.loads(response.text) except Exception as E: return self._handle_exception(E) def _handle_exception(self, exception): if type(exception) is requests.ConnectionError: return {}
[docs] def collections(self): remote = self.collectionPattern.format(endpoint=self.endpoint) jdata = self._retrieve(remote) if jdata is None: return [] return [self._cast_collection(c) for c in jdata]
[docs] def collection(self, collection_id): remote = self.collectionBrowsePattern.format( endpoint=self.endpoint, collection=collection_id ) jdata = self._retrieve(remote)['resources'] if jdata is None: return [] return [self._cast(r) for r in jdata if r['stored']]
[docs] def browse(self): remote = self.browsePattern.format(endpoint=self.endpoint) jdata = self._retrieve(remote) return [self._cast(r) for r in jdata if r['stored']]
[docs] def resource(self, id): remote = self.getPatternID.format(endpoint=self.endpoint, id=id) jdata = self._retrieve(remote) return self._cast(jdata)
[docs] def get(self, uri): remote = self.getPattern.format(endpoint=self.endpoint, uri=uri) headers = { 'Authorization': 'Token {token}'.format(token=self.token), } jdata = self._retrieve(remote) remoteContent = self.contentPattern.format( endpoint = self.endpoint, content_location = jdata['content_location'] ) responseContent = requests.get(remoteContent, allow_redirects=True, headers=headers) if responseContent.status_code != requests.codes.ok: raise RuntimeError('Error retrieving resource') textData = { 'title': jdata['name'], 'content': responseContent.text, 'content-type': response.headers['content-type'], } return textData
repositoryManagers = [ ('JARSManager', 'JARS'), ]