예제 #1
0
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