8000 custom exceptions and a persistent user for urlopen · ptarjan/python-oauth@d7af96a · GitHub
[go: up one dir, main page]

Skip to content

Commit d7af96a

Browse files
committed
custom exceptions and a persistent user for urlopen
1 parent 532ce92 commit d7af96a

File tree

1 file changed

+28
-13
lines changed

1 file changed

+28
-13
lines changed

oauth/helper.py

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
import time
99
import oauth
1010

11+
import logging
12+
13+
class RefreshException(Exception):
14+
pass
15+
class PermissionException(Exception):
16+
pass
17+
1118
class OAuthClient(oauth.OAuthClient):
1219
"""A client to help simplify the oauth pain"""
1320
signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1()
@@ -34,21 +41,24 @@ def access_token_url(self):
3441

3542
type = "unknown"
3643

37-
def fetch_token(self, oauth_request):
44+
def fetch_token(self, oauth_request, user):
3845
# returns OAuthToken
39-
response = self.urlopen(oauth_request.to_url())
46+
response = self.urlopen(oauth_request.to_url(), user)
4047
return oauth.OAuthToken.from_string(response.read())
4148

42-
def urlopen(self, url, old_url=None, user=None, *args, **kwargs):
49+
def urlopen(self, url, user, *args, **kwargs):
50+
logging.debug(url)
51+
# print "\n", url
4352
try :
4453
response = urllib2.urlopen(url)
4554
except urllib2.HTTPError, why :
4655
error = why.headers.get("www-authenticate", None)
47-
if why.code == 401 :
48-
if error and error.find("token_expired") != -1:
49-
if old_url and user:
50-
self.refresh(user)
51-
return self.fetch(old_url, user, *args, **kwargs)
56+
if error:
57+
if error.find("token_expired") != -1:
58+
self.refresh(user)
59+
raise RefreshException("New token aquired. Retry")
60+
if error.find("permission_denied") != -1:
61+
raise PermissionException("Permission denied. Probably revoked OAuth: %s" % url)
5262
why.msg += "\n%s\n%s\n%s" % (url, why.headers, "".join(why.readlines()))
5363
raise why
5464

@@ -62,7 +72,7 @@ def refresh(self, user):
6272
self.consumer, token=access_token, http_url=self.access_token_url
6373
)
6474
request.sign_request(self.signature_method_hmac_sha1, self.consumer, access_token)
65-
access_token = self.fetch_token(request)
75+
access_token = self.fetch_token(request, user)
6676
user.set_access_token(access_token)
6777
user.save()
6878
return True
@@ -85,9 +95,9 @@ def start(self, *args, **kwargs):
8595
self.consumer, callback=self.callback_url, http_url=self.request_token_url, parameters=kwargs
8696
)
8797
oauth_request.sign_request(self.signature_method_hmac_sha1, self.consumer, None)
88-
token = self.fetch_token(oauth_request)
8998

9099
user = self.db.User(type=self.type)
100+
token = self.fetch_token(oauth_request, user)
91101
user.set_request_token(token)
92102
user.save()
93103

@@ -105,11 +115,16 @@ def verify(self, user, token, verifier=None, *args, **kwargs):
105115
self.consumer, token=request_token, verifier=verifier, http_url=self.access_token_url, parameters=kwargs
106116
)
107117
request.sign_request(self.sign 92C3 ature_method_hmac_sha1, self.consumer, request_token)
108-
access_token = self.fetch_token(request)
118+
access_token = self.fetch_token(request, user)
109119
user.set_access_token(access_token)
110120
user.save()
111121
return True
112122

113123

114-
def fetch(self, url, user, *args, **kwargs):
115-
return self.urlopen(self.sign_url(url, user), url, user, *args, **kwargs)
124+
def fetch(self, url, user, tries=1, *args, **kwargs):
125+
try:
126+
return self.urlopen(self.sign_url(url, user), user, *args, **kwargs)
127+
except RefreshException, why:
128+
if tries == 0:
129+
raise why
130+
return self.fetch(url, user, tries=tries-1, *args, **kwargs)

0 commit comments

Comments
 (0)
0