diff --git a/back/tgbot/models.py b/back/tgbot/models.py index 8a0661f..22f6d03 100644 --- a/back/tgbot/models.py +++ b/back/tgbot/models.py @@ -19,7 +19,7 @@ class TmcField(models.Model): field = models.ForeignKey(BaseCustomField, models.RESTRICT) text = models.CharField(null=True, blank=True) file_id = models.CharField(null=True, blank=True) - image_aws_url = models.CharField(null=True, blank=True) + image_aws_url = models.CharField(null=True, blank=True) class TmcElement(models.Model): diff --git a/back/tgbot/tasks.py b/back/tgbot/tasks.py index 4e6e330..e38bbc9 100644 --- a/back/tgbot/tasks.py +++ b/back/tgbot/tasks.py @@ -33,7 +33,5 @@ def upload_file(file_id): aws_secret_access_key=settings.SELECTEL['secret'], ) s3.upload_fileobj(r.raw, 'inventorization', file_id) - object_url = s3.generate_presigned_url('get_object', ExpiresIn=0, Params={'Bucket': 'inventorization', 'Key': file_id}) - obj.image_aws_url = object_url - obj.save() + obj.image_aws_url = file_id diff --git a/back/tgbot/views.py b/back/tgbot/views.py index 89758e4..60cbce4 100644 --- a/back/tgbot/views.py +++ b/back/tgbot/views.py @@ -1,8 +1,8 @@ from django.conf import settings from django.db import models import json -import requests import time +import boto3 from telegram import Update @@ -17,9 +17,6 @@ from .updater import tg_bot_updater_instance from .models import TgItem, TmcField from .serializers import TgItemSerializer, TmcFieldSerializer -from tmc.models import TerritoryItem -from tmc.serializers import TerritoryItemSerializer - import logging logger = logging.getLogger("root") @@ -31,10 +28,10 @@ class TgItemViewSet(viewsets.ModelViewSet): http_method_names = ["post", "get", "patch"] permission_classes = () authentication_classes = () - + filter_backends = [DjangoFilterBackend] - filterset_fields = ['user_id'] - + filterset_fields = ["user_id"] + def retrieve(self, request, pk=None): item = TgItem.objects.get(id=pk) logger.info( @@ -42,10 +39,10 @@ class TgItemViewSet(viewsets.ModelViewSet): ) return super().retrieve(request, pk) # return Response(serializer.data) - + def partial_update(self, request, *args, **kwargs): - if 'location_id' in request.data: - request.data['location'] = 35 + if "location_id" in request.data: + request.data["location"] = 35 return super().partial_update(request) @action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"]) @@ -63,13 +60,15 @@ class TmcFieldViewset(viewsets.ModelViewSet): http_method_names = ["post", "get", "patch"] permission_classes = () authentication_classes = () - + def partial_update(self, request, *args, **kwargs): return super().partial_update(request) - + @action(detail=False, methods=["get"], url_path=r"get_name/(?P[^/.]+)") def get_name(self, request, chat_id): - tg_bot_updater_instance.my_queue.put({"name": "admin_get_name", "queryset": chat_id}) + tg_bot_updater_instance.my_queue.put( + {"name": "admin_get_name", "queryset": chat_id} + ) response = [] timer = 30 while timer > 0: @@ -84,7 +83,9 @@ class TmcFieldViewset(viewsets.ModelViewSet): @action(detail=False, methods=["get"], url_path=r"get_image/(?P[^/.]+)") def get_image(self, request, field_id): - tg_bot_updater_instance.my_queue.put({"name": "admin_get_image", "queryset": field_id}) + tg_bot_updater_instance.my_queue.put( + {"name": "admin_get_image", "queryset": field_id} + ) response = [] timer = 30 while timer > 0: @@ -96,3 +97,17 @@ class TmcFieldViewset(viewsets.ModelViewSet): del tg_bot_updater_instance.return_values[field_id] break return Response(response) + + @action(detail=False, methods=["get"], url_path=r"get_image_s3/(?P[^/.]+)") + def get_image_s3(self, request, file_id): + s3 = boto3.client( + service_name="s3", + endpoint_url="https://s3.ru-1.storage.selcloud.ru", + aws_access_key_id=settings.SELECTEL["access"], + aws_secret_access_key=settings.SELECTEL["secret"], + ) + object_url = s3.generate_presigned_url( + "get_object", + Params={"Bucket": "inventorization", "Key": file_id}, + ) + return Response([object_url])