diff options
| author | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
|---|---|---|
| committer | S. Solomon Darnell | 2025-03-28 21:52:21 -0500 |
| commit | 4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch) | |
| tree | ee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA | |
| parent | cc961e04ba734dd72309fb548a2f97d67d578813 (diff) | |
| download | gn-ai-master.tar.gz | |
Diffstat (limited to '.venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA')
| -rw-r--r-- | .venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA b/.venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA new file mode 100644 index 00000000..698f4785 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/realtime-2.4.1.dist-info/METADATA @@ -0,0 +1,224 @@ +Metadata-Version: 2.1 +Name: realtime +Version: 2.4.1 +Summary: +Home-page: https://github.com/supabase/realtime-py +License: MIT +Author: Joel Lee +Author-email: joel@joellee.org +Requires-Python: >=3.9,<4.0 +Classifier: License :: OSI Approved :: MIT License +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Requires-Dist: aiohttp (>=3.11.13,<4.0.0) +Requires-Dist: python-dateutil (>=2.8.1,<3.0.0) +Requires-Dist: typing-extensions (>=4.12.2,<5.0.0) +Requires-Dist: websockets (>=11,<15) +Project-URL: Repository, https://github.com/supabase/realtime-py +Description-Content-Type: text/markdown + +<br /> +<p align="center"> + <a href="https://supabase.io"> + <picture> + <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/supabase/supabase/main/packages/common/assets/images/supabase-logo-wordmark--dark.svg"> + <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/supabase/supabase/main/packages/common/assets/images/supabase-logo-wordmark--light.svg"> + <img alt="Supabase Logo" width="300" src="https://raw.githubusercontent.com/supabase/supabase/main/packages/common/assets/images/logo-preview.jpg"> + </picture> + </a> + + <h1 align="center">Supabase Realtime Client</h1> + + <h3 align="center">Send ephemeral messages with <b>Broadcast</b>, track and synchronize state with <b>Presence</b>, and listen to database changes with <b>Postgres Change Data Capture (CDC)</b>.</h3> + + <p align="center"> + <a href="https://supabase.com/docs/guides/realtime">Guides</a> + · + <a href="https://supabase.com/docs/reference/python">Reference Docs</a> + · + <a href="https://multiplayer.dev">Multiplayer Demo</a> + </p> +</p> + +# Overview + +This client enables you to use the following Supabase Realtime's features: + +- **Broadcast**: send ephemeral messages from client to clients with minimal latency. Use cases include sharing cursor positions between users. +- **Presence**: track and synchronize shared state across clients with the help of CRDTs. Use cases include tracking which users are currently viewing a specific webpage. +- **Postgres Change Data Capture (CDC)**: listen for changes in your PostgreSQL database and send them to clients. + +# Usage + +## Installing the Package + +```bash +pip3 install realtime==2.0.0 +``` + +## Creating a Channel + +```python +import asyncio +from typing import Optional +from realtime.client import RealtimeClient +from realtime.channel import RealtimeSubscribeStates + +client = RealtimeClient(REALTIME_URL, API_KEY) +channel = client.channel('test-channel') + +def _on_subscribe(status: RealtimeSubscribeStates, err: Optional[Exception]): + if status == RealtimeSubscribeStates.SUBSCRIBED: + print('Connected!') + elif status == RealtimeSubscribeStates.CHANNEL_ERROR: + print(f'There was an error subscribing to channel: {err.message}') + elif status == RealtimeSubscribeStates.TIMED_OUT: + print('Realtime server did not respond in time.') + elif status == RealtimeSubscribeStates.CLOSED: + print('Realtime channel was unexpectedly closed.') + +await channel.subscribe(_on_subscribe) +``` + +### Notes: + +- `REALTIME_URL` is `ws://localhost:4000/socket` when developing locally and `wss://<project_ref>.supabase.co/realtime/v1` when connecting to your Supabase project. +- `API_KEY` is a JWT whose claims must contain `exp` and `role` (existing database role). +- Channel name can be any `string`. + +## Broadcast + +Your client can send and receive messages based on the `event`. + +```python +# Setup... + +channel = client.channel( + "broadcast-test", {"config": {"broadcast": {"ack": False, "self": False}}} +) + +await channel.on_broadcast("some-event", lambda payload: print(payload)).subscribe() +await channel.send_broadcast("some-event", {"hello": "world"}) +``` + +### Notes: + +- Setting `ack` to `true` means that the `channel.send` promise will resolve once server replies with acknowledgement that it received the broadcast message request. +- Setting `self` to `true` means that the client will receive the broadcast message it sent out. +- Setting `private` to `true` means that the client will use RLS to determine if the user can connect or not to a given channel. + +## Presence + +Your client can track and sync state that's stored in the channel. + +```python +# Setup... + +channel = client.channel( + "presence-test", + { + "config": { + "presence": { + "key": "" + } + } + } +) + +channel.on_presence_sync(lambda: print("Online users: ", channel.presence_state())) +channel.on_presence_join(lambda new_presences: print("New users have joined: ", new_presences)) +channel.on_presence_leave(lambda left_presences: print("Users have left: ", left_presences)) + +await channel.track({ 'user_id': 1 }) +``` + +## Postgres CDC + +Receive database changes on the client. + +```python +# Setup... + +channel = client.channel("db-changes") + +channel.on_postgres_changes( + "*", + schema="public", + callback=lambda payload: print("All changes in public schema: ", payload), +) + +channel.on_postgres_changes( + "INSERT", + schema="public", + table="messages", + callback=lambda payload: print("All inserts in messages table: ", payload), +) + +channel.on_postgres_changes( + "UPDATE", + schema="public", + table="users", + filter="username=eq.Realtime", + callback=lambda payload: print( + "All updates on users table when username is Realtime: ", payload + ), +) + +channel.subscribe( + lambda status, err: status == RealtimeSubscribeStates.SUBSCRIBED + and print("Ready to receive database changes!") +) +``` + +## Get All Channels + +You can see all the channels that your client has instantiated. + +```python +# Setup... + +client.get_channels() +``` + +## Cleanup + +It is highly recommended that you clean up your channels after you're done with them. + +- Remove a single channel + +```python +# Setup... + +channel = client.channel('some-channel-to-remove') + +channel.subscribe() + +await client.remove_channel(channel) +``` + +- Remove all channels + +```python +# Setup... + +channel1 = client.channel('a-channel-to-remove') +channel2 = client.channel('another-channel-to-remove') + +await channel1.subscribe() +await channel2.subscribe() + +await client.remove_all_channels() +``` + +## Credits + +This repo draws heavily from [phoenix-js](https://github.com/phoenixframework/phoenix/tree/master/assets/js/phoenix). + +## License + +MIT. + |
