getstream 3.3.2__tar.gz → 3.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {getstream-3.3.2 → getstream-3.3.3}/PKG-INFO +1 -1
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/reconnection.py +3 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/signaling.py +17 -9
- {getstream-3.3.2 → getstream-3.3.3}/.cursor/worktrees.json +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.env.example +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.github/actions/python-uv-setup/action.yml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.github/workflows/ci.yml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.github/workflows/release.yml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.github/workflows/run_tests.yml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.github/workflows/stream-py.code-workspace +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.gitignore +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.gitmodules +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/.pre-commit-config.yaml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/AGENTS.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/CHANGELOG.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/DEVELOPMENT.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/LICENSE.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/MIGRATION_v2_to_v3.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/Makefile +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/README.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/dev.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/01-setup-and-auth.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/02-users.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/03-channels.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/04-messages-and-reactions.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/05-moderation.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/06-devices.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/README.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/generate.sh +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/generate_webrtc.sh +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/base.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/async_channel.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/async_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/async_rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/channel.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/chat/rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/async_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/async_rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/common/telemetry.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/config.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/feeds/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/feeds/client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/feeds/feeds.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/feeds/rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/generic.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/meta.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/models/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/moderation/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/moderation/async_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/moderation/async_rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/moderation/client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/moderation/rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/rate_limit.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/stream.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/stream_response.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/tests/test_webhook.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/utils/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/utils/event_emitter.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/utils/retry.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/version.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/async_call.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/async_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/async_rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/call.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/openai.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rest_client.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/README.md +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/audio_track.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/connection_manager.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/connection_utils.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/coordinator/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/coordinator/backoff.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/coordinator/errors.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/coordinator/ws.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/coordinator_api.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/encoders_patches.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/g711.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/location_discovery.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/models.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/network_monitor.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/participants.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/events_pb2.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/events_pb2.pyi +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/models_pb2.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/models_pb2.pyi +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/__init__.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/signal_pb2.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/signal_pb2.pyi +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/signal_twirp.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pc.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/peer_connection.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/recording.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/stats_reporter.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/stats_tracer.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/tracer.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/track_util.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/tracks.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/twirp_client_wrapper.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/utils.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/getstream/webhook.py +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/pyproject.toml +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/pytest.ini +0 -0
- {getstream-3.3.2 → getstream-3.3.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: getstream
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.3
|
|
4
4
|
Summary: GetStream Python SDK - Build scalable activity feeds, chat, and video calling applications
|
|
5
5
|
Author-email: sachaarbonel <sacha.arbonel@hotmail.fr>, tbarbugli <tbarbugli@gmail.com>
|
|
6
6
|
License-File: LICENSE.md
|
|
@@ -218,6 +218,9 @@ class ReconnectionManager:
|
|
|
218
218
|
token=self.connection_manager.join_response.credentials.token
|
|
219
219
|
if self.connection_manager.join_response
|
|
220
220
|
else None,
|
|
221
|
+
ws_url=self.connection_manager.join_response.credentials.server.ws_endpoint
|
|
222
|
+
if self.connection_manager.join_response
|
|
223
|
+
else None,
|
|
221
224
|
session_id=self.connection_manager.session_id,
|
|
222
225
|
)
|
|
223
226
|
|
|
@@ -68,6 +68,10 @@ class WebSocketClient(StreamAsyncIOEventEmitter):
|
|
|
68
68
|
self.running = False
|
|
69
69
|
self.closed = False
|
|
70
70
|
self._connection_lost_sent = False
|
|
71
|
+
# Set when a `call_ended` SFU event arrives. Read by `_on_close` to
|
|
72
|
+
# suppress `connection_lost`, since the close frame that follows carries
|
|
73
|
+
# no distinguishing status code or reason.
|
|
74
|
+
self._call_ended = False
|
|
71
75
|
|
|
72
76
|
# For ping/health check mechanism
|
|
73
77
|
self.ping_thread = None
|
|
@@ -168,6 +172,9 @@ class WebSocketClient(StreamAsyncIOEventEmitter):
|
|
|
168
172
|
event_type = event.WhichOneof("event_payload")
|
|
169
173
|
logger.debug(f"WebSocket message received {event_type}")
|
|
170
174
|
|
|
175
|
+
if event_type and event_type == "call_ended":
|
|
176
|
+
self._call_ended = True
|
|
177
|
+
|
|
171
178
|
if event.HasField("health_check_response"):
|
|
172
179
|
logger.debug("received health check response")
|
|
173
180
|
self.last_health_check_time = time.time()
|
|
@@ -199,29 +206,30 @@ class WebSocketClient(StreamAsyncIOEventEmitter):
|
|
|
199
206
|
|
|
200
207
|
def _on_error(self, ws, error):
|
|
201
208
|
"""Handle WebSocket error."""
|
|
202
|
-
|
|
209
|
+
is_close_frame = (
|
|
203
210
|
isinstance(error, websocket.ABNF)
|
|
204
211
|
and error.opcode == websocket.ABNF.OPCODE_CLOSE
|
|
205
|
-
)
|
|
206
|
-
|
|
207
|
-
#
|
|
208
|
-
logger.debug(f"WebSocket
|
|
212
|
+
)
|
|
213
|
+
if is_close_frame or not self.running:
|
|
214
|
+
# Close-frame-as-error or post-disconnect teardown noise.
|
|
215
|
+
logger.debug(f"WebSocket error after disconnect: {error}")
|
|
209
216
|
else:
|
|
210
217
|
logger.error(f"WebSocket error: {error}")
|
|
211
218
|
|
|
212
219
|
if not self.first_message_event.is_set():
|
|
213
|
-
#
|
|
220
|
+
# Mid-handshake failure: unblock `connect()` with a synthetic
|
|
221
|
+
# error event instead of leaving it parked on `first_message_event`.
|
|
214
222
|
error_event = events_pb2.SfuEvent()
|
|
215
223
|
error_event.error.error.message = str(error)
|
|
216
224
|
self.first_message = error_event
|
|
217
225
|
self.first_message_event.set()
|
|
218
|
-
elif not self.closed:
|
|
226
|
+
elif not self.closed and not is_close_frame:
|
|
219
227
|
self._notify_connection_lost(f"error: {error}")
|
|
220
228
|
|
|
221
229
|
def _on_close(self, ws, close_status_code, close_msg):
|
|
222
230
|
"""Handle WebSocket close event."""
|
|
223
231
|
logger.debug(f"WebSocket connection closed: {close_status_code} {close_msg}")
|
|
224
|
-
was_unexpected = not self.closed
|
|
232
|
+
was_unexpected = not self.closed and not self._call_ended
|
|
225
233
|
self.running = False
|
|
226
234
|
if was_unexpected:
|
|
227
235
|
self._notify_connection_lost(
|
|
@@ -248,7 +256,7 @@ class WebSocketClient(StreamAsyncIOEventEmitter):
|
|
|
248
256
|
logger.exception("Failed to schedule connection_lost emit")
|
|
249
257
|
|
|
250
258
|
def _claim_connection_lost(self) -> bool:
|
|
251
|
-
"""Return True
|
|
259
|
+
"""Return True if this is the first connection-lost notification."""
|
|
252
260
|
if self._connection_lost_sent:
|
|
253
261
|
return False
|
|
254
262
|
self._connection_lost_sent = True
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/docs/migration-from-stream-chat-python/01-setup-and-auth.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/__init__.py
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/events_pb2.py
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/event/events_pb2.pyi
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/__init__.py
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/models_pb2.py
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/models/models_pb2.pyi
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/__init__.py
RENAMED
|
File without changes
|
{getstream-3.3.2 → getstream-3.3.3}/getstream/video/rtc/pb/stream/video/sfu/signal_rpc/signal_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|