diff --git a/back/api/settings.py b/back/api/settings.py index c7c8dc3..13e2417 100644 --- a/back/api/settings.py +++ b/back/api/settings.py @@ -199,3 +199,8 @@ TGBOT = { "BASE_URL": NGROK_TEMP, "WEBHOOK_URL": f"webhook/{os.environ.get('TG_TOKEN')}", } + +SELECTEL = { + "access": os.environ.get("AWS_ACCESS"), + "secret": os.environ.get("AWS_SECRET"), +} diff --git a/back/tgbot/tasks.py b/back/tgbot/tasks.py index fada9f0..389e940 100644 --- a/back/tgbot/tasks.py +++ b/back/tgbot/tasks.py @@ -2,11 +2,13 @@ import os import boto3 import time import requests +from django.conf import settings from celery import shared_task from celery.utils.log import get_task_logger from api.celery import celery_app +from .models import TmcField logger = get_task_logger(__name__) aws_access_key_id = os.environ.get("AWS_ACCESS") @@ -14,29 +16,23 @@ aws_secret_access_key = os.environ.get("AWS_SECRET") @celery_app.task def upload_file(file_id): - from .updater import tg_bot_updater_instance - tg_bot_updater_instance.my_queue.put({"name": "admin_get_image", "queryset": file_id}) + obj = TmcField.objects.filter(file_id=file_id) + if not obj: + return - response = None - timer = 30 - while timer > 0: - sleeping = 1 - timer -= sleeping - time.sleep(sleeping) - if file_id in tg_bot_updater_instance.return_values: - response = tg_bot_updater_instance.return_values[file_id] - del tg_bot_updater_instance.return_values[file_id] - break - - if response: - r = requests.get(response, stream=True) - s3 = boto3.client( - service_name="s3", - endpoint_url="https://s3.ru-1.storage.selcloud.ru", - aws_access_key_id=aws_access_key_id, - aws_secret_access_key=aws_access_key_id, - ) - s3.upload_fileobj(r.raw) + logger.info(f"start upload file {file_id}") + file_url = requests.get(f"https://api.telegram.org/bot{settings.TGBOT['TOKEN']}/getFile?file_id={file_id}") + file_json = file_url.json() + response = f"https://api.telegram.org/file/bot{settings.TGBOT['TOKEN']}/{file_json['result']['file_path']}" + logger.info(f"get tg url {response}") + r = requests.get(response, stream=True) + 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'], + ) + s3.upload_fileobj(r.raw, 'inventorization', file_id) + obj.image_aws_url = file_id + obj.save() - logger.info("123") - logger.info(file_id)