+# -*- 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 logging
logger = logging.getLogger("fnp.lib.wlapi")
+
class APICallException(Exception):
- pass
+ pass
+
def api_call(path, format="json"):
def wrapper(func):
-
+
@functools.wraps(func)
- def wrapped(self, *args, **kwargs):
+ 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_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
+ return anwser
except urllib2.HTTPError, error:
- return self._http_error(error)
+ return self._http_error(error)
except Exception, error:
- return self._error(error)
+ return self._error(error)
return wrapped
-
+
return wrapper
-
-
+
class WLAPI(object):
-
- def __init__(self, config_dict):
+
+ 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']
-
- auth_handler = urllib2.HTTPDigestAuthHandler();
+ self.auth_user = config_dict['AUTH_USER']
+
+ auth_handler = urllib2.HTTPDigestAuthHandler()
auth_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(auth_handler)
-
+
def _http_error(self, error):
return self._error()
-
+
def _error(self, error):
- raise APICallException(cause = error)
-
+ raise APICallException(cause=error)
+
@api_call("books")
def publish_book(self, document):
- yield {"text": document.text, "compressed": False}
-
-
\ No newline at end of file
+ yield {"text": document.text, "compressed": False}