46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import json
|
|
from channels.generic.websocket import AsyncWebsocketConsumer
|
|
from django.contrib.auth.models import AnonymousUser
|
|
|
|
from submissions.signals import STAFF_GROUP_NAME
|
|
|
|
|
|
class SubmissionsConsumer(AsyncWebsocketConsumer):
|
|
async def connect(self):
|
|
self.user = self.scope["user"]
|
|
|
|
if isinstance(self.user, AnonymousUser):
|
|
await self.close()
|
|
return
|
|
|
|
self.group_names = [f"submissions_user_{self.user.id}"]
|
|
if self.user.is_staff:
|
|
self.group_names.append(STAFF_GROUP_NAME)
|
|
|
|
for group_name in self.group_names:
|
|
await self.channel_layer.group_add(group_name, self.channel_name)
|
|
await self.accept()
|
|
|
|
async def disconnect(self, close_code):
|
|
# closed before joining (anonymous)
|
|
for group_name in getattr(self, "group_names", []):
|
|
await self.channel_layer.group_discard(group_name, self.channel_name)
|
|
|
|
async def submission_updated(self, event):
|
|
submission_data = event["submission"]
|
|
await self.send(text_data=json.dumps(submission_data))
|
|
|
|
async def submission_file_updated(self, event):
|
|
file_data = event["file"]
|
|
await self.send(text_data=json.dumps(file_data))
|
|
|
|
async def submission_crop_updated(self, event):
|
|
crop_data = event["crop"]
|
|
await self.send(text_data=json.dumps(crop_data))
|
|
|
|
async def submission_crop_deleted(self, event):
|
|
await self.send(text_data=json.dumps({"deleted_crop": event["crop"]}))
|
|
|
|
async def scope_updated(self, event):
|
|
await self.send(text_data=json.dumps({"scope": event["scope"]}))
|