Skip to content

Commit

Permalink
add working OAuth2 POST functionality + test
Browse files Browse the repository at this point in the history
  • Loading branch information
askedrelic committed Oct 9, 2012
1 parent 633c244 commit 89a5a9c
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 7 deletions.
21 changes: 14 additions & 7 deletions libgreader/auth.py
Expand Up @@ -332,17 +332,24 @@ def get(self, url, parameters=None):
except (ValueError, KeyError, IOError) as e:
return None

def post(self, url, postParameters=None, urlParameters={}):
def post(self, url, postParameters=None, urlParameters=None):
"""
Convenience method for requesting to google with proper cookies/params.
"""
if not self.access_token:
raise IOError("No authorized client available.")
urlParameters.update({'access_token': self.access_token, 'alt': 'json'})
getString = self.getParameters(urlParameters)
request = urllib2.Request(url + '?' + self.getParameters(parameters))
if not self.action_token:
raise IOError("Need to generate action token.")
if urlParameters is None:
urlParameters = {}
headers = {'Authorization': 'Bearer ' + self.access_token}
postParameters.update({'T':self.action_token})
postString = self.postParameters(postParameters)
request = urllib2.Request(url + '?' + self.getParameters(urlParameters), data=postString, headers=headers)
try:
response = urllib2.urlopen(request, data=postString)
toUnicode(response.read())
except (ValueError, KeyError, IOError):
response = urllib2.urlopen(request)
return toUnicode(response.read())
except (ValueError, KeyError, IOError) as e:
return None

class GAPDecoratorAuthMethod(AuthenticationMethod):
Expand Down
22 changes: 22 additions & 0 deletions tests/test_auth.py
Expand Up @@ -154,6 +154,28 @@ def test_full_auth_and_access_userdata(self):
self.assertEqual(dict, type(info))
self.assertEqual(firstname, info['userName'])

def test_oauth_subscribe(self):
auth = OAuth2Method(client_id, client_secret)
auth.setRedirectUri(redirect_url)
url = auth.buildAuthUrl()
token = automated_oauth2_approval(url)
auth.code = token
auth.setAccessToken()
auth.setActionToken()

reader = GoogleReader(auth)

slashdot = 'feed/http://rss.slashdot.org/Slashdot/slashdot'
#unsubscribe always return true; revert feedlist state
self.assertTrue(reader.unsubscribe(slashdot))
# now subscribe
self.assertTrue(reader.subscribe(slashdot))
# wait for server to update
import time
time.sleep(1)
reader.buildSubscriptionList()
# test subscribe successful
self.assertIn(slashdot, [x.id for x in reader.getSubscriptionList()])

if __name__ == '__main__':
unittest.main()

0 comments on commit 89a5a9c

Please sign in to comment.