-
-
Notifications
You must be signed in to change notification settings - Fork 4.6k
/
space.py
167 lines (139 loc) · 5.99 KB
/
space.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 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 publically-available fields for :class:`Space` objects
PUBLIC_SPACE_FIELDS = [
"created_at",
"creator_id",
"ended_at",
"host_ids",
"id",
"invited_user_ids",
"is_ticketed",
"lang",
"participant_count",
"scheduled_start",
"speaker_ids",
"started_at",
"state",
"title",
"topic_ids",
"updated_at",
]
#: All the potential fields for :class:`Space` objects
SPACE_FIELDS = PUBLIC_SPACE_FIELDS + [
"subscriber_count",
]
class Space(HashableID, DataMapping):
"""Spaces allow expression and interaction via live audio conversations.
The Space data dictionary contains relevant metadata about a Space; all the
details are updated in real time.
User objects can found and expanded in the user resource. These objects are
available for expansion by adding at least one of ``host_ids``,
``creator_id``, ``speaker_ids``, ``mentioned_user_ids`` to the
``expansions`` query parameter.
Unlike Tweets, Spaces are ephemeral and become unavailable after they end
or when they are canceled by their creator. When your app handles Spaces
data, you are responsible for returning the most up-to-date information,
and must remove data that is no longer available from the platform. The
`Spaces lookup endpoints`_ can help you ensure you respect the users’
expectations and intent.
.. versionadded:: 4.1
.. versionchanged:: 4.4
Added ``ended_at`` and ``topic_ids`` fields
.. versionchanged:: 4.6
Added ``subscriber_count`` field
.. versionchanged:: 4.14
Added ``creator_id`` field
Attributes
----------
data : dict
The JSON data representing the Space.
id : str
The unique identifier of the requested Space.
state : str
Indicates if the Space has started or will start in the future, or if
it has ended.
created_at : datetime.datetime | None
Creation time of this Space.
ended_at : datetime.datetime | None
Time when the Space was ended. Only available for ended Spaces.
host_ids : list
The unique identifier of the users who are hosting this Space.
lang : str | None
Language of the Space, if detected by Twitter. Returned as a BCP47
language tag.
is_ticketed : bool | None
Indicates is this is a ticketed Space.
invited_user_ids : list
The list of user IDs that were invited to join as speakers. Usually,
users in this list are invited to speak via the Invite user option.
participant_count : int | None
The current number of users in the Space, including Hosts and Speakers.
subscriber_count : int | None
The number of people who set a reminder to a Space.
scheduled_start : datetime.datetime | None
Indicates the start time of a scheduled Space, as set by the creator of
the Space. This field is returned only if the Space has been scheduled;
in other words, if the field is returned, it means the Space is a
scheduled Space.
speaker_ids : list
The list of users who were speaking at any point during the Space. This
list contains all the users in ``invited_user_ids`` in addition to any
user who requested to speak and was allowed via the Add speaker option.
started_at : datetime.datetime | None
Indicates the actual start time of a Space.
title : str | None
The title of the Space as specified by the creator.
topic_ids : list
A list of IDs of the topics selected by the creator of the Space.
updated_at : datetime.datetime | None
Specifies the date and time of the last update to any of the Space's
metadata, such as its title or scheduled time.
creator_id : int | None
References
----------
https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/space
.. _Spaces lookup endpoints: https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/introduction
"""
__slots__ = (
"data", "id", "state", "created_at", "ended_at", "host_ids", "lang",
"is_ticketed", "invited_user_ids", "participant_count",
"subscriber_count", "scheduled_start", "speaker_ids", "started_at",
"title", "topic_ids", "updated_at", "creator_id"
)
def __init__(self, data):
self.data = data
self.id = data["id"]
self.state = data["state"]
self.created_at = data.get("created_at")
if self.created_at is not None:
self.created_at = parse_datetime(self.created_at)
self.ended_at = data.get("ended_at")
if self.ended_at is not None:
self.ended_at = parse_datetime(self.ended_at)
self.host_ids = data.get("host_ids", [])
self.lang = data.get("lang")
self.is_ticketed = data.get("is_ticketed")
self.invited_user_ids = data.get("invited_user_ids", [])
self.participant_count = data.get("participant_count")
self.subscriber_count = data.get("subscriber_count")
self.scheduled_start = data.get("scheduled_start")
if self.scheduled_start is not None:
self.scheduled_start = parse_datetime(self.scheduled_start)
self.speaker_ids = data.get("speaker_ids", [])
self.started_at = data.get("started_at")
if self.started_at is not None:
self.started_at = parse_datetime(self.started_at)
self.title = data.get("title")
self.topic_ids = data.get("topic_ids", [])
self.updated_at = data.get("updated_at")
if self.updated_at is not None:
self.updated_at = parse_datetime(self.updated_at)
self.creator_id = data.get("creator_id")
if self.creator_id is not None:
self.creator_id = int(self.creator_id)
def __repr__(self):
return f"<Space id={self.id} state={self.state}>"