CLB_WINDOW_MENU = 'window_menu' CLB_WINDOW_SELECT_GROUP = 'wdwsel_gr' CLB_WINDOW_SELECT_DISCIPLINE = 'wdwsel_ds' CONST_TXT_MENU = 'text:menu' CONST_TXT_LESSON_BYDAY = 'text:lesson:byday' CONST_TXT_LESSON_BYDATE = 'text:lesson:bydate' CONST_TXT_LESSON_LAB = 'text:lesson:lab' CONST_TXT_LAB_NOLABS = 'text:nolabs' CONST_TXT_LESSON_NOLESSONS = 'text:no_lessons' CONST_TXT_BACK = 'text:back' CONST_TXT_HELP = 'text:help' CONST_TXT_SELECT_GROUP = 'text:select_group' CONST_TXT_SELECT_DISCIPLINE = 'text:select_discipline' datastore = DataStore() def serialize_path(route, args=[]): items = [route] items.extend( map(lambda x:str(x), args) ) return ':'.join( items ) def deserialize_path(callback_query): path = callback_query.data items = path.split(":") return items[0], items[1:] def window_start(bot, update): # print word("{say} world {say}", {'say': 'hello', 'unknown': '1'}) # logging.info(update) user_id = update.message.chat.id
def __init__(self, *args, **kwargs): self.storage = DataStore()
def __init__(self, *args, **kwargs): self.storage = DataStore() self.platform = Platform()
class Command(object): def __init__(self, *args, **kwargs): self.storage = DataStore() def _app_string(self): return colored.cyan('DoIt!') def overview(self): return self.show(None, None) def show(self, major, minor): tasks = self.storage.get_all_tasks() pending_tasks = [] done_tasks = [] for i, task in enumerate(tasks): if task.get('state') == 'done': done_tasks.append((i, task)) else: pending_tasks.append((i, task)) with indent(INDENT): if len(pending_tasks) > 0: puts('Here\'s what you still need to do:') with indent(INDENT): for task in pending_tasks: puts('({}): {}'.format(task[0], task[1].get('text'))) if len(done_tasks) > 0: puts('\n\n') if len(done_tasks) > 0: puts ('Here\'s what you\'ve accomplished so far:') with indent(INDENT): for task in done_tasks: puts('({}): {}'.format(task[0], task[1].get('text'))) def add(self, major, minor): new_task_index = self.storage.add_task(major) with indent(INDENT): puts('Got it. You need to {}. This has been assigned #{}.'.format(major[0].lower() + major[1:], new_task_index)) def finish(self, task_number): index = self.storage.complete_task(int(task_number)) task = self.storage.get_task(index) with indent(INDENT): puts('Awesome! You\'re done with {}. High-five!'.format(task.get('text')[0].lower() + task.get('text')[1:])) def delete(self, task_number): task = self.storage.get_task(int(task_number)) response = raw_input('Are you sure you want to delete "({}): {}"? Y/N: '.format(task_number, task.get('text'))) if response.lower().startswith('y'): self.storage.delete_task(int(task_number)) with indent(INDENT): puts('Alright, looks like you won\'t {}"'.format(task.get('text')[0].lower(), task.get('text')[1:])) def flush(self): self.storage.delete_done_tasks() with indent(INDENT): puts("Nice. Totally cleaned up your done tasks.") def done(self): tasks = self.storage.get_done_tasks() with indent(INDENT): for task in tasks: puts('({}): {}'.format(task[0], task[1].get('text'))) def execute(self): args = clint.Args() command = args.get(0) major = args.get(1) minor = args.get(2) if not command: return self.overview() self.delegate(command, major, minor) def delegate(self, command, major, minor): if command == 'show': return self.show(major, minor) elif command == 'help' or command[0] == '-': return self.help() elif command == 'add': return self.add(major, minor) elif command == 'finish': return self.finish(major) elif command == 'done': return self.done() elif command == 'flush': return self.flush() elif command == 'delete': return self.delete(major) def empty(self): text = ''' You have no tasks. You can add some like this: $ doit add "Write a sweet to-do list" Show your tasks with: $ doit show You have 1 task! (1) Write a sweet to-do list Complete it like this: $ doit finish 1 Are you sure you want to finish "Write a sweet to-do list"? (Y/N) Y Done. "Write a sweet to-do list" is finished. ''' print textwrap.dedent(text) def help(self): text = ''' ==== DoIt : Help ============================================= doit show all of your tasks doit show also show all of your tasks doit help show this help message doit add <text> create a new task with the text doit finish <taskno> finish task with that number doit delete <taskno> delete task with that number doit done show finished tasks doit flush delete all finished tasks ============================================================== ''' with indent(INDENT): puts(textwrap.dedent(text))
class Command(object): def __init__(self, *args, **kwargs): self.storage = DataStore() self.platform = Platform() def _app_string(self): return colored.cyan('Bam!') def all(self): lists = self.storage.get_all_lists() for list_name, values in lists.iteritems(): with indent(INDENT): puts(list_name) for k, v in values.iteritems(): with indent(INDENT): puts('{}:\t\t{}'.format(k, v)) def overview(self): lists = self.storage.get_all_lists() if lists: for list_name, values in lists.iteritems(): with indent(INDENT): puts("{} ({})".format(list_name, len(values))) else: self.help() def create_list(self, list_name, item_name=None, item_value=None): self.storage.create_list(list_name) print '{} Created a new list called {}.'.format( self._app_string(), colored.yellow(list_name) ) if item_name and item_value: self.add_item(list_name, item_name, item_value) def detail_list(self, list_name): if self.storage.list_exists(list_name): for k, v in self.storage.get_list(list_name).iteritems(): with indent(INDENT_LARGE): puts('{}:\t\t{}'.format(k, v)) else: print 'Cannot find list "{}".'.format(list_name) def delete_list(self, list_name): answer = raw_input( "You sure you want to delete everything in {}? (y/n): ".format( colored.yellow(list_name)) ) if answer.strip().lower() == 'y': self.storage.delete_list(list_name) print "{} Deleted all your {}.".format( self._app_string(), colored.yellow(list_name) ) else: print "Just kidding then." def add_item(self, list_name, name, value): self.storage.add_item(list_name, name, value) print '{} {} in {} is {}. Got it.'.format( self._app_string(), colored.yellow(name), colored.yellow(list_name), colored.yellow(value) ) def search_list_for_item(self, list_name, name): value = self.storage.get_item(name, list_name=list_name) print "{} We just copied {} to your clipboard.".format( self._app_string(), colored.yellow(self.platform.copy(value)) ) def search_items(self, name): value = self.storage.get_item(name) print "We just copied {} to your clipboard.".format( colored.yellow(self.platform.copy(value)) ) def delete_item(self, list_name, name): if self.storage.list_exists(list_name): try: self.storage.delete_item(list_name, name) print "{} {} is gone forever.".format( self._app_string(), colored.yellow(name) ) except KeyError: print "{} {} {}.".format( colored.yellow(name), colored.red("not found in"), colored.yellow(list_name) ) else: print "We cound't find that list." def echo(self, major, minor=None): list_name = list_name = None if minor: list_name, item_name = major, minor else: item_name = major output = self.storage.get_item(item_name, list_name=list_name) if not output: if list_name and item_name: output = "{} {} {}".format( colored.yellow(item_name), colored.red("not found in"), colored.yellow(list_name) ) else: output = "{} {}".format( colored.yellow(item_name), colored.red("not found") ) print output def edit(self): print "{} {}".format( self._app_string(), self.platform.edit(self.storage.data_path) ) def open(self, major, minor): noun = None if self.storage.list_exists(major): the_list = self.storage.get_list(major) if minor: value = self.storage.get_item(minor, list_name=major) if value: self.platform.open(value) output = "{} We just opened {} for you." noun = value else: for value in the_list.values(): self.platform.open(value) output = "{} We just opened all of {} for you." noun = major else: value = self.storage.get_item(major) if value: self.platform.open(value) output = "{} We just opened {} for you." noun = value print output.format( self._app_string(), colored.yellow(noun) ) def random(self, major): if major and self.storage.list_exists(major): values = self.storage.get_list(major).values() else: values = self.storage.get_values() print "{} We just opened {} for you.".format( self._app_string(), colored.yellow(self.platform.open(choice(values))) ) def execute(self): args = clint.Args() command = args.get(0) major = args.get(1) minor = args.get(2) if not command: return self.overview() self.delegate(command, major, minor) def delegate(self, command, major, minor): if command == 'all': return self.all() elif command == 'help' or command[0] == '-': return self.help() elif command in ['echo', 'e']: return self.echo(major, minor) elif command == 'edit': return self.edit() elif command in ['open', 'o']: return self.open(major, minor) elif command in ['random', 'rand', 'r']: return self.random(major) if self.storage.list_exists(command): if major == DELETE_OPTION: return self.delete_list(command) if not major: return self.detail_list(command) if minor != DELETE_OPTION: if minor: return self.add_item(command, major, minor) return self.search_list_for_item(command, major) if minor == DELETE_OPTION and self.storage.item_exists(major): return self.delete_item(command, major) if self.storage.item_exists(command) and not major: return self.search_items(command) return self.create_list(command, item_name=major, item_value=minor) def empty(self): text = """ You don't have anything yet! To start out, create a new list: $ bam <list-name> And then add something to your list! $ bam <list-name> <item-name> <item-value> You can then grab your new item: $ bam <item-name>"""[1:] print textwrap.dedent(text) def help(self): text = """ - bam: help --------------------------------------------------- bam display high-level overview bam all show all items in all lists bam edit edit the bam JSON file in $EDITOR bam help this help text bam <list> create a new list bam <list> show items for a list bam <list> --delete deletes a list bam <list> <name> <value> create a new list item bam <name> copy item's value to clipboard bam <list> <name> copy item's value to clipboard bam open <name> open item's url in browser bam open <list> <name> open all item's url in browser for a list bam random open a random item's url in browser bam random <list> open a random item's url for a list in browser bam echo <name> echo the item's value without copying bam echo <list> <name> echo the item's value without copying bam <list> <name> --delete deletes an item """ with indent(INDENT): puts(textwrap.dedent(text))