Pep8 #333
2 changed files with 62 additions and 33 deletions
|
|
@ -27,29 +27,41 @@ warnings.simplefilter('always', TwythonDeprecationWarning) # For Python 2.7 >
|
||||||
|
|
||||||
class Twython(EndpointsMixin, object):
|
class Twython(EndpointsMixin, object):
|
||||||
def __init__(self, app_key=None, app_secret=None, oauth_token=None,
|
def __init__(self, app_key=None, app_secret=None, oauth_token=None,
|
||||||
oauth_token_secret=None, access_token=None, token_type='bearer',
|
oauth_token_secret=None, access_token=None,
|
||||||
oauth_version=1, api_version='1.1', client_args=None, auth_endpoint='authenticate'):
|
token_type='bearer', oauth_version=1, api_version='1.1',
|
||||||
"""Instantiates an instance of Twython. Takes optional parameters for authentication and such (see below).
|
client_args=None, auth_endpoint='authenticate'):
|
||||||
|
"""Instantiates an instance of Twython. Takes optional parameters for
|
||||||
|
authentication and such (see below).
|
||||||
|
|
||||||
:param app_key: (optional) Your applications key
|
:param app_key: (optional) Your applications key
|
||||||
:param app_secret: (optional) Your applications secret key
|
:param app_secret: (optional) Your applications secret key
|
||||||
:param oauth_token: (optional) When using **OAuth 1**, combined with oauth_token_secret to make authenticated calls
|
:param oauth_token: (optional) When using **OAuth 1**, combined with
|
||||||
:param oauth_token_secret: (optional) When using **OAuth 1** combined with oauth_token to make authenticated calls
|
oauth_token_secret to make authenticated calls
|
||||||
:param access_token: (optional) When using **OAuth 2**, provide a valid access token if you have one
|
:param oauth_token_secret: (optional) When using **OAuth 1** combined
|
||||||
:param token_type: (optional) When using **OAuth 2**, provide your token type. Default: bearer
|
with oauth_token to make authenticated calls
|
||||||
:param oauth_version: (optional) Choose which OAuth version to use. Default: 1
|
:param access_token: (optional) When using **OAuth 2**, provide a
|
||||||
:param api_version: (optional) Choose which Twitter API version to use. Default: 1.1
|
valid access token if you have one
|
||||||
|
:param token_type: (optional) When using **OAuth 2**, provide your
|
||||||
:param client_args: (optional) Accepts some requests Session parameters and some requests Request parameters.
|
token type. Default: bearer
|
||||||
See http://docs.python-requests.org/en/latest/api/#sessionapi and requests section below it for details.
|
:param oauth_version: (optional) Choose which OAuth version to use.
|
||||||
[ex. headers, proxies, verify(SSL verification)]
|
Default: 1
|
||||||
:param auth_endpoint: (optional) Lets you select which authentication endpoint will use your application.
|
:param api_version: (optional) Choose which Twitter API version to
|
||||||
This will allow the application to have DM access if the endpoint is 'authorize'.
|
use. Default: 1.1
|
||||||
Default: authenticate.
|
|
||||||
|
|
||||||
|
:param client_args: (optional) Accepts some requests Session parameters
|
||||||
|
and some requests Request parameters.
|
||||||
|
See http://docs.python-requests.org/en/latest/api/#sessionapi
|
||||||
|
and requests section below it for details.
|
||||||
|
[ex. headers, proxies, verify(SSL verification)]
|
||||||
|
:param auth_endpoint: (optional) Lets you select which authentication
|
||||||
|
endpoint will use your application.
|
||||||
|
This will allow the application to have DM access
|
||||||
|
if the endpoint is 'authorize'.
|
||||||
|
Default: authenticate.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# API urls, OAuth urls and API version; needed for hitting that there API.
|
# API urls, OAuth urls and API version; needed for hitting that there
|
||||||
|
# API.
|
||||||
self.api_version = api_version
|
self.api_version = api_version
|
||||||
self.api_url = 'https://api.twitter.com/%s'
|
self.api_url = 'https://api.twitter.com/%s'
|
||||||
|
|
||||||
|
|
@ -75,16 +87,18 @@ class Twython(EndpointsMixin, object):
|
||||||
|
|
||||||
self.client_args = client_args or {}
|
self.client_args = client_args or {}
|
||||||
default_headers = {'User-Agent': 'Twython v' + __version__}
|
default_headers = {'User-Agent': 'Twython v' + __version__}
|
||||||
if not 'headers' in self.client_args:
|
if 'headers' not in self.client_args:
|
||||||
# If they didn't set any headers, set our defaults for them
|
# If they didn't set any headers, set our defaults for them
|
||||||
self.client_args['headers'] = default_headers
|
self.client_args['headers'] = default_headers
|
||||||
elif 'User-Agent' not in self.client_args['headers']:
|
elif 'User-Agent' not in self.client_args['headers']:
|
||||||
# If they set headers, but didn't include User-Agent.. set it for them
|
# If they set headers, but didn't include User-Agent.. set
|
||||||
|
# it for them
|
||||||
self.client_args['headers'].update(default_headers)
|
self.client_args['headers'].update(default_headers)
|
||||||
|
|
||||||
# Generate OAuth authentication object for the request
|
# Generate OAuth authentication object for the request
|
||||||
# If no keys/tokens are passed to __init__, auth=None allows for
|
# If no keys/tokens are passed to __init__, auth=None allows for
|
||||||
# unauthenticated requests, although I think all v1.1 requests need auth
|
# unauthenticated requests, although I think all v1.1 requests
|
||||||
|
# need auth
|
||||||
auth = None
|
auth = None
|
||||||
if oauth_version == 1:
|
if oauth_version == 1:
|
||||||
# User Authentication is through OAuth 1
|
# User Authentication is through OAuth 1
|
||||||
|
|
@ -93,12 +107,14 @@ class Twython(EndpointsMixin, object):
|
||||||
auth = OAuth1(self.app_key, self.app_secret)
|
auth = OAuth1(self.app_key, self.app_secret)
|
||||||
|
|
||||||
if self.app_key is not None and self.app_secret is not None and \
|
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.oauth_token is not None and self.oauth_token_secret is \
|
||||||
|
not None:
|
||||||
auth = OAuth1(self.app_key, self.app_secret,
|
auth = OAuth1(self.app_key, self.app_secret,
|
||||||
self.oauth_token, self.oauth_token_secret)
|
self.oauth_token, self.oauth_token_secret)
|
||||||
elif oauth_version == 2 and self.access_token:
|
elif oauth_version == 2 and self.access_token:
|
||||||
# Application Authentication is through OAuth 2
|
# Application Authentication is through OAuth 2
|
||||||
token = {'token_type': token_type, 'access_token': self.access_token}
|
token = {'token_type': token_type,
|
||||||
|
'access_token': self.access_token}
|
||||||
auth = OAuth2(self.app_key, token=token)
|
auth = OAuth2(self.app_key, token=token)
|
||||||
|
|
||||||
self.client = requests.Session()
|
self.client = requests.Session()
|
||||||
|
|
@ -166,11 +182,14 @@ class Twython(EndpointsMixin, object):
|
||||||
|
|
||||||
ExceptionType = TwythonError
|
ExceptionType = TwythonError
|
||||||
if response.status_code == 429:
|
if response.status_code == 429:
|
||||||
# Twitter API 1.1, always return 429 when rate limit is exceeded
|
# Twitter API 1.1, always return 429 when
|
||||||
|
# rate limit is exceeded
|
||||||
ExceptionType = TwythonRateLimitError
|
ExceptionType = TwythonRateLimitError
|
||||||
elif response.status_code == 401 or 'Bad Authentication data' in error_message:
|
elif response.status_code == 401 or 'Bad Authentication data' \
|
||||||
|
in error_message:
|
||||||
# Twitter API 1.1, returns a 401 Unauthorized or
|
# Twitter API 1.1, returns a 401 Unauthorized or
|
||||||
# a 400 "Bad Authentication data" for invalid/expired app keys/user tokens
|
# a 400 "Bad Authentication data" for invalid/expired
|
||||||
|
# app keys/user tokens
|
||||||
ExceptionType = TwythonAuthError
|
ExceptionType = TwythonAuthError
|
||||||
|
|
||||||
raise ExceptionType(error_message,
|
raise ExceptionType(error_message,
|
||||||
|
|
|
||||||
|
|
@ -918,13 +918,23 @@ TWITTER_HTTP_STATUS_CODE = {
|
||||||
refused. An accompanying error message will explain why. \
|
refused. An accompanying error message will explain why. \
|
||||||
This code is used when requests are being denied due to \
|
This code is used when requests are being denied due to \
|
||||||
update limits.'),
|
update limits.'),
|
||||||
404: ('Not Found', 'The URI requested is invalid or the resource requested, such as a user, does not exists.'),
|
404: ('Not Found', 'The URI requested is invalid or the resource \
|
||||||
406: ('Not Acceptable', 'Returned by the Search API when an invalid format is specified in the request.'),
|
requested, such as a user, does not exists.'),
|
||||||
410: ('Gone', 'This resource is gone. Used to indicate that an API endpoint has been turned off.'),
|
406: ('Not Acceptable', 'Returned by the Search API when an \
|
||||||
422: ('Unprocessable Entity', 'Returned when an image uploaded to POST account/update_profile_banner is unable to be processed.'),
|
invalid format is specified in the request.'),
|
||||||
429: ('Too Many Requests', 'Returned in API v1.1 when a request cannot be served due to the application\'s rate limit having been exhausted for the resource.'),
|
410: ('Gone', 'This resource is gone. Used to indicate that an \
|
||||||
500: ('Internal Server Error', 'Something is broken. Please post to the group so the Twitter team can investigate.'),
|
API endpoint has been turned off.'),
|
||||||
|
422: ('Unprocessable Entity', 'Returned when an image uploaded to \
|
||||||
|
POST account/update_profile_banner is unable to be processed.'),
|
||||||
|
429: ('Too Many Requests', 'Returned in API v1.1 when a request cannot \
|
||||||
|
be served due to the application\'s rate limit having been \
|
||||||
|
exhausted for the resource.'),
|
||||||
|
500: ('Internal Server Error', 'Something is broken. Please post to the \
|
||||||
|
group so the Twitter team can investigate.'),
|
||||||
502: ('Bad Gateway', 'Twitter is down or being upgraded.'),
|
502: ('Bad Gateway', 'Twitter is down or being upgraded.'),
|
||||||
503: ('Service Unavailable', 'The Twitter servers are up, but overloaded with requests. Try again later.'),
|
503: ('Service Unavailable', 'The Twitter servers are up, but overloaded \
|
||||||
504: ('Gateway Timeout', 'The Twitter servers are up, but the request couldn\'t be serviced due to some failure within our stack. Try again later.'),
|
with requests. Try again later.'),
|
||||||
|
504: ('Gateway Timeout', 'The Twitter servers are up, but the request \
|
||||||
|
couldn\'t be serviced due to some failure within our stack. Try \
|
||||||
|
again later.'),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue