def main(): logging.basicConfig(filename='logfile.log', level=logging.INFO, format='%(asctime)s %(message)s', datefmt='%d.%m.%Y-%H:%M:%S') r = Register() current_page = 0 current_filename = '' print("Willkommen!") while True: user_input = input('\n[{}]: '.format(current_page)) if user_input.startswith('.'): shortcut = user_input[1:] if shortcut in shortcuts_lib: print("Shortcut für ", shortcuts_lib[shortcut]) user_input = shortcuts_lib[shortcut] else: print("Shortcut {} nicht gefunden.".format(shortcut)) if len(user_input) > 1 and ' ' in user_input: command, parameters = user_input.split(' ', 1) else: command = user_input parameters = '' ###################### if command == 'quit': r.close() logging.info("===== Bye. =====") break elif command == 'create': if parameters: r.create(parameters) print("Datei {} angelegt.".format(parameters)) elif command == 'load': if parameters: r.load(parameters) print("Datei {} geladen.".format(parameters)) logging.info( "===== Datei {} geladen. =====".format(parameters)) current_filename = parameters else: print("Bitte Dateinamen angeben.") elif command == 'showpagesfor': if parameters: pages_list = r.get_pages_by_name(parameters) str_pages = [str(p) for p in pages_list] print(", ".join(str_pages)) elif command == 'find': if parameters: names_list = r.find_name(parameters) for entry in names_list: print("({}): {}".format(entry[0], entry[1])) elif command == '+' or command == 'add': current_name = '' if parameters: names_list = r.find_name(parameters) if names_list: print("Meintest du:") if len(names_list) == 1: # only one entry take = input( "({}) {}\nÜbernehmen? (ENTER=ja, a=wie Eingabe anlegen) " .format(names_list[0][0], names_list[0][1])) if take == '': name_id = names_list[0][0] elif take == 'a': name_id = 'a' else: name_id = ' ' else: for n in names_list: print("({}): {}".format(n[0], n[1])) name_id = input( "id oder 'a' für wie Eingabe anlegen?: ") if name_id == 'a': current_name = parameters else: try: name_id = int(name_id) except: print("Falsche id angegeben.") for n in names_list: if n[0] == name_id: current_name = n[1] else: add_new = input("Neu anlegen (j/n)? ") if add_new == 'j': current_name = parameters if current_name: if r.add_item(current_name, current_page): print("'{}' auf Seite {} hinzugefügt.".format( current_name, current_page)) logging.info("add '{}' on '{}'".format( current_name, current_page)) else: print("Nichts getan.") elif command == '#': if parameters != '': try: id = int(parameters) except: print("ID muss Zahl sein.") pass if r.add_item_by_id(id, current_page): entry = r.get_name_by_id(id) print("'{}' auf Seite '{}' hinzugefügt.".format( entry[1], current_page)) logging.info("add '{}' on '{}'".format(entry[1], current_page)) elif command == 'delfrompage': if parameters: names_list = r.find_name(parameters) if names_list: print("Meintest du:") for n in names_list: print("({}): {}".format(n[0], n[1])) name_id = input("id oder 'n' für abbrechen?: ") # 'n' bricht ab if name_id == 'n': pass else: try: name_id = int(name_id) except: print("Falsche ID angegeben.") pass entry = r.get_name_by_id(name_id) found = False for n in names_list: if n[0] == entry[0]: found = True r.del_page(entry[0], current_page) print( "Name {} mit ID {} auf dieser Seite gelöscht.". format(entry[1], entry[0])) logging.info("delfrompage '{}' on '{}'".format( entry[1], current_page)) if not found: print("Name nicht gefunden. Richtige ID angegeben?") else: print("Keinen Namen gefunden.") elif command == 'delname': if parameters: names_list = r.find_name(parameters) if names_list: print("Meintest du:") for n in names_list: print("({}): {}".format(n[0], n[1])) name_id = input("id oder 'n' für abbrechen?: ") # 'n' bricht ab if name_id == 'n': pass else: try: name_id = int(name_id) except: print("Falsche ID angegeben.") pass for n in names_list: if n[0] == name_id: r.del_name(n[0]) print("Name {} mit ID {} gelöscht.".format( n[1], n[0])) logging.info("delname '{}' id '{}'".format( n[1], n[0])) elif command == 'showall': names_list = r.get_all_names() for name in names_list: str_list = [str(p) for p in r.get_pages_by_name_id(name[0])] comma_list = ", ".join(str_list) print("({id}): {name} {list}".format(id=name[0], name=name[1], list=comma_list)) elif command == 'exporttoword': if parameters: doc = docx.Document() doc.add_heading("Register", 0) # get the list the_register = [] names_list = r.get_all_names() for name in names_list: #str_list = [str(p) for p in r.get_pages_by_name_id(name[0])] comma_pages = countpages.countpages( r.get_pages_by_name_id(name[0])) the_register.append({ 'name': name[1], 'pages': comma_pages }) initial = 'A' doc.add_heading(initial, 1) for entry in the_register: if entry['name'][0] != initial: initial = entry['name'][0] doc.add_heading(initial, 2) # the 'voir' case: voir gets italic if '. voir' in entry['name']: a, b = entry['name'].split('. voir') p = doc.add_paragraph(a + '. ') p.add_run('voir').italic = True p.add_run(b) # no pages! else: doc.add_paragraph("{name} {pages}".format( name=entry['name'], pages=entry['pages'])) doc.save(parameters) elif command == 'exporttodict': if parameters: # get the list the_register = [] names_list = r.get_all_names() for name in names_list: the_register.append({ 'name': name[1], 'pages': r.get_pages_by_name_id(name[0]) }) with open(parameters, 'w', encoding='utf-8') as f: f.write(json.dumps(the_register)) elif command == 'here': # lists names on page, old 'namesonpage' names_list = r.get_names(current_page) for names in names_list: print("-", names) elif command == 'p' or command == 'page': if parameters != '': try: new_page = int(parameters) current_page = new_page print("Seitenzahl auf {} geändert.".format(current_page)) except: print("Keine gültige Seitenzahl.") elif command == 'import': if parameters != '': r.import_names(parameters) elif command == 'rename': if parameters != '': try: name_id = int(parameters) except: print("Fehler: ID muss angegeben werden.") pass new_name = input("Neuer Name: ") r.rename(name_id, new_name.strip()) print("Geändert.") elif command == 'id': if parameters != '': try: parameters = int(parameters) except: print("ID muss eine Zahl sein.") pass entry = r.get_name_by_id(int(parameters)) if entry: print("({id}) {name}".format(id=entry[0], name=entry[1])) else: print("Nichts gefunden.") else: winsound.Beep(2000, 250)