from tweepy.binder import bind_api
from tweepy.error import TweepError
-from tweepy.auth import BasicAuthHandler, OAuthHandler
from tweepy.parsers import *
self.retry_delay = retry_delay
self.retry_errors = retry_errors
- # not a good idea to touch these
- self._username = None
-
- @staticmethod
- def new(auth='basic', *args, **kargs):
- if auth == 'basic':
- return API(BasicAuthHandler(*args, **kargs))
- elif auth == 'oauth':
- return API(OAuthHandler(*args, **kargs))
- else:
- raise TweepError('Invalid auth type')
-
""" statuses/public_timeline
Returns the 20 most recent statuses from non-protected users who
See: API.get_user()
"""
def me(self):
- # if username not fetched, go get it...
- if self._username is None:
- if self.auth_handler is None:
- raise TweepError('Authentication required')
-
- try:
- user = bind_api(
- path = '/account/verify_credentials.json',
- parser = parse_user
- )(self)
- except TweepError, e:
- raise TweepError('Failed to fetch username: %s' % e)
-
- self._username = user.screen_name
-
- return self.get_user(screen_name=self._username)
+ return self.get_user(screen_name=self.auth_handler.get_username())
""" statuses/friends
try:
return bind_api(
path = '/account/verify_credentials.json',
- parser = parse_return_true,
+ parser = parse_user,
require_auth = True
)(self)
except TweepError:
except TweepError:
return False
+ """ Create list
+
+ Creates a new list for the authenticated user.
+
+ Parameters: name (required), mode
+ Returns: List
+ """
+ def create_list(self, *args, **kargs):
+ return bind_api(
+ path = '/%s/lists.json' % self.auth_handler.get_username(),
+ method = 'POST',
+ parser = parse_list,
+ allowed_param = ['name', 'mode'],
+ require_auth = True
+ )(self, *args, **kargs)
+
+ """ Update list
+
+ Updates the specified list.
+
+ Parameters: name (required), mode
+ Returns: List
+ """
+ def update_list(self, slug, *args, **kargs):
+ return bind_api(
+ path = '/%s/lists/%s.json' % (self.auth_handler.get_username, slug),
+ method = 'POST',
+ parser = parse_list,
+ allowed_param = ['name', 'mode'],
+ require_auth = True
+ )(self, *args, **kargs)
+
""" search
Returns tweets that match a specified query.
from tweepy import oauth
from tweepy.error import TweepError
+from tweepy.api import API
class AuthHandler(object):
def apply_auth(self, url, method, headers, parameters):
"""Apply authentication headers to request"""
- raise NotImplemented
+ raise NotImplementedError
+
+ def get_username(self):
+ """Return the username of the authenticated user"""
+ raise NotImplementedError
class BasicAuthHandler(AuthHandler):
def __init__(self, username, password):
+ self.username = username
self._b64up = base64.b64encode('%s:%s' % (username, password))
def apply_auth(self, url, method, headers, parameters):
headers['Authorization'] = 'Basic %s' % self._b64up
+ def get_username(self):
+ return self.username
+
class OAuthHandler(AuthHandler):
"""OAuth authentication handler"""
self.request_token = None
self.access_token = None
self.callback = callback
+ self.username = None
def apply_auth(self, url, method, headers, parameters):
request = oauth.OAuthRequest.from_consumer_and_token(
except Exception, e:
raise TweepError(e)
+ def get_username(self):
+ if self.username is None:
+ api = API(self)
+ user = api.verify_credentials()
+ if user:
+ self.username = user.screen_name
+ else:
+ raise TweepError("Unable to get username, invalid oauth token!")
+ return self.username
+