X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/1a0d01d9cdbffcf9667562502c3d2e36e5a9fa5b..b9055c7fc8caed025fd28c12532bd462edb8c78d:/lib/wlapi.py diff --git a/lib/wlapi.py b/lib/wlapi.py deleted file mode 100644 index 3284211a..00000000 --- a/lib/wlapi.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -# -# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later. -# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. -# -""" - Abstraction over API for wolnelektury.pl -""" -import urllib2 -import functools -import django.utils.simplejson as json -import logging -logger = logging.getLogger("fnp.lib.wlapi") - - -class APICallException(Exception): - - def __init__(self, cause=None): - super(Exception, self).__init__() - self.cause = cause - - def __unicode__(self): - return u"%s, cause: %s" % (type(self).__name__, repr(self.cause)) - - def __str__(self): - return self.__unicode__().encode('utf-8') - - -def api_call(path, format="json"): - def wrapper(func): - - @functools.wraps(func) - def wrapped(self, *args, **kwargs): - generator = func(self, *args, **kwargs) - - data = generator.next() - - # prepare request - rq = urllib2.Request(self.base_url + path + ".json") - - # will send POST when there is data, GET otherwise - if data is not None: - rq.add_data(json.dumps(data)) - rq.add_header("Content-Type", "application/json") - - try: - anwser = json.load(self.opener.open(rq)) - return generator.send(anwser) - except StopIteration: - # by default, just return the anwser as a shorthand - return anwser - except urllib2.HTTPError, error: - return self._http_error(error) - except Exception, error: - return self._error(error) - return wrapped - - return wrapper - - -class WLAPI(object): - - def __init__(self, **config_dict): - self.base_url = config_dict['URL'] - self.auth_realm = config_dict['AUTH_REALM'] - self.auth_user = config_dict['AUTH_USER'] - - digest_handler = urllib2.HTTPDigestAuthHandler() - digest_handler.add_password( - realm=self.auth_realm, uri=self.base_url, - user=self.auth_user, passwd=config_dict['AUTH_PASSWD']) - - basic_handler = urllib2.HTTPBasicAuthHandler() - basic_handler.add_password( - realm=self.auth_realm, uri=self.base_url, - user=self.auth_user, passwd=config_dict['AUTH_PASSWD']) - - self.opener = urllib2.build_opener(digest_handler, basic_handler) - - def _http_error(self, error): - message = error.read() - logger.debug("HTTP ERROR: %s", message) - return self._error(message) - - def _error(self, error): - raise APICallException(error) - - @api_call("books") - def list_books(self): - yield - - @api_call("books") - def publish_book(self, document): - yield {"text": document.text, "compressed": False}