Talk realtime with groups
Project description
⭐ Nejma ⭐
Nejma ⭐ allows you to manage multiple realtime connections and send messages to groups or a user multiple tabs...
Take a look at this example nejma-chat, a simple chat application built using nejma and starlette.
Installation
$ pip install nejma
Getting started
Here's an example of using nejma with websockets.
First import Channel and channel_layer from nejma
from nejma import Channel, channel_layer
Create a channel on connect
async def on_connect(self, websocket, **kwargs):
await super().on_connect(websocket, **kwargs)
self.channel = Channel(send=websocket.send)
Add groups, channels or send messages
async def on_receive(self, websocket, data):
# Adds a channel to a giving group
self.channel_layer.add(group, self.channel)
# Removes a channel from a given group
self.channel_layer.remove(group, self.channel)
# Removes a channel from all the groups
self.channel_layer.remove_channel(self.channel)
# Reset all the groups
self.channel_layer.flush()
await self.channel_layer.group_send(group, "Welcome !")
Finnaly, remove the channel once the connection is closed
async def on_disconnect(self, websocket, close_code):
self.channel_layer.remove_channel(self.channel)
Starlette
To use nejma with starlette, simply import the WebSocketEndpoint from nejma
from channels.ext.starlette import WebSocketEndpoint
@app.websocket_route("/ws")
class Chat(WebSocketEndpoint):
encoding = "json"
async def on_receive(self, websocket, data):
room_id = data['room_id']
message = data['message']
username = data['username']
if message.strip():
group = f"group_{room_id}"
self.channel_layer.add(group, self.channel)
payload = {
"username": username,
"message": message,
"room_id": room_id
}
await self.channel_layer.group_send(group, payload)
Docs
The ChannelLayer class provided by nejma exposes the following methods :
add(group, channel)
Adds a channel to a giving group.
self.channel_layer.add(group, self.channel)
remove(group, channel)
Removes a channel from a given group
self.channel_layer.remove(group, self.channel)
remove_channel(channel)
Removes a channel from all the groups
self.channel_layer.remove_channel(self.channel)
flush()
Reset all the groups
self.channel_layer.flush()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nejma-0.1.0.tar.gz.
File metadata
- Download URL: nejma-0.1.0.tar.gz
- Upload date:
- Size: 3.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21700901af1eac11ff04854c3cefb8ef1f7d6abd831c89347a1a326bb1deac9b
|
|
| MD5 |
70927e1e378257b68f3d242a0ad4bdd5
|
|
| BLAKE2b-256 |
bf85c0a72b6c944b6349968575dd0fdcd602047ca105f171872156a4068febae
|
File details
Details for the file nejma-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nejma-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.8.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4553ad7fd79282325ba5f0ccc8ac980809dc32bbea420a7c1a37ef0c34161c9e
|
|
| MD5 |
aa7e23f8cbd53ae3cb4daf53f8e72fce
|
|
| BLAKE2b-256 |
4ca5044bdc4d0fe562ef76c915c4d745b8913a88348847702c86a8a43bbeabe0
|