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