# Tweepy # Copyright 2009-2023 Joshua Roesslein # See LICENSE for details. from tweepy.mixins import DataMapping, HashableID from tweepy.utils import parse_datetime #: All the potential fields for :class:`Poll` objects POLL_FIELDS = [ "duration_minutes", "end_datetime", "id", "options", "voting_status", ] class Poll(HashableID, DataMapping): """A poll included in a Tweet is not a primary object on any endpoint, but can be found and expanded in the Tweet object. The object is available for expansion with ``?expansions=attachments.poll_ids`` to get the condensed object with only default fields. Use the expansion with the field parameter: ``poll.fields`` when requesting additional fields to complete the object. .. versionadded:: 4.0 Attributes ---------- data : dict The JSON data representing the poll. id : str Unique identifier of the expanded poll. options : list Contains objects describing each choice in the referenced poll. duration_minutes : int | None Specifies the total duration of this poll. end_datetime : datetime.datetime | None Specifies the end date and time for this poll. voting_status : str | None Indicates if this poll is still active and can receive votes, or if the voting is now closed. References ---------- https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll """ __slots__ = ( "data", "id", "options", "duration_minutes", "end_datetime", "voting_status" ) def __init__(self, data): self.data = data self.id = data["id"] self.options = data["options"] self.duration_minutes = data.get("duration_minutes") self.end_datetime = data.get("end_datetime") if self.end_datetime is not None: self.end_datetime = parse_datetime(self.end_datetime) self.voting_status = data.get("voting_status") def __iter__(self): return iter(self.options) def __len__(self): return len(self.options) def __repr__(self): return f""