Jelajahi Sumber

refactor: tumblr.py, and unittest covering get_authorize_url function

mk200789 10 tahun lalu
induk
melakukan
df3ff3e277

+ 32 - 25
hackathon_starter/hackathon/scripts/tumblr.py

@@ -6,38 +6,44 @@ import re
 from bs4 import BeautifulSoup
 import urlparse
 import oauth2
-from django.conf import settings
+
+request_token_url   = 'http://www.tumblr.com/oauth/request_token'
+authorize_url       = 'http://www.tumblr.com/oauth/authorize'
+access_token_url    = 'http://www.tumblr.com/oauth/access_token'
+user_uri			= "http://api.tumblr.com/v2/user/info"
+blog_uri			= "http://api.tumblr.com/v2/blog/"
 
 class TumblrOauthClient(object):
-	request_token_url   = 'http://www.tumblr.com/oauth/request_token'
-	authorize_url       = 'http://www.tumblr.com/oauth/authorize'
-	access_token_url    = 'http://www.tumblr.com/oauth/access_token'
-	user_uri			= "http://api.tumblr.com/v2/user/info"
-	blog_uri			= "http://api.tumblr.com/v2/blog/"
-	
-	def __init__(self, consumer_key, consumer_secret, oauth_token='', oauth_token_secret='', oauth_verifier='', token=''):
+
+	token = None
+	oauth_token_secret = None
+	oauth_verifier = None
+
+
+	def __init__(self, consumer_key, consumer_secret, oauth_token =''):
 		self.consumer_key = consumer_key
-		self.cosnumer_secret = consumer_secret
+		self.consumer_secret = consumer_secret
 		self.consumer = oauth2.Consumer(consumer_key, consumer_secret)
-		self.token = token
 		self.oauth_token = oauth_token
-		self.oauth_token_secret = oauth_token_secret
-		self.oauth_verifier = oauth_verifier
+
 
 	def get_authorize_url(self):
 		client = oauth2.Client(self.consumer)
-		resp, content = client.request(self.request_token_url, "GET")
+		resp, content = client.request(request_token_url, "GET")
 
-		if int(resp['status']) != 200:
-			raise Exception("Invalid response %s." % resp['status'])
+		#if int(resp['status']) != 200:
+		#	raise Exception("Invalid response %s." % resp['status'])
 
 		#parse content
-		request_token = dict(urlparse.parse_qsl(content))
-		self.oauth_token = request_token['oauth_token']
-		self.oauth_token_secret = request_token['oauth_token_secret']
+		if not self.oauth_token:
+			request_token = dict(urlparse.parse_qsl(content))
+			self.oauth_token = request_token['oauth_token'] #'QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl'
+			self.oauth_token_secret = request_token['oauth_token_secret']#'u10SuRl2nzS8vFK4K7UPQexAvbIFBFrZBjA79XDlgoXFxv9ZhO'
 
-		#print authorize_url+"?oauth_token="+oauth_key+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
-		return self.authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
+		link = authorize_url+"?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
+		return link
+
+#"""
 
 	def get_access_token_url(self, oauth_verifier):
 		#print "verifier"
@@ -46,7 +52,7 @@ class TumblrOauthClient(object):
 		token.set_verifier(self.oauth_verifier)
 
 		client = oauth2.Client(self.consumer, token)
-		resp, content = client.request(self.access_token_url,"POST")
+		resp, content = client.request(access_token_url,"POST")
 
 		#print resp['status']
 
@@ -55,13 +61,13 @@ class TumblrOauthClient(object):
 
 		#set verified token
 		self.token = oauth2.Token(access_token['oauth_token'], access_token['oauth_token_secret'])
-		
+
 	
 	def getUserInfo(self):
 		''' Returns users information. '''
 		client = oauth2.Client(self.consumer, self.token)
 		#print client
-		resp, content = client.request(self.user_uri, "POST")
+		resp, content = client.request(user_uri, "POST")
 		if int(resp['status']) != 200:
 			raise Exception("Invalid response %s." % resp['status'])
 
@@ -74,7 +80,7 @@ class TumblrOauthClient(object):
 
 	def getBlogInfo(self, user):
 		''' Returns blogger's blog information '''
-		blog_info = self.blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
+		blog_info = blog_uri + user + ".tumblr.com/info?api_key="+self.consumer_key
 		req = requests.get(blog_info)
 		
 		if int(req.status_code) != 200:
@@ -140,4 +146,5 @@ class TumblrOauthClient(object):
 						text = soup.get_text()					
 						tagtext.append(text)
 		
-		return tagtext
+		return tagtext
+#"""

+ 25 - 28
hackathon_starter/hackathon/unittests/testtumblr.py

@@ -1,34 +1,31 @@
 import unittest
 from mock import Mock, patch, MagicMock
-from hackathon.scripts.tumblr import getBlogInfo
-import time
+from hackathon.scripts.tumblr import *
+import oauth2
+import urlparse
+from django.conf import settings
 
-class TumblrTests(unittest.TestCase):
-	def setUp(self):
-		self.blog_uri 			= 'http://api.tumblr.com/v2/blog/'
-		self.consumer_key 		= 'KrSbAc9cYLmIgVAn1D21FjRR97QWsutNMxkPDFBxo8CMWtMk4M'
-		self.consumer_secret 	= 'lKWMtL2Lj8zr5pY51PVqT8ugeoG0DjrdgoFewM0QTSyJ12jP8d'
-		self.user				= 'twitterthecomic'
+class TestTumblr(unittest.TestCase):
 
-	def testGetBlogInfo(self):
-		'''Test for tumblr.py getBlogInfo method '''
-		consumer_key = self.consumer_key
-		consumer_secret = self.consumer_secret
-		user = self.user
+	def setUp(self):
+		self.consumer_key = 'KrSbAc9cYLmIgVAn1D21FjRR97QWsutNMxkPDFBxo8CMWtMk4M'
+		self.consumer_secret = 'lKWMtL2Lj8zr5pY51PVqT8ugeoG0DjrdgoFewM0QTSyJ12jP8d'
+		self.consumer = oauth2.Consumer(key=self.consumer_key, secret=self.consumer_secret)
+		self.tumblrclient = TumblrOauthClient(self.consumer_key, self.consumer_secret, 'QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl')
+		self.authorize = self.tumblrclient.get_authorize_url()
 
-		# Construct url for blog info
-		self.blog_info = self.blog_uri + user + ".tumblr.com/info?api_key="+ consumer_key
+		
+	def test_init(self):
+		self.assertEqual(self.consumer.key, self.consumer_key)
+		self.assertEqual(self.consumer.secret, self.consumer_secret)
 
-		with patch('hackathon.scripts.tumblr.getBlogInfo') as mock_getBlogInfo:
-			# Mock the return value of this method
-			mock_getBlogInfo.return_value = {'meta': {'status': 200, 'msg': 'OK'}, 
-			'response': {'blog': {'ask_anon': False, 'submission_page_title': 'Submit A Tweet', 
-			'updated': 1413846741, 'description': 'Comics based on the greatest tweets of our generation. \nOrganized by <a href="https://twitter.com/VectorBelly">@VectorBelly</a>.', 
-			'title': 'Twitter: The Comic', 'url': 'http://twitterthecomic.tumblr.com/', 'ask_page_title': 'Submit A Tweet', 
-			'share_likes': False, 'posts': 146, 'is_nsfw': False, 'ask': False, 'name': 'twitterthecomic'}}}
-			jsonlist = mock_getBlogInfo.return_value
-			self.meta = jsonlist['meta']
-			self.response = jsonlist['response']
-			self.blog = self.response['blog']
-			self.blog['blog'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(self.blog['updated']))
-			self.assertEqual(getBlogInfo(user),self.blog)
+	def test_get_authorize_url(self):
+		self.client = oauth2.Client(self.consumer)
+		self.assertEqual(self.client.consumer, self.consumer)
+		with patch('hackathon.scripts.tumblr.TumblrOauthClient.get_authorize_url') as mock_get_authorize_url:
+			mock_get_authorize_url.return_value = "oauth_token=QBXdeeMKAnLzDbIG7dDNewTzRYyQoHZLbcn3bAFTCEFF5EXurl&oauth_token_secret=u10SuRl2nzS8vFK4K7UPQexAvbIFBFrZBjA79XDlgoXFxv9ZhO&oauth_callback_confirmed=true"
+			self.request_token = dict(urlparse.parse_qsl(mock_get_authorize_url.return_value))
+			self.oauth_token = self.request_token['oauth_token']
+			self.oauth_token_secret = self.request_token['oauth_token_secret']		
+			link = "http://www.tumblr.com/oauth/authorize?oauth_token="+self.oauth_token+"&redirect_uri=http%3A%2F%2Flocalhost%3A8000/hackathon/tumblr"
+			self.assertEqual(self.authorize,link )