diff --git a/twython/tango.py b/twython/twython.py similarity index 99% rename from twython/tango.py rename to twython/twython.py index aa731ae..2d37f50 100644 --- a/twython/tango.py +++ b/twython/twython.py @@ -90,13 +90,13 @@ class setup: # URL Shortening function huzzah def shortenURL(self, url_to_shorten, shortener = "http://is.gd/api.php", query = "longurl"): - try: + try: return urllib2.urlopen(shortener + "?" + urllib.urlencode({query: url_to_shorten})).read() except HTTPError, e: raise TangoError("shortenURL() failed with a %s error code." % `e.code`) def constructApiURL(self, base_url, params): - return base_url + "?" + "&".join(["%s=%s" %(key, value) for (key, value) in params.iteritems()]) + return base_url + "?" + "&".join(["%s=%s" %(key, value) for (key, value) in params.iteritems()]) def getRateLimitStatus(self, rate_for = "requestingIP"): try: diff --git a/twython/tango3k.py b/twython/twython3k.py similarity index 74% rename from twython/tango3k.py rename to twython/twython3k.py index 77f930e..fdcc081 100644 --- a/twython/tango3k.py +++ b/twython/twython3k.py @@ -1,7 +1,7 @@ #!/usr/bin/python """ - Tango is an up-to-date library for Python that wraps the Twitter API. + Twython is an up-to-date library for Python that wraps the Twitter API. Other Python Twitter libraries seem to have fallen a bit behind, and Twitter's API has evolved a bit. Here's hoping this helps. @@ -23,14 +23,14 @@ except ImportError: try: import json as simplejson except: - raise Exception("Tango requires a json library to work. http://www.undefined.org/python/") + raise Exception("Twython requires a json library to work. http://www.undefined.org/python/") try: import oauth except ImportError: pass -class TangoError(Exception): +class TwythonError(Exception): def __init__(self, msg, error_code=None): self.msg = msg if error_code == 400: @@ -38,7 +38,7 @@ class TangoError(Exception): def __str__(self): return repr(self.msg) -class APILimit(TangoError): +class APILimit(TwythonError): def __init__(self, msg): self.msg = msg def __str__(self): @@ -65,11 +65,13 @@ class setup: self.opener = urllib.request.build_opener(self.handler) if headers is not None: self.opener.addheaders = [('User-agent', headers)] + """ try: test_verify = simplejson.load(self.opener.open("http://twitter.com/account/verify_credentials.json")) self.authenticated = True except HTTPError as e: - raise TangoError("Authentication failed with your provided credentials. Try again? (%s failure)" % repr(e.code), e.code) + raise TwythonError("Authentication failed with your provided credentials. Try again? (%s failure)" % repr(e.code), e.code) + """ # OAuth functions; shortcuts for verifying the credentials. def fetch_response_oauth(self, oauth_request): @@ -89,7 +91,7 @@ class setup: try: return urllib.request.urlopen(shortener + "?" + urllib.urlencode({query: url_to_shorten})).read() except HTTPError as e: - raise TangoError("shortenURL() failed with a %s error code." % repr(e.code)) + raise TwythonError("shortenURL() failed with a %s error code." % repr(e.code)) def constructApiURL(self, base_url, params): return base_url + "?" + "&".join(["%s=%s" %(key, value) for (key, value) in params.items()]) @@ -102,15 +104,15 @@ class setup: if self.authenticated is True: return simplejson.load(self.opener.open("http://twitter.com/account/rate_limit_status.json")) else: - raise TangoError("You need to be authenticated to check a rate limit status on an account.") + raise TwythonError("You need to be authenticated to check a rate limit status on an account.") except HTTPError as e: - raise TangoError("It seems that there's something wrong. Twitter gave you a %s error code; are you doing something you shouldn't be?" % repr(e.code), e.code) + raise TwythonError("It seems that there's something wrong. Twitter gave you a %s error code; are you doing something you shouldn't be?" % repr(e.code), e.code) def getPublicTimeline(self): try: return simplejson.load(urllib.request.urlopen("http://twitter.com/statuses/public_timeline.json")) except HTTPError as e: - raise TangoError("getPublicTimeline() failed with a %s error code." % repr(e.code)) + raise TwythonError("getPublicTimeline() failed with a %s error code." % repr(e.code)) def getFriendsTimeline(self, **kwargs): if self.authenticated is True: @@ -118,9 +120,9 @@ class setup: friendsTimelineURL = self.constructApiURL("http://twitter.com/statuses/friends_timeline.json", kwargs) return simplejson.load(self.opener.open(friendsTimelineURL)) except HTTPError as e: - raise TangoError("getFriendsTimeline() failed with a %s error code." % repr(e.code)) + raise TwythonError("getFriendsTimeline() failed with a %s error code." % repr(e.code)) else: - raise TangoError("getFriendsTimeline() requires you to be authenticated.") + raise TwythonError("getFriendsTimeline() requires you to be authenticated.") def getUserTimeline(self, id = None, **kwargs): if id is not None and ("user_id" in kwargs) is False and ("screen_name" in kwargs) is False: @@ -136,7 +138,7 @@ class setup: else: return simplejson.load(urllib.request.urlopen(userTimelineURL)) except HTTPError as e: - raise TangoError("Failed with a %s error code. Does this user hide/protect their updates? If so, you'll need to authenticate and be their friend to get their timeline." + raise TwythonError("Failed with a %s error code. Does this user hide/protect their updates? If so, you'll need to authenticate and be their friend to get their timeline." % repr(e.code), e.code) def getUserMentions(self, **kwargs): @@ -145,9 +147,9 @@ class setup: mentionsFeedURL = self.constructApiURL("http://twitter.com/statuses/mentions.json", kwargs) return simplejson.load(self.opener.open(mentionsFeedURL)) except HTTPError as e: - raise TangoError("getUserMentions() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getUserMentions() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getUserMentions() requires you to be authenticated.") + raise TwythonError("getUserMentions() requires you to be authenticated.") def showStatus(self, id): try: @@ -156,28 +158,28 @@ class setup: else: return simplejson.load(urllib.request.urlopen("http://twitter.com/statuses/show/%s.json" % id)) except HTTPError as e: - raise TangoError("Failed with a %s error code. Does this user hide/protect their updates? You'll need to authenticate and be friends to get their timeline." + raise TwythonError("Failed with a %s error code. Does this user hide/protect their updates? You'll need to authenticate and be friends to get their timeline." % repr(e.code), e.code) def updateStatus(self, status, in_reply_to_status_id = None): if self.authenticated is True: if len(list(status)) > 140: - raise TangoError("This status message is over 140 characters. Trim it down!") + raise TwythonError("This status message is over 140 characters. Trim it down!") try: return simplejson.load(self.opener.open("http://twitter.com/statuses/update.json?", urllib.parse.urlencode({"status": status, "in_reply_to_status_id": in_reply_to_status_id}))) except HTTPError as e: - raise TangoError("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) else: - raise TangoError("updateStatus() requires you to be authenticated.") + raise TwythonError("updateStatus() requires you to be authenticated.") def destroyStatus(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/status/destroy/%s.json", "POST" % id)) except HTTPError as e: - raise TangoError("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: - raise TangoError("destroyStatus() requires you to be authenticated.") + raise TwythonError("destroyStatus() requires you to be authenticated.") def endSession(self): if self.authenticated is True: @@ -185,9 +187,9 @@ class setup: self.opener.open("http://twitter.com/account/end_session.json", "") self.authenticated = False except HTTPError as e: - raise TangoError("endSession failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("endSession failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("You can't end a session when you're not authenticated to begin with.") + raise TwythonError("You can't end a session when you're not authenticated to begin with.") def getDirectMessages(self, since_id = None, max_id = None, count = None, page = "1"): if self.authenticated is True: @@ -202,9 +204,9 @@ class setup: try: return simplejson.load(self.opener.open(apiURL)) except HTTPError as e: - raise TangoError("getDirectMessages() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getDirectMessages() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getDirectMessages() requires you to be authenticated.") + raise TwythonError("getDirectMessages() requires you to be authenticated.") def getSentMessages(self, since_id = None, max_id = None, count = None, page = "1"): if self.authenticated is True: @@ -219,9 +221,9 @@ class setup: try: return simplejson.load(self.opener.open(apiURL)) except HTTPError as e: - raise TangoError("getSentMessages() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getSentMessages() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getSentMessages() requires you to be authenticated.") + raise TwythonError("getSentMessages() requires you to be authenticated.") def sendDirectMessage(self, user, text): if self.authenticated is True: @@ -229,20 +231,20 @@ class setup: try: return self.opener.open("http://twitter.com/direct_messages/new.json", urllib.parse.urlencode({"user": user, "text": text})) except HTTPError as e: - raise TangoError("sendDirectMessage() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("sendDirectMessage() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("Your message must not be longer than 140 characters") + raise TwythonError("Your message must not be longer than 140 characters") else: - raise TangoError("You must be authenticated to send a new direct message.") + raise TwythonError("You must be authenticated to send a new direct message.") def destroyDirectMessage(self, id): if self.authenticated is True: try: return self.opener.open("http://twitter.com/direct_messages/destroy/%s.json" % id, "") except HTTPError as e: - raise TangoError("destroyDirectMessage() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("destroyDirectMessage() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("You must be authenticated to destroy a direct message.") + raise TwythonError("You must be authenticated to destroy a direct message.") def createFriendship(self, id = None, user_id = None, screen_name = None, follow = "false"): if self.authenticated is True: @@ -258,10 +260,10 @@ class setup: except HTTPError as e: # Rate limiting is done differently here for API reasons... if e.code == 403: - raise TangoError("You've hit the update limit for this method. Try again in 24 hours.") - raise TangoError("createFriendship() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("You've hit the update limit for this method. Try again in 24 hours.") + raise TwythonError("createFriendship() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("createFriendship() requires you to be authenticated.") + raise TwythonError("createFriendship() requires you to be authenticated.") def destroyFriendship(self, id = None, user_id = None, screen_name = None): if self.authenticated is True: @@ -275,36 +277,36 @@ class setup: try: return simplejson.load(self.opener.open(apiURL)) except HTTPError as e: - raise TangoError("destroyFriendship() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("destroyFriendship() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("destroyFriendship() requires you to be authenticated.") + raise TwythonError("destroyFriendship() requires you to be authenticated.") def checkIfFriendshipExists(self, user_a, user_b): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/friendships/exists.json", urllib.parse.urlencode({"user_a": user_a, "user_b": user_b}))) except HTTPError as e: - raise TangoError("checkIfFriendshipExists() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("checkIfFriendshipExists() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("checkIfFriendshipExists(), oddly, requires that you be authenticated.") + raise TwythonError("checkIfFriendshipExists(), oddly, requires that you be authenticated.") def updateDeliveryDevice(self, device_name = "none"): if self.authenticated is True: try: return self.opener.open("http://twitter.com/account/update_delivery_device.json?", urllib.parse.urlencode({"device": device_name})) except HTTPError as e: - raise TangoError("updateDeliveryDevice() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("updateDeliveryDevice() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("updateDeliveryDevice() requires you to be authenticated.") + raise TwythonError("updateDeliveryDevice() requires you to be authenticated.") def updateProfileColors(self, **kwargs): if self.authenticated is True: try: return self.opener.open(self.constructApiURL("http://twitter.com/account/update_profile_colors.json?", kwargs)) except HTTPError as e: - raise TangoError("updateProfileColors() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("updateProfileColors() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("updateProfileColors() requires you to be authenticated.") + raise TwythonError("updateProfileColors() requires you to be authenticated.") def updateProfile(self, name = None, email = None, url = None, location = None, description = None): if self.authenticated is True: @@ -315,7 +317,7 @@ class setup: updateProfileQueryString += "name=" + name useAmpersands = True else: - raise TangoError("Twitter has a character limit of 20 for all usernames. Try again.") + raise TwythonError("Twitter has a character limit of 20 for all usernames. Try again.") if email is not None and "@" in email: if len(list(email)) < 40: if useAmpersands is True: @@ -324,7 +326,7 @@ class setup: updateProfileQueryString += "email=" + email useAmpersands = True else: - raise TangoError("Twitter has a character limit of 40 for all email addresses, and the email address must be valid. Try again.") + raise TwythonError("Twitter has a character limit of 40 for all email addresses, and the email address must be valid. Try again.") if url is not None: if len(list(url)) < 100: if useAmpersands is True: @@ -333,7 +335,7 @@ class setup: updateProfileQueryString += urllib.parse.urlencode({"url": url}) useAmpersands = True else: - raise TangoError("Twitter has a character limit of 100 for all urls. Try again.") + raise TwythonError("Twitter has a character limit of 100 for all urls. Try again.") if location is not None: if len(list(location)) < 30: if useAmpersands is True: @@ -342,7 +344,7 @@ class setup: updateProfileQueryString += urllib.parse.urlencode({"location": location}) useAmpersands = True else: - raise TangoError("Twitter has a character limit of 30 for all locations. Try again.") + raise TwythonError("Twitter has a character limit of 30 for all locations. Try again.") if description is not None: if len(list(description)) < 160: if useAmpersands is True: @@ -350,42 +352,42 @@ class setup: else: updateProfileQueryString += urllib.parse.urlencode({"description": description}) else: - raise TangoError("Twitter has a character limit of 160 for all descriptions. Try again.") + raise TwythonError("Twitter has a character limit of 160 for all descriptions. Try again.") if updateProfileQueryString != "": try: return self.opener.open("http://twitter.com/account/update_profile.json?", updateProfileQueryString) except HTTPError as e: - raise TangoError("updateProfile() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("updateProfile() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("updateProfile() requires you to be authenticated.") + raise TwythonError("updateProfile() requires you to be authenticated.") def getFavorites(self, page = "1"): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/favorites.json?page=" + page)) except HTTPError as e: - raise TangoError("getFavorites() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getFavorites() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getFavorites() requires you to be authenticated.") + raise TwythonError("getFavorites() requires you to be authenticated.") def createFavorite(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/favorites/create/" + id + ".json", "")) except HTTPError as e: - raise TangoError("createFavorite() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("createFavorite() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("createFavorite() requires you to be authenticated.") + raise TwythonError("createFavorite() requires you to be authenticated.") def destroyFavorite(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/favorites/destroy/" + id + ".json", "")) except HTTPError as e: - raise TangoError("destroyFavorite() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("destroyFavorite() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("destroyFavorite() requires you to be authenticated.") + raise TwythonError("destroyFavorite() requires you to be authenticated.") def notificationFollow(self, id = None, user_id = None, screen_name = None): if self.authenticated is True: @@ -399,9 +401,9 @@ class setup: try: return simplejson.load(self.opener.open(apiURL, "")) except HTTPError as e: - raise TangoError("notificationFollow() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("notificationFollow() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("notificationFollow() requires you to be authenticated.") + raise TwythonError("notificationFollow() requires you to be authenticated.") def notificationLeave(self, id = None, user_id = None, screen_name = None): if self.authenticated is True: @@ -415,9 +417,9 @@ class setup: try: return simplejson.load(self.opener.open(apiURL, "")) except HTTPError as e: - raise TangoError("notificationLeave() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("notificationLeave() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("notificationLeave() requires you to be authenticated.") + raise TwythonError("notificationLeave() requires you to be authenticated.") def getFriendsIDs(self, id = None, user_id = None, screen_name = None, page = "1"): apiURL = "" @@ -430,7 +432,7 @@ class setup: try: return simplejson.load(urllib.request.urlopen(apiURL)) except HTTPError as e: - raise TangoError("getFriendsIDs() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getFriendsIDs() failed with a %s error code." % repr(e.code), e.code) def getFollowersIDs(self, id = None, user_id = None, screen_name = None, page = "1"): apiURL = "" @@ -443,25 +445,25 @@ class setup: try: return simplejson.load(urllib.request.urlopen(apiURL)) except HTTPError as e: - raise TangoError("getFollowersIDs() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getFollowersIDs() failed with a %s error code." % repr(e.code), e.code) def createBlock(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/blocks/create/" + id + ".json", "")) except HTTPError as e: - raise TangoError("createBlock() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("createBlock() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("createBlock() requires you to be authenticated.") + raise TwythonError("createBlock() requires you to be authenticated.") def destroyBlock(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/blocks/destroy/" + id + ".json", "")) except HTTPError as e: - raise TangoError("destroyBlock() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("destroyBlock() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("destroyBlock() requires you to be authenticated.") + raise TwythonError("destroyBlock() requires you to be authenticated.") def checkIfBlockExists(self, id = None, user_id = None, screen_name = None): apiURL = "" @@ -474,32 +476,32 @@ class setup: try: return simplejson.load(urllib.request.urlopen(apiURL)) except HTTPError as e: - raise TangoError("checkIfBlockExists() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("checkIfBlockExists() failed with a %s error code." % repr(e.code), e.code) def getBlocking(self, page = "1"): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/blocks/blocking.json?page=" + page)) except HTTPError as e: - raise TangoError("getBlocking() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getBlocking() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getBlocking() requires you to be authenticated") + raise TwythonError("getBlocking() requires you to be authenticated") def getBlockedIDs(self): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/blocks/blocking/ids.json")) except HTTPError as e: - raise TangoError("getBlockedIDs() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getBlockedIDs() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getBlockedIDs() requires you to be authenticated.") + raise TwythonError("getBlockedIDs() requires you to be authenticated.") def searchTwitter(self, search_query, **kwargs): searchURL = self.constructApiURL("http://search.twitter.com/search.json", kwargs) + "&" + urllib.parse.urlencode({"q": search_query}) try: return simplejson.load(urllib.request.urlopen(searchURL)) except HTTPError as e: - raise TangoError("getSearchTimeline() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getSearchTimeline() failed with a %s error code." % repr(e.code), e.code) def getCurrentTrends(self, excludeHashTags = False): apiURL = "http://search.twitter.com/trends/current.json" @@ -508,7 +510,7 @@ class setup: try: return simplejson.load(urllib.urlopen(apiURL)) except HTTPError as e: - raise TangoError("getCurrentTrends() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getCurrentTrends() failed with a %s error code." % repr(e.code), e.code) def getDailyTrends(self, date = None, exclude = False): apiURL = "http://search.twitter.com/trends/daily.json" @@ -524,7 +526,7 @@ class setup: try: return simplejson.load(urllib.urlopen(apiURL)) except HTTPError as e: - raise TangoError("getDailyTrends() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getDailyTrends() failed with a %s error code." % repr(e.code), e.code) def getWeeklyTrends(self, date = None, exclude = False): apiURL = "http://search.twitter.com/trends/daily.json" @@ -540,43 +542,43 @@ class setup: try: return simplejson.load(urllib.urlopen(apiURL)) except HTTPError as e: - raise TangoError("getWeeklyTrends() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getWeeklyTrends() failed with a %s error code." % repr(e.code), e.code) def getSavedSearches(self): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/saved_searches.json")) except HTTPError as e: - raise TangoError("getSavedSearches() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("getSavedSearches() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("getSavedSearches() requires you to be authenticated.") + raise TwythonError("getSavedSearches() requires you to be authenticated.") def showSavedSearch(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/saved_searches/show/" + id + ".json")) except HTTPError as e: - raise TangoError("showSavedSearch() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("showSavedSearch() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("showSavedSearch() requires you to be authenticated.") + raise TwythonError("showSavedSearch() requires you to be authenticated.") def createSavedSearch(self, query): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/saved_searches/create.json?query=" + query, "")) except HTTPError as e: - raise TangoError("createSavedSearch() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("createSavedSearch() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("createSavedSearch() requires you to be authenticated.") + raise TwythonError("createSavedSearch() requires you to be authenticated.") def destroySavedSearch(self, id): if self.authenticated is True: try: return simplejson.load(self.opener.open("http://twitter.com/saved_searches/destroy/" + id + ".json", "")) except HTTPError as e: - raise TangoError("destroySavedSearch() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("destroySavedSearch() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("destroySavedSearch() requires you to be authenticated.") + raise TwythonError("destroySavedSearch() requires you to be authenticated.") # The following methods are apart from the other Account methods, because they rely on a whole multipart-data posting function set. def updateProfileBackgroundImage(self, filename, tile="true"): @@ -589,9 +591,9 @@ class setup: r = urllib.request.Request("http://twitter.com/account/update_profile_background_image.json?tile=" + tile, body, headers) return self.opener.open(r).read() except HTTPError as e: - raise TangoError("updateProfileBackgroundImage() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("updateProfileBackgroundImage() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("You realize you need to be authenticated to change a background image, right?") + raise TwythonError("You realize you need to be authenticated to change a background image, right?") def updateProfileImage(self, filename): if self.authenticated is True: @@ -603,9 +605,9 @@ class setup: r = urllib.request.Request("http://twitter.com/account/update_profile_image.json", body, headers) return self.opener.open(r).read() except HTTPError as e: - raise TangoError("updateProfileImage() failed with a %s error code." % repr(e.code), e.code) + raise TwythonError("updateProfileImage() failed with a %s error code." % repr(e.code), e.code) else: - raise TangoError("You realize you need to be authenticated to change a profile image, right?") + raise TwythonError("You realize you need to be authenticated to change a profile image, right?") def encode_multipart_formdata(self, fields, files): BOUNDARY = mimetools.choose_boundary()