Merge branch 'master' into with-dvcs
[redakcja.git] / apps / apiclient / __init__.py
1 import urllib
2
3 from django.utils import simplejson
4 import oauth2
5
6 from apiclient.models import OAuthConnection
7 from apiclient.settings import WL_CONSUMER_KEY, WL_CONSUMER_SECRET, WL_API_URL
8
9
10 if WL_CONSUMER_KEY and WL_CONSUMER_SECRET:
11     wl_consumer = oauth2.Consumer(WL_CONSUMER_KEY, WL_CONSUMER_SECRET)
12 else:
13     wl_consumer = None
14
15
16 class ApiError(BaseException):
17     pass
18
19
20 class NotAuthorizedError(BaseException):
21     pass
22
23
24 def api_call(user, path, data=None):
25     # what if not verified?
26     conn = OAuthConnection.get(user)
27     if not conn.access:
28         raise NotAuthorizedError("No WL authorization for user %s." % user)
29     token = oauth2.Token(conn.token, conn.token_secret)
30     client = oauth2.Client(wl_consumer, token)
31     if data is not None:
32         resp, content = client.request(
33                 "%s%s.json" % (WL_API_URL, path),
34                 method="POST",
35                 body=urllib.urlencode(data))
36     else:
37         resp, content = client.request(
38                 "%s%s.json" % (WL_API_URL, path))
39     status = resp['status']
40     if status == '200':
41         return simplejson.loads(content)
42     elif status.startswith('2'):
43         return
44     else:
45         raise ApiError("WL API call error")
46