get s3 url

This commit is contained in:
Kseninia Mikhaylova 2024-08-12 14:41:38 +03:00
parent b1527a8f49
commit 23ef8eab20
3 changed files with 31 additions and 18 deletions

View File

@ -33,7 +33,5 @@ def upload_file(file_id):
aws_secret_access_key=settings.SELECTEL['secret'], aws_secret_access_key=settings.SELECTEL['secret'],
) )
s3.upload_fileobj(r.raw, 'inventorization', file_id) 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 = file_id
obj.image_aws_url = object_url
obj.save()

View File

@ -1,8 +1,8 @@
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
import json import json
import requests
import time import time
import boto3
from telegram import Update from telegram import Update
@ -17,9 +17,6 @@ from .updater import tg_bot_updater_instance
from .models import TgItem, TmcField from .models import TgItem, TmcField
from .serializers import TgItemSerializer, TmcFieldSerializer from .serializers import TgItemSerializer, TmcFieldSerializer
from tmc.models import TerritoryItem
from tmc.serializers import TerritoryItemSerializer
import logging import logging
logger = logging.getLogger("root") logger = logging.getLogger("root")
@ -33,7 +30,7 @@ class TgItemViewSet(viewsets.ModelViewSet):
authentication_classes = () authentication_classes = ()
filter_backends = [DjangoFilterBackend] filter_backends = [DjangoFilterBackend]
filterset_fields = ['user_id'] filterset_fields = ["user_id"]
def retrieve(self, request, pk=None): def retrieve(self, request, pk=None):
item = TgItem.objects.get(id=pk) item = TgItem.objects.get(id=pk)
@ -44,8 +41,8 @@ class TgItemViewSet(viewsets.ModelViewSet):
# return Response(serializer.data) # return Response(serializer.data)
def partial_update(self, request, *args, **kwargs): def partial_update(self, request, *args, **kwargs):
if 'location_id' in request.data: if "location_id" in request.data:
request.data['location'] = 35 request.data["location"] = 35
return super().partial_update(request) return super().partial_update(request)
@action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"]) @action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"])
@ -69,7 +66,9 @@ class TmcFieldViewset(viewsets.ModelViewSet):
@action(detail=False, methods=["get"], url_path=r"get_name/(?P<chat_id>[^/.]+)") @action(detail=False, methods=["get"], url_path=r"get_name/(?P<chat_id>[^/.]+)")
def get_name(self, request, chat_id): 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 = [] response = []
timer = 30 timer = 30
while timer > 0: while timer > 0:
@ -84,7 +83,9 @@ class TmcFieldViewset(viewsets.ModelViewSet):
@action(detail=False, methods=["get"], url_path=r"get_image/(?P<field_id>[^/.]+)") @action(detail=False, methods=["get"], url_path=r"get_image/(?P<field_id>[^/.]+)")
def get_image(self, request, field_id): 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 = [] response = []
timer = 30 timer = 30
while timer > 0: while timer > 0:
@ -96,3 +97,17 @@ class TmcFieldViewset(viewsets.ModelViewSet):
del tg_bot_updater_instance.return_values[field_id] del tg_bot_updater_instance.return_values[field_id]
break break
return Response(response) return Response(response)
@action(detail=False, methods=["get"], url_path=r"get_image_s3/(?P<file_id>[^/.]+)")
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])