# Load Lists index
def load(self):
if self.memberships:
- data = self.twitter.api.lists_memberships(self.user, cursor = self._cursor)
+ data = self.twitter.api_wrapper(self.twitter.api.lists_memberships, self.user, cursor = self._cursor)
lists = data["lists"]
else:
- data = self.twitter.api.lists_subscriptions(self.user, cursor = self._cursor)
+ data = self.twitter.api_wrapper(self.twitter.api.lists_subscriptions, self.user, cursor = self._cursor)
lists = data["lists"]
# get all my lists if first load
c = -1
mylists = list()
while c != 0:
- mydata = self.twitter.api.lists_index(self.user, cursor = c)
+ mydata = self.twitter.api_wrapper(self.twitter.api.lists_index, self.user, cursor = c)
mylists.extend(mydata["lists"])
c = int(mydata["next_cursor"])
lists[0:0] = mylists
# Retweet menu clicked
def on_menuitem_retweet_activate(self, memuitem):
status = self.get_selected_status()
- self.twitter.api.status_retweet(status.id)
+ self.twitter.api_wrapper(self.twitter.api.status_retweet, status.id)
# Retweet with comment menu clicked
def on_menuitem_reteet_with_comment_activate(self, memuitem):
# favorite
def on_menuitem_fav_activate(self, menuitem):
status = self.get_selected_status()
- self.twitter.api.favorite_create(status.id)
+ self.twitter.api_wrapper(self.twitter.api.favorite_create, status.id)
# Destroy status
def on_menuitem_destroy_activate(self, menuitem):
status = self.get_selected_status()
- self.twitter.api.status_destroy(status.id)
+ self.twitter.api_wrapper(self.twitter.api.status_destroy, status.id)
########################################
# Timeline menu Event
def get_following_followers(self):
# Get followers
- self.followers.update([int(i) for i in self.api.followers_ids()])
- self.following.update([int(i) for i in self.api.friends_ids()])
+ self.followers.update([int(i) for i in self.api_wrapper(self.api.followers_ids)])
+ self.following.update([int(i) for i in self.api_wrapper(self.api.friends_ids)])
def create_timeline(self, method, interval, counts, args = (), kwargs = {}):
# Add New Timeline Thread
def get_statuses(self, ids):
return tuple(self.statuses[i] for i in sorted(tuple(ids), reverse=True))
+ def api_wrapper(self, method, *args, **kwargs):
+ for i in range(3):
+ try:
+ response = None
+ response = method(*args, **kwargs)
+ break
+ except urllib2.HTTPError, e:
+ if e.code == 400:
+ print >>sys.stderr, "[Error] Rate Limitting %s (%s)" % (e, method.func_name)
+ break
+ elif e.code == 403:
+ print >>sys.stderr, "[Error] Access Denied %s (%s)" % (e, method.func_name)
+ break
+ elif e.code == 404:
+ print >>sys.stderr, "[Error] Not Found %s (%s)" % (e, method.func_name)
+ break
+
+ if i >= 3:
+ self.on_twitterapi_error(self, e)
+ print >>sys.stderr, "[Error] %d: TwitterAPI %s (%s)" % (i, e, method.func_name)
+ time.sleep(5)
+ except socket.timeout:
+ print >>sys.stderr, "[Error] %d: TwitterAPI timeout (%s)" % (i, method.func_name)
+ except Exception, e:
+ print >>sys.stderr, "[Error] %d: TwitterAPI %s (%s)" % (i, e, method.func_name)
+
+ return response
+
def status_update(self, status, reply_to = None, footer = ""):
if reply_to != None:
- self.api.status_update(status, in_reply_to_status_id = reply_to)
+ self.api_wrapper(self.api.status_update, status, in_reply_to_status_id = reply_to)
else:
if footer != "": status = u"%s %s" % (status, footer)
- self.api.status_update(status)
+ self.api_wrapper(self.api.status_update, status)
+
+ def on_twitterapi_error(self, method, e): pass
# Timeline Thread
class TimelineThread(threading.Thread):
def refresh_timeline(self):
for i in range(3):
- statuses = None
-
try:
+ statuses = None
# Get Timeline
statuses = self.api_method(*self.args, **self.kwargs)
self.on_timeline_refresh()
break
- except urllib2.HTTPError, e:
- print "[Error] TwitterAPI %s (%s)" % (e, self.api_method.func_name)
- self.on_twitterapi_error(self, e)
+ except urllib2.HTTPError, e:
+ if i >= 3:
+ self.on_twitterapi_error(self, e)
+ print >>sys.stderr, "[Error] %d: TwitterAPI %s (%s)" % (i, e, self.api_method.func_name)
time.sleep(5)
except socket.timeout:
- print "[Error] TwitterAPI timeout (%s)" % (self.api_method.func_name)
+ print >>sys.stderr, "[Error] %d: TwitterAPI timeout (%s)" % (i, self.api_method.func_name)
except Exception, e:
- print "[Error] TwitterAPI %s (%s)" % (e, self.api_method.func_name)
+ print >>sys.stderr, "[Error] %d: TwitterAPI %s (%s)" % (i, e, self.api_method.func_name)
return statuses
def on_timeline_refresh(self): pass
def reloadEventHandler(self): pass
- def on_twitterapi_error(self, timeline, e): pass
follow = button.get_active()
if follow:
- self.twitter.api.friends_create(uid)
+ self.twitter.api_wrapper(self.twitter.api.friends_create, uid)
button.set_image(gtk.image_new_from_stock("gtk-apply", gtk.ICON_SIZE_BUTTON))
button.set_label("Following")
self.twitter.following.add(uid)
else:
- self.twitter.api.friends_destroy(uid)
+ self.twitter.api_wrapper(self.twitter.api.friends_destroy, uid)
button.set_image(gtk.image_new_from_stock("gtk-add", gtk.ICON_SIZE_BUTTON))
button.set_label("Follow")
self.twitter.following.remove(uid)