Code cleanup, Update requests version

* No sense in setting self.auth twice
* Make self.client a requests.session to reuse headers and auth
* requests 0.13.2 dependency isn't needed, but doesn't hurt
This commit is contained in:
Mike Helmick 2012-06-29 12:19:37 -04:00
parent f4b2ebc40a
commit d864376816
2 changed files with 19 additions and 27 deletions

View file

@ -16,7 +16,7 @@ setup(
include_package_data=True, include_package_data=True,
# Package dependencies. # Package dependencies.
install_requires=['simplejson', 'requests>=0.13.0'], install_requires=['simplejson', 'requests>=0.13.2'],
# Metadata for PyPI. # Metadata for PyPI.
author='Ryan McGrath', author='Ryan McGrath',

View file

@ -113,25 +113,25 @@ class Twython(object):
self.callback_url = callback_url self.callback_url = callback_url
# If there's headers, set them, otherwise be an embarassing parent for their own good. # If there's headers, set them, otherwise be an embarassing parent for their own good.
self.headers = headers self.headers = headers or {'User-Agent': 'Twython v' + __version__}
if self.headers is None:
self.headers = {'User-agent': 'Twython Python Twitter Library v' + __version__}
self.client = None # Allow for unauthenticated requests
self.client = requests.session(proxies=proxies)
self.auth = None self.auth = None
if self.app_key is not None and self.app_secret is not None: if self.app_key is not None and self.app_secret is not None and \
self.oauth_token is None and self.oauth_token_secret is None:
self.auth = OAuth1(self.app_key, self.app_secret, self.auth = OAuth1(self.app_key, self.app_secret,
signature_type='auth_header') signature_type='auth_header')
if self.oauth_token is not None and self.oauth_token_secret is not None: if self.app_key is not None and self.app_secret is not None and \
self.oauth_token is not None and self.oauth_token_secret is not None:
self.auth = OAuth1(self.app_key, self.app_secret, self.auth = OAuth1(self.app_key, self.app_secret,
self.oauth_token, self.oauth_token_secret, self.oauth_token, self.oauth_token_secret,
signature_type='auth_header') signature_type='auth_header')
if self.client is None: if self.auth is not None:
# Allow unauthenticated requests to be made. self.client = requests.session(headers=self.headers, auth=self.auth, proxies=proxies)
self.client = requests.session(proxies=proxies)
# register available funcs to allow listing name when debugging. # register available funcs to allow listing name when debugging.
def setFunc(key): def setFunc(key):
@ -152,11 +152,7 @@ class Twython(object):
base_url + fn['url'] base_url + fn['url']
) )
method = fn['method'].lower() content = self._request(url, method=fn['method'], params=kwargs)
if not method in ('get', 'post'):
raise TwythonError('Method must be of GET or POST')
content = self._request(url, method=method, params=kwargs)
return content return content
@ -170,17 +166,13 @@ class Twython(object):
params = params or {} params = params or {}
# In the next release of requests after 0.13.1, we can get rid of this
# myargs variable and line 184, urlencoding the params and just
# pass params=params in the func()
myargs = {}
if method == 'get':
url = '%s?%s' % (url, urllib.urlencode(params))
else:
myargs = params
func = getattr(self.client, method) func = getattr(self.client, method)
response = func(url, data=myargs, files=files, headers=self.headers, auth=self.auth) if method == 'get':
# Still wasn't fixed in `requests` 0.13.2? :(
url = url + '?' + urllib.urlencode(params)
response = func(url)
else:
response = func(url, data=params, files=files)
content = response.content.decode('utf-8') content = response.content.decode('utf-8')
# create stash for last function intel # create stash for last function intel
@ -271,7 +263,7 @@ class Twython(object):
request_args['oauth_callback'] = self.callback_url request_args['oauth_callback'] = self.callback_url
req_url = self.request_token_url + '?' + urllib.urlencode(request_args) req_url = self.request_token_url + '?' + urllib.urlencode(request_args)
response = self.client.get(req_url, headers=self.headers, auth=self.auth) response = self.client.get(req_url)
if response.status_code != 200: if response.status_code != 200:
raise TwythonAuthError("Seems something couldn't be verified with your OAuth junk. Error: %s, Message: %s" % (response.status_code, response.content)) raise TwythonAuthError("Seems something couldn't be verified with your OAuth junk. Error: %s, Message: %s" % (response.status_code, response.content))
@ -297,7 +289,7 @@ class Twython(object):
def get_authorized_tokens(self): def get_authorized_tokens(self):
"""Returns authorized tokens after they go through the auth_url phase. """Returns authorized tokens after they go through the auth_url phase.
""" """
response = self.client.get(self.access_token_url, headers=self.headers, auth=self.auth) response = self.client.get(self.access_token_url)
authorized_tokens = dict(parse_qsl(response.content)) authorized_tokens = dict(parse_qsl(response.content))
if not authorized_tokens: if not authorized_tokens:
raise TwythonError('Unable to decode authorized tokens.') raise TwythonError('Unable to decode authorized tokens.')