Skip to content

Polls

Poll и PollBuilder используются для создания и отправки опросов в posts.create() и posts.post_to_wall().

Быстрый старт

Через Poll

from itdpy.models import Poll

poll = Poll(
    question="Как подавать котлеты?",
    options=["С пюрешкой", "Без пюрешки"],
    multipleChoice=True,
)

Через PollBuilder

from itdpy.models import PollBuilder

poll = (
    PollBuilder("Как подавать котлеты?")
    .add("С пюрешкой")
    .add("Без пюрешки")
    .multiple_choice(True)
    .build()
)

Отправка опроса

Создать пост с опросом

post = client.posts.create(
    content="Голосуем",
    poll=Poll(
        question="Как подавать котлеты?",
        options=["С пюрешкой", "Без пюрешки"],
        multipleChoice=True,
    ),
)

Builder без build()

PollBuilder тоже поддерживает сериализацию, поэтому его можно передавать напрямую:

post = client.posts.create(
    content="Голосуем",
    poll=(
        PollBuilder("Как подавать котлеты?")
        .add("С пюрешкой")
        .add("Без пюрешки")
        .multiple_choice(True)
    ),
)

Пост на чужую стену

post = client.posts.post_to_wall(
    username="username",
    content="Опрос на стену",
    poll=(
        PollBuilder("Что добавить в itdpy?")
        .add("Больше моделей")
        .add("Больше примеров")
        .add("Больше streaming")
        .multiple_choice(True)
    ),
)

Сериализация

to_dict()

Возвращает полную модель Poll.

poll = Poll(
    question="Как ваши дела?",
    options=["Отлично", "Нормально", "Плохо"],
)

print(poll.to_dict())

Результат:

{
    "question": "Как ваши дела?",
    "options": [
        {"text": "Отлично", "position": 0, "votesCount": 0},
        {"text": "Нормально", "position": 0, "votesCount": 0},
        {"text": "Плохо", "position": 0, "votesCount": 0},
    ],
    "totalVotes": 0,
    "hasVoted": False,
    "votedOptionIds": [],
    "multipleChoice": False,
}

to_request_dict()

Возвращает payload для API.

print(poll.to_request_dict())

Результат:

{
    "question": "Как ваши дела?",
    "multipleChoice": False,
    "options": [
        {"text": "Отлично"},
        {"text": "Нормально"},
        {"text": "Плохо"},
    ],
}

to_json()

print(poll.to_json())

Работа как с dict

И Poll, и PollBuilder поддерживают:

print(poll["question"])
print(poll.get("multipleChoice"))

Числовые варианты

PollBuilder автоматически приводит значения к строке:

poll = PollBuilder("Какая цифра лучше?").add(1).add(2).add(3)

print(poll.to_request_dict())

Голосование

poll = client.posts.vote(
    post_id="POST_ID",
    option_ids="OPTION_ID",
)

print(poll.question)
print(poll.total_votes)
print(poll.options.to_json())

См. также