Merge pull request #10 from codeofdusk/next-gen

Sounds tutorial refactor and docstring cleanup
This commit is contained in:
Manuel Cortez 2015-04-14 08:49:14 -05:00
commit c45a208cd6
4 changed files with 58 additions and 45 deletions

View File

@ -0,0 +1,11 @@
#Reverse sort, by Bill Dengler <codeofdusk@gmail.com> for use in TWBlue http://twblue.es
def invert_tuples(t):
"Invert a list of tuples, so that the 0th element becomes the -1th, and the -1th becomes the 0th."
res=[]
for i in t:
res.append(i[::-1])
return res
def reverse_sort(t):
"Sorts a list of tuples/lists by their last elements, not their first."
return invert_tuples(sorted(invert_tuples(t)))

View File

@ -4,6 +4,7 @@ import widgetUtils
import os import os
import paths import paths
import logging import logging
import reverse_sort
log = logging.getLogger("extra.SoundsTutorial.soundsTutorial") log = logging.getLogger("extra.SoundsTutorial.soundsTutorial")
import soundsTutorial_constants import soundsTutorial_constants
if platform.system() == "Windows": if platform.system() == "Windows":
@ -22,6 +23,8 @@ class soundsTutorial(object):
self.files = [] self.files = []
log.debug("Searching sound files...") log.debug("Searching sound files...")
[self.files.append(i[0]) for i in soundsTutorial_constants.actions] [self.files.append(i[0]) for i in soundsTutorial_constants.actions]
log.debug("Alphabetizing actions...")
actions=reverse_sort.reverse_sort(actions)
log.debug("Creating dialog...") log.debug("Creating dialog...")
self.dialog = UI.soundsTutorialDialog(self.actions) self.dialog = UI.soundsTutorialDialog(self.actions)
widgetUtils.connect_event(self.dialog.play, widgetUtils.BUTTON_PRESSED, self.on_play) widgetUtils.connect_event(self.dialog.play, widgetUtils.BUTTON_PRESSED, self.on_play)

View File

@ -1,25 +1,25 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
actions = [ ("audio", _(u"The tweet may contain a playable audio")), actions = [ ("audio", _(u"Audio tweet.")),
("create_timeline", _(u"A timeline has been created")), ("create_timeline", _(u"User-defined buffer created.")),
("delete_timeline", _(u"A timeline has been deleted")), ("delete_timeline", _(u"User-defined buffer destroied.")),
("dm_received", _(u"You've received a direct message")), ("dm_received", _(u"Direct message received.")),
("dm_sent", _(u"You've sent a direct message")), ("dm_sent", _(u"Direct message sent.")),
("error", _(u"A bug has happened")), ("error", _(u"Error.")),
("favourite", _(u"You've added a tweet to your favourites")), ("favourite", _(u"You favorited a tweet.")),
("favourites_timeline_updated", _(u"Someone's favourites have been updated")), ("favourites_timeline_updated", _(u"Someone's favourites have been updated.")),
("geo", _(u"The tweet has coordinates to determine its location")), ("geo", _(u"Geotweet.")),
("limit", _(u"There are no more tweets to read")), ("limit", _(u"Boundary reached.")),
("list_tweet", _(u"A list has a new tweet")), ("list_tweet", _(u"List updated.")),
("max_length", _(u"You can't add any more characters on the tweet")), ("max_length", _(u"Too many characters.")),
("mention_received", _(u"You've been mentioned ")), ("mention_received", _(u"You've been mentioned.")),
("new_event", _(u"A new event has happened")), ("new_event", _(u"New event.")),
("ready", _(u"TW Blue is ready ")), ("ready", _(u"Application is ready.")),
("reply_send", _(u"You've replied")), ("reply_send", _(u"You've replied publicly.")),
("retweet_send", _(u"You've retweeted")), ("retweet_send", _(u"You've retweeted.")),
("search_updated", _(u"A search has been updated")), ("search_updated", _(u"A search buffer has been updated.")),
("tweet_received", _(u"There's a new tweet in the main buffer")), ("tweet_received", _(u"New tweet in home buffer.")),
("tweet_send", _(u"You've sent a tweet")), ("tweet_send", _(u"You've sent a tweet.")),
("trends_updated", _(u"A trending topic buffer has been updated")), ("trends_updated", _(u"A trending topic buffer has been updated.")),
("tweet_timeline", _(u"There's a new tweet in a timeline")), ("tweet_timeline", _(u"New tweet in user-defined buffer.")),
("update_followers", _(u"You have a new follower")), ("update_followers", _(u"New follower.")),
("volume_changed", _(u"You've turned the volume up or down"))] ("volume_changed", _(u"Volume changed."))]

View File

@ -25,14 +25,14 @@ class Session(object):
def _require_login(fn): def _require_login(fn):
""" Decorator for checking if the user is logged (a twitter object has credentials) on twitter. """ Decorator for checking if the user is logged in(a twitter object has credentials) on twitter.
Some functions may need this to avoid make unneeded twitter API calls.""" Some functions may need this to avoid making unneeded twitter API calls."""
def f(self, *args, **kwargs): def f(self, *args, **kwargs):
if self.logged == True: if self.logged == True:
fn(self, *args, **kwargs) fn(self, *args, **kwargs)
else: else:
raise Exceptions.NotLoggedSessionError("You are not logged yet.") raise Exceptions.NotLoggedSessionError("You are not logged in yet.")
return f return f
def _require_configuration(fn): def _require_configuration(fn):
@ -48,10 +48,10 @@ class Session(object):
def order_buffer(self, name, data): def order_buffer(self, name, data):
""" Put the new items on the local database. """ Put the new items in the local database.
name str: The name for the buffer stored in the dictionary. name str: The name for the buffer stored in the dictionary.
data list: A list with tweets. data list: A list with tweets.
returns the number of items that has been added in this execution""" returns the number of items that have been added in this execution"""
num = 0 num = 0
if self.db.has_key(name) == False: if self.db.has_key(name) == False:
@ -68,7 +68,7 @@ class Session(object):
""" Put the new items on the local database. Useful for cursored buffers (followers, friends, users of a list and searches) """ Put the new items on the local database. Useful for cursored buffers (followers, friends, users of a list and searches)
name str: The name for the buffer stored in the dictionary. name str: The name for the buffer stored in the dictionary.
data list: A list with items and some information about cursors. data list: A list with items and some information about cursors.
returns the number of items that has been added in this execution""" returns the number of items that have been added in this execution"""
num = 0 num = 0
if self.db.has_key(name) == False: if self.db.has_key(name) == False:
@ -118,7 +118,7 @@ class Session(object):
@_require_configuration @_require_configuration
def login(self, verify_credentials=True): def login(self, verify_credentials=True):
""" Login in to twitter using credentials from settings. """ Log into twitter using credentials from settings.
if the user account isn't authorised, it needs to call self.authorise() before login.""" if the user account isn't authorised, it needs to call self.authorise() before login."""
if self.settings["twitter"]["user_key"] != None and self.settings["twitter"]["user_secret"] != None: if self.settings["twitter"]["user_key"] != None and self.settings["twitter"]["user_secret"] != None:
@ -134,7 +134,7 @@ class Session(object):
@_require_configuration @_require_configuration
def authorise(self): def authorise(self):
""" Authorises a Twitter account. This function needs to be called for each new session, after of self.get_configuration() and before of self.login()""" """ Authorises a Twitter account. This function needs to be called for each new session, after self.get_configuration() and before self.login()"""
if self.logged == True: if self.logged == True:
raise Exceptions.AlreadyAuthorisedError("The authorisation process is not needed at this time.") raise Exceptions.AlreadyAuthorisedError("The authorisation process is not needed at this time.")
@ -153,14 +153,14 @@ class Session(object):
def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs): def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs):
""" Make a call to the Twitter API. If there is a connectionError or another exception not related to Twitter, It will call to the method at least 25 times, waiting a while between calls. Useful for post methods. """ Make a call to the Twitter API. If there is a connectionError or another exception not related to Twitter, It will call the method again at least 25 times, waiting a while between calls. Useful for post methods.
If twitter returns an error, it will not call anymore the method. If twitter returns an error, it will not call the method anymore.
call_name str: The method to call call_name str: The method to call
action str: The thing what you are doing on twitter, it will be reported to the user if report_success is set to True. action str: What you are doing on twitter, it will be reported to the user if report_success is set to True.
for example "following @tw_blue2" will be reported as "following @tw_blue2 succeeded". for example "following @tw_blue2" will be reported as "following @tw_blue2 succeeded".
_sound str: a sound to play if the call is executed properly. _sound str: a sound to play if the call is executed properly.
report_success and report_failure bool: These are self explanatory. True or false. It's all. report_success and report_failure bool: These are self explanatory. True or False.
preexec_message str: A message to speak to the user while the call is doing the work, example: "try to follow to x user".""" preexec_message str: A message to speak to the user while the method is running, example: "trying to follow x user"."""
finished = False finished = False
tries = 0 tries = 0
@ -193,8 +193,8 @@ class Session(object):
@_require_login @_require_login
def get_favourites_timeline(self, name, *args, **kwargs): def get_favourites_timeline(self, name, *args, **kwargs):
""" Gets favourites for the authenticated user or a friend or follower or somewhat. """ Gets favourites for the authenticated user or a friend or follower.
name str: Name for store all in the database.""" name str: Name for storage in the database."""
tl = self.call_paged(self.twitter.twitter.get_favorites, *args, **kwargs) tl = self.call_paged(self.twitter.twitter.get_favorites, *args, **kwargs)
return self.order_buffer(name, tl) return self.order_buffer(name, tl)
@ -204,7 +204,7 @@ class Session(object):
""" Makes a call to the Twitter API methods several times. Useful for get methods. """ Makes a call to the Twitter API methods several times. Useful for get methods.
this function is needed for retrieving more than 200 items. this function is needed for retrieving more than 200 items.
update_function str: The function to call. This function must be child of self.twitter.twitter update_function str: The function to call. This function must be child of self.twitter.twitter
return a list with all items retrieved.""" returns a list with all items retrieved."""
max = int(self.settings["general"]["max_api_calls"])-1 max = int(self.settings["general"]["max_api_calls"])-1
results = [] results = []
@ -222,7 +222,6 @@ class Session(object):
def get_user_info(self): def get_user_info(self):
""" Retrieves some information required by TWBlue for setup.""" """ Retrieves some information required by TWBlue for setup."""
f = self.twitter.twitter.get_account_settings() f = self.twitter.twitter.get_account_settings()
sn = f["screen_name"] sn = f["screen_name"]
self.settings["twitter"]["user_name"] = sn self.settings["twitter"]["user_name"] = sn
@ -239,7 +238,7 @@ class Session(object):
@_require_login @_require_login
def get_lists(self): def get_lists(self):
""" Gets the lists that the user is suscribed.""" """ Gets the lists that the user is subscribed to and stores them in the database. Returns None."""
self.db["lists"] = self.twitter.twitter.show_lists(reverse=True) self.db["lists"] = self.twitter.twitter.show_lists(reverse=True)
@ -254,7 +253,7 @@ class Session(object):
def get_stream(self, name, function, *args, **kwargs): def get_stream(self, name, function, *args, **kwargs):
""" Retrieves the items for a regular stream. """ Retrieves the items for a regular stream.
name str: Name to save items on the database. name str: Name to save items to the database.
function str: A function to get the items.""" function str: A function to get the items."""
last_id = -1 last_id = -1
@ -272,11 +271,11 @@ class Session(object):
@_require_login @_require_login
def get_cursored_stream(self, name, function, items="users", *args, **kwargs): def get_cursored_stream(self, name, function, items="users", *args, **kwargs):
""" Gets items for API calls that requires using cursors to paginate the results. """ Gets items for API calls that require using cursors to paginate the results.
name str: Name to save it in the database. name str: Name to save it in the database.
function str: Function that provides the items. function str: Function that provides the items.
items: When the function returns the list with results, items will tell how the order function should be look. items: When the function returns the list with results, items will tell how the order function should be look.
for example get_followers_list returns a list and users are under list["users"], here the items should be point to "users".""" for example get_followers_list returns a list and users are under list["users"], here the items should point to "users"."""
items_ = [] items_ = []
try: try: