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
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 |