Files
GIA/core/views/queues.py

95 lines
2.3 KiB
Python

from rest_framework.views import APIView
from django.contrib.auth.mixins import LoginRequiredMixin
from rest_framework import status
from django.http import HttpResponse
from core.models import QueuedMessage, Message
from core.forms import QueueForm
import requests
import orjson
from django.conf import settings
import redis
import msgpack
from mixins.views import (
ObjectCreate,
ObjectDelete,
ObjectList,
ObjectUpdate,
)
# def start_typing(uuid):
# url = f"http://signal:8080/v1/typing_indicator/{settings.SIGNAL_NUMBER}"
# data = {
# "recipient": uuid,
# }
# response = requests.put(url, json=data)
# def stop_typing(uuid):
# url = f"http://signal:8080/v1/typing_indicator/{settings.SIGNAL_NUMBER}"
# data = {
# "recipient": uuid,
# }
# response = requests.delete(url, json=data)
r = redis.from_url("unix://var/run/gia-redis.sock", db=10)
class AcceptMessageAPI(LoginRequiredMixin, APIView):
def get(self, request, message_id):
to_submit = {
"type": "def",
"method": "accept_message",
"user_id": request.user.id,
"message_id": message_id,
}
packed = msgpack.packb(to_submit, use_bin_type=True)
r.publish("processing", packed)
return HttpResponse(status=status.HTTP_200_OK)
class RejectMessageAPI(LoginRequiredMixin, APIView):
def get(self, request, message_id):
try:
message = QueuedMessage.objects.get(
user=self.request.user,
id=message_id,
)
except QueuedMessage.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
message.delete()
return HttpResponse(status=status.HTTP_200_OK)
class QueueList(LoginRequiredMixin, ObjectList):
list_template = "partials/queue-list.html"
model = QueuedMessage
page_title = "Queues"
list_url_name = "queues"
list_url_args = ["type"]
submit_url_name = "queue_create"
class QueueCreate(LoginRequiredMixin, ObjectCreate):
model = QueuedMessage
form_class = QueueForm
submit_url_name = "queue_create"
class QueueUpdate(LoginRequiredMixin, ObjectUpdate):
model = QueuedMessage
form_class = QueueForm
submit_url_name = "queue_update"
class QueueDelete(LoginRequiredMixin, ObjectDelete):
model = QueuedMessage