def _generate_merged_entries_from_s3(opts): """Merge all of the installations' logs into this installation.""" bucket = get_s3_bucket(opts) keys = bucket.get_all_keys() # first find all of the installations installations = _get_installations_from_keys(keys) install_id = get_install_id() if install_id in installations: installations.remove(install_id) # for each installation, find the latest key keys_to_merge = { installation: _get_latest_key(keys, installation) for installation in installations } entries = {} for installation, key in keys_to_merge.iteritems(): for entry in _generate_entries_from_key(opts, key): if 'installation' not in entry: entry['installation'] = installation entry_id = unique_id_from_entry(entry) entries[entry_id] = entry # now add any local entries for entry in _generate_entries_from_local_file(opts): if 'installation' not in entry: entry['installation'] = install_id entry_id = unique_id_from_entry(entry) entries[entry_id] = entry for entry in _generate_sorted_entries_from_entries(entries.values()): yield entry
def _generate_incomplete_entries(opts, categories): incomplete_items = {} for entry in _generate_entries_from_local_file(opts): entry_category = entry.get('category') if opts.category is None or opts.category == entry_category: if categories.get(entry_category, {}).get('track_completion'): if 'ref_id' in entry: ref_id = entry.get('ref_id') if entry.get('complete'): del incomplete_items[ref_id] else: incomplete_items[unique_id_from_entry(entry)] = entry return incomplete_items.itervalues()
def _do_todo_list(opts, categories): """Show a menu for completing todo items""" width, _ = get_terminal_size() menu_items = list(enumerate( _generate_incomplete_entries(opts, categories), start=1)) for index, entry in menu_items: print_entry(entry, categories, width=width, prefix=str(index) + ') ') try: completed_index = int(get_console_input( "Which entry did you complete [Enter to quit]? ")) except ValueError: print "No entries changed." return entry = dict(menu_items).get(completed_index) logit(opts, { 'category': entry['category'], 'ref_id': unique_id_from_entry(entry), 'complete': True })