Removed bulkUserLookup & getProfileImageUrl, deprecating shortenUrl, raise TwythonDepWarnings in Python 2.7 >

This commit is contained in:
Mike Helmick 2013-04-22 21:29:07 -04:00
parent d4c19fc3a9
commit a451db43c1
5 changed files with 41 additions and 48 deletions

View file

@ -22,6 +22,9 @@ just define it
- Headers now always include the User-Agent as Twython vXX unless User-Agent is overwritten
- Removed senseless TwythonError thrown if method is not GET or POST, who cares -- if the user passes something other than GET or POST just let Twitter return the error that they messed up
- Removed conversion to unicode of (int, bool) params passed to a requests. ``requests`` isn't greedy about variables that can't be converted to unicode anymore
- Removed `bulkUserLookup` (please use `lookupUser` instead), removed `getProfileImageUrl` (will be completely removed from Twitter API on May 7th, 2013)
- Updated shortenUrl to actually work for those using it, but it is being deprecated since `requests` makes it easy for developers to implement their own url shortening in their app (see https://github.com/ryanmcgrath/twython/issues/184)
- Twython Deprecation Warnings will now be seen in shell when using Python 2.7 and greater
2.7.3 (2013-04-12)
++++++++++++++++++

5
twython/advisory.py Normal file
View file

@ -0,0 +1,5 @@
class TwythonDeprecationWarning(DeprecationWarning):
"""Custom DeprecationWarning to be raised when methods/variables are being deprecated in Twython.
Python 2.7 > ignores DeprecationWarning so we want to specifcally bubble up ONLY Twython Deprecation Warnings
"""
pass

View file

@ -13,13 +13,12 @@ try:
except ImportError:
import json
try:
from urlparse import parse_qsl
except ImportError:
from cgi import parse_qsl
if is_py2:
from urllib import urlencode, quote_plus
try:
from urlparse import parse_qsl
except ImportError:
from cgi import parse_qsl
builtin_str = str
bytes = str
@ -29,7 +28,7 @@ if is_py2:
elif is_py3:
from urllib.parse import urlencode, quote_plus
from urllib.parse import urlencode, quote_plus, parse_qsl
builtin_str = str
str = str

View file

@ -1,18 +1,18 @@
"""
A huge map of every Twitter API endpoint to a function definition in Twython.
A huge map of every Twitter API endpoint to a function definition in Twython.
Parameters that need to be embedded in the URL are treated with mustaches, e.g:
Parameters that need to be embedded in the URL are treated with mustaches, e.g:
{{version}}, etc
{{version}}, etc
When creating new endpoint definitions, keep in mind that the name of the mustache
will be replaced with the keyword that gets passed in to the function at call time.
When creating new endpoint definitions, keep in mind that the name of the mustache
will be replaced with the keyword that gets passed in to the function at call time.
i.e, in this case, if I pass version = 47 to any function, {{version}} will be replaced
with 47, instead of defaulting to 1.1 (said defaulting takes place at conversion time).
i.e, in this case, if I pass version = 47 to any function, {{version}} will be replaced
with 47, instead of defaulting to 1.1 (said defaulting takes place at conversion time).
This map is organized the order functions are documented at:
https://dev.twitter.com/docs/api/1.1
This map is organized the order functions are documented at:
https://dev.twitter.com/docs/api/1.1
"""
api_table = {

View file

@ -1,15 +1,17 @@
import re
import warnings
warnings.simplefilter('default') # For Python 2.7 >
import requests
from requests_oauthlib import OAuth1
from .advisory import TwythonDeprecationWarning
from .compat import json, urlencode, parse_qsl, quote_plus
from .endpoints import api_table
from .exceptions import TwythonError, TwythonAuthError, TwythonRateLimitError
from .version import __version__
warnings.simplefilter('always', TwythonDeprecationWarning) # For Python 2.7 >
class Twython(object):
def __init__(self, app_key=None, app_secret=None, oauth_token=None, oauth_token_secret=None,
@ -42,14 +44,14 @@ class Twython(object):
if twitter_token or twitter_secret:
warnings.warn(
'Instead of twitter_token or twitter_secret, please use app_key or app_secret (respectively).',
DeprecationWarning,
TwythonDeprecationWarning,
stacklevel=2
)
if callback_url:
warnings.warn(
'Please pass callback_url to the get_authentication_tokens method rather than Twython.__init__',
DeprecationWarning,
TwythonDeprecationWarning,
stacklevel=2
)
@ -267,7 +269,7 @@ class Twython(object):
# ------------------------------------------------------------------------------------------------------------------------
@staticmethod
def shortenURL(url_to_shorten, shortener='http://is.gd/api.php'):
def shortenURL(url_to_shorten, shortener='http://is.gd/create.php'):
"""Shortens url specified by url_to_shorten.
Note: Twitter automatically shortens all URLs behind their own custom t.co shortener now,
but we keep this here for anyone who was previously using it for alternative purposes. ;)
@ -276,11 +278,18 @@ class Twython(object):
:param shortener: (optional) In case you want to use a different
URL shortening service
"""
warnings.warn(
'With requests it\'s easy enough for a developer to implement url shortenting themselves. Please see: https://github.com/ryanmcgrath/twython/issues/184',
TwythonDeprecationWarning,
stacklevel=2
)
if shortener == '':
raise TwythonError('Please provide a URL shortening service.')
request = requests.get(shortener, params={
'query': url_to_shorten
'format': 'json',
'url': url_to_shorten
})
if request.status_code in [301, 201, 200]:
@ -290,7 +299,7 @@ class Twython(object):
@staticmethod
def constructApiURL(base_url, params):
return base_url + "?" + "&".join(["%s=%s" % (Twython.unicode2utf8(key), quote_plus(Twython.unicode2utf8(value))) for (key, value) in params.iteritems()])
return base_url + '?' + '&'.join(['%s=%s' % (Twython.unicode2utf8(key), quote_plus(Twython.unicode2utf8(value))) for (key, value) in params.iteritems()])
def searchGen(self, search_query, **kwargs):
""" Returns a generator of tweets that match a specified query.
@ -312,29 +321,14 @@ class Twython(object):
for tweet in content['results']:
yield tweet
if 'page' not in kwargs:
kwargs['page'] = 2
else:
try:
kwargs['page'] = int(kwargs['page'])
kwargs['page'] += 1
kwargs['page'] = str(kwargs['page'])
except TypeError:
raise TwythonError("searchGen() exited because page takes type str")
try:
kwargs['page'] = 2 if not 'page' in kwargs else (int(kwargs['page']) + 1)
except (TypeError, ValueError):
raise TwythonError('Unable to generate next page of search results, `page` is not a number.')
for tweet in self.searchGen(search_query, **kwargs):
yield tweet
def bulkUserLookup(self, **kwargs):
"""Stub for a method that has been deprecated, kept for now to raise errors
properly if people are relying on this (which they are...).
"""
warnings.warn(
"This function has been deprecated. Please migrate to .lookupUser() - params should be the same.",
DeprecationWarning,
stacklevel=2
)
# The following methods are apart from the other Account methods,
# because they rely on a whole multipart-data posting function set.
@ -407,14 +401,6 @@ class Twython(object):
###########################################################################
def getProfileImageUrl(self, username, size='normal', version='1'):
warnings.warn(
"This function has been deprecated. Twitter API v1.1 will not have a dedicated endpoint \
for this functionality.",
DeprecationWarning,
stacklevel=2
)
@staticmethod
def stream(data, callback):
"""A Streaming API endpoint, because requests (by Kenneth Reitz)