def _do_logit(opts): categories = get_categories() category = opts.category while category not in categories: print "Existing categories:" for key, schema in categories.iteritems(): print "\t{}: {}".format(key, schema['description']) category = get_console_input('Category: ') if not category: return opts.category = category if opts.show_recent_week: print_recent_week(opts, categories) entry = {'category': category} if opts.message: entry['message'] = opts.message fields = categories[category].get('fields') or {} for field, description in fields.iteritems(): value = get_console_input(description) if value: entry[field] = value timestamp = datetime.utcnow() if opts.back_date: timestamp = parse_datetime(opts.back_date) logit(opts, entry, timestamp)
def logit(opts, entry, timestamp): try: entry['timestamp'] = timestamp.isoformat() entry['id'] = str(uuid.uuid4()) entry['installation'] = get_install_id() assert 'category' in entry entry['message'] = entry.get('message') or get_console_input('Notes: ') if entry.get('message'): with open(opts.logit_filename, 'a') as f: secret_key = get_secret_key(opts) encrypt_json(secret_key, entry, f) f.write('\r\n') else: print 'No logit entry entered.' finally: gc.collect()
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 })