Merging recent changes over to the Twython3k build

This commit is contained in:
Ryan McGrath 2010-01-14 00:48:30 -05:00
parent 08c0200020
commit 3f5fceb38b

View file

@ -16,20 +16,14 @@ from urllib.parse import urlparse
from urllib.error import HTTPError from urllib.error import HTTPError
__author__ = "Ryan McGrath <ryan@venodesigns.net>" __author__ = "Ryan McGrath <ryan@venodesigns.net>"
__version__ = "0.9" __version__ = "1.0"
"""Twython - Easy Twitter utilities in Python""" """Twython - Easy Twitter utilities in Python"""
try: try:
import simplejson
except ImportError:
try:
import json as simplejson import json as simplejson
except ImportError: except ImportError:
try: raise Exception("Twython requires a json library to work. (Try http://www.undefined.org/python/ ?")
from django.utils import simplejson
except:
raise Exception("Twython requires the simplejson library (or Python 2.6) to work. http://www.undefined.org/python/")
class TwythonError(Exception): class TwythonError(Exception):
def __init__(self, msg, error_code=None): def __init__(self, msg, error_code=None):
@ -60,6 +54,7 @@ class setup:
Parameters: Parameters:
username - Your Twitter username, if you want Basic (HTTP) Authentication. username - Your Twitter username, if you want Basic (HTTP) Authentication.
password - Password for your twitter account, if you want Basic (HTTP) Authentication. password - Password for your twitter account, if you want Basic (HTTP) Authentication.
headers - User agent header.
proxy - An object detailing information, in case proxy use/authentication is required. Object passed should be something like... proxy - An object detailing information, in case proxy use/authentication is required. Object passed should be something like...
proxyobj = { proxyobj = {
@ -69,7 +64,6 @@ class setup:
"port": 87 "port": 87
} }
headers - User agent header.
version (number) - Twitter supports a "versioned" API as of Oct. 16th, 2009 - this defaults to 1, but can be overridden on a class and function-based basis. version (number) - Twitter supports a "versioned" API as of Oct. 16th, 2009 - this defaults to 1, but can be overridden on a class and function-based basis.
** Note: versioning is not currently used by search.twitter functions; when Twitter moves their junk, it'll be supported. ** Note: versioning is not currently used by search.twitter functions; when Twitter moves their junk, it'll be supported.
@ -586,12 +580,12 @@ class setup:
""" """
version = version or self.apiVersion version = version or self.apiVersion
try: try:
return simplejson.load(self.opener.open("http://api.twitter.com/%d/statuses/update.json?" % version, urllib.parse.urlencode({ postExt = urllib.parse.urlencode({"status": self.unicode2utf8(status)})
"status": self.unicode2utf8(status), if latitude is not None and longitude is not None:
"in_reply_to_status_id": in_reply_to_status_id, postExt += "&lat=%s&long=%s" % (latitude, longitude)
"lat": latitude, if in_reply_to_status_id is not None:
"long": longitude postExt += "&in_reply_to_status_id=%s" % repr(in_reply_to_status_id)
}))) return simplejson.load(self.opener.open("http://api.twitter.com/%d/statuses/update.json?" % version, postExt))
except HTTPError as e: except HTTPError as e:
raise TwythonError("updateStatus() failed with a %s error code." % repr(e.code), e.code) raise TwythonError("updateStatus() failed with a %s error code." % repr(e.code), e.code)
@ -608,7 +602,7 @@ class setup:
version = version or self.apiVersion version = version or self.apiVersion
if self.authenticated is True: if self.authenticated is True:
try: try:
return simplejson.load(self.opener.open("http://api.twitter.com/%d/status/destroy/%s.json" % (version, repr(id)), "DELETE")) return simplejson.load(self.opener.open("http://api.twitter.com/%d/statuses/destroy/%s.json?" % (version, id), "_method=DELETE"))
except HTTPError as e: except HTTPError as e:
raise TwythonError("destroyStatus() failed with a %s error code." % repr(e.code), e.code) raise TwythonError("destroyStatus() failed with a %s error code." % repr(e.code), e.code)
else: else:
@ -1607,7 +1601,7 @@ class setup:
version = version or self.apiVersion version = version or self.apiVersion
if self.authenticated is True: if self.authenticated is True:
try: try:
return simplejson.load(self.opener.open("http://api.twitter.com/%d/%s/%s/members.json" % (version, self.username, list_id), "_method=DELETE")) return simplejson.load(self.opener.open("http://api.twitter.com/%d/%s/%s/members.json" % (version, self.username, list_id), "_method=DELETE&id=%s" % repr(id)))
except HTTPError as e: except HTTPError as e:
raise TwythonError("getListMembers() failed with a %d error code." % e.code, e.code) raise TwythonError("getListMembers() failed with a %d error code." % e.code, e.code)
else: else: