from django.conf import settings import json import time from telegram import Update from rest_framework import mixins, viewsets from rest_framework.response import Response from rest_framework.decorators import action from .tgbot import TgBot from .apps import TgBotUpdater from .models import TgItem, TmcElement, TmcField from .serializers import TgItemSerializer, TmcFieldSerializer import logging logger = logging.getLogger("root") class TgItemViewSet(viewsets.ModelViewSet): queryset = TgItem.objects.all().order_by('-updated_at') serializer_class = TgItemSerializer http_method_names = ["post", "get"] @action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"]) def send_tg_data(self, request): TgBotUpdater.my_queue.put( Update.de_json(data=json.loads(request.body), bot=TgBot.app.bot) ) return Response({"result": "ok"}) # return super().create(request, *args, **kwargs) class TmcFieldViewset(viewsets.ModelViewSet): queryset = TmcField.objects.all() serializer_class = TmcFieldSerializer http_method_names = ["get"] @action(detail=False, methods=["get"], url_path=r"get_name/(?P[^/.]+)") def get_name(self, request, chat_id): TgBotUpdater.my_queue.put({"name": "admin_get_name", "queryset": chat_id}) response = [] timer = 30 while timer > 0: sleeping = 1 timer -= sleeping time.sleep(sleeping) if chat_id in TgBotUpdater.return_values: response.append(TgBotUpdater.return_values[chat_id]) del TgBotUpdater.return_values[chat_id] break return Response(response) @action(detail=False, methods=["get"], url_path=r"get_image/(?P[^/.]+)") def get_image(self, request, field_id): TgBotUpdater.my_queue.put({"name": "admin_get_image", "queryset": field_id}) response = [] timer = 30 while timer > 0: sleeping = 1 timer -= sleeping time.sleep(sleeping) if field_id in TgBotUpdater.return_values: response.append(TgBotUpdater.return_values[field_id]) del TgBotUpdater.return_values[field_id] break return Response(response)