def add_new_record(phonebook: pb.Phonebook, new_record: rec.Record) -> pb.Phonebook or None: """ Добавление новой записи в данную телефонную книгу. Функция работает в бесконечном цикле до тех пор, пока не выявится ошибка, либо не завершится успешно. В цикле происходит проверка на совпадение с существующей записью в данной телефонной книге :param phonebook: данная телефонная книга, в которую добавляется новая запись (pb.Phonebook) :param new_record: новая запись (rec.Record) :return: измененная телефонная книга (pb.Phonebook), либо, в случае какой-либо ошибки, None """ while True: if pb.similar_record_in_phonebook(phonebook, new_record): print(ms.MENU_TO_SOLVE_SIMILAR_RECORD) choice, err = get_unambiguous_choice(2) if err: return if choice == 0: phonebook.delete_records(lambda x: x.firstname == new_record.firstname and x.lastname == new_record.lastname) if choice == 1: new_record = edit_record(phonebook, new_record, edit_when_add=True) if new_record is None: return else: phonebook.append(new_record) return phonebook
def delete_record(phonebook: pb.Phonebook, set_records: rec.SetRecords) -> pb.Phonebook or None: """ Удаление данного набора записей из данной телефонной книги. Перед удалением запрос на согласие действия. Если в наборе несколько записей, то предоставляется выбор записей, которые нужно удалить. :param phonebook: исходная телефонная книга (pb.Phonebook) :param set_records: набор записей для удаления (rec.SetRecords) :return: измененная телефонная книга (pb.Phonebook), если функция сработала без ошибок, иначе None """ print(set_records) if set_records.length == 1: print(ms.MENU_BEFORE_DELETE_RECORD) choice_y_n, err = get_unambiguous_choice(1) if err: return if choice_y_n == 0: record = set_records[0] phonebook.delete_records(lambda x: x.firstname == record.firstname and x.lastname == record.lastname) else: print(ms.CHOOSE_INDEXES_BEFORE_DELETE_RECORD) indexes, err = get_indexes(set_records.length) if err: return print(ms.MENU_BEFORE_DELETE_RECORD) choice_y_n, err = get_unambiguous_choice(1) if err: return if choice_y_n == 0: for index in indexes: phonebook.delete_records(lambda x: x.firstname == set_records[index].firstname and x.lastname == set_records[index].lastname) return phonebook