minor fixes
This commit is contained in:
		@@ -1,6 +1,5 @@
 | 
				
			|||||||
import asyncio
 | 
					import asyncio
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import re
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from playwright.async_api import async_playwright
 | 
					from playwright.async_api import async_playwright
 | 
				
			||||||
from playwright.async_api import Playwright
 | 
					from playwright.async_api import Playwright
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
from __future__ import unicode_literals
 | 
					from __future__ import unicode_literals
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from urllib.parse import urlparse
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from yt_dlp import YoutubeDL
 | 
					from yt_dlp import YoutubeDL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,7 +25,6 @@ class VideoDownloader:
 | 
				
			|||||||
            self.info = ydl.extract_info(self.link, download=False)
 | 
					            self.info = ydl.extract_info(self.link, download=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def download(self):
 | 
					    def download(self):
 | 
				
			||||||
        # TODO: удалить все файлы связанные с текущим видео, которые сейчас остались
 | 
					 | 
				
			||||||
        base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
					        base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | 
				
			||||||
        base_download_dir = os.path.join(base, os.pardir, "downloads", self.info['extractor_key'])
 | 
					        base_download_dir = os.path.join(base, os.pardir, "downloads", self.info['extractor_key'])
 | 
				
			||||||
        for root, dirs, files in os.walk(base_download_dir):
 | 
					        for root, dirs, files in os.walk(base_download_dir):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,3 @@
 | 
				
			|||||||
import datetime
 | 
					 | 
				
			||||||
import errno
 | 
					import errno
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,6 @@ TypeError: string indices must be integers
 | 
				
			|||||||
'''
 | 
					'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async def is_task_already_done_or_exist(redis: RedisClient, link: str):
 | 
					async def is_task_already_done_or_exist(redis: RedisClient, link: str):
 | 
				
			||||||
    # TODO: добавить real_link? пример - https://yandex.ru/video/preview/398425296752711999 будет грузить https://youtu.be/EjhRS4HUSJc
 | 
					 | 
				
			||||||
    messages = await redis.get_task_done_queue()
 | 
					    messages = await redis.get_task_done_queue()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    tasks = [
 | 
					    tasks = [
 | 
				
			||||||
@@ -80,21 +79,6 @@ async def index(request: Request):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@app.post('/submit/')
 | 
					@app.post('/submit/')
 | 
				
			||||||
async def get_url_for_download_video(request: Request, data: SubmitIn = Depends()):
 | 
					async def get_url_for_download_video(request: Request, data: SubmitIn = Depends()):
 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    TODO:
 | 
					 | 
				
			||||||
    Сабмит должен проверить что задача может быть уже выполненой (отдать ссылку в ответе)
 | 
					 | 
				
			||||||
        или ещё в работе (сообщить об этом в ответе, можно вывести на форму, что такая ссылка уже скачивается, ожидайте)
 | 
					 | 
				
			||||||
    Если условия выше провалены, то мы делаем новую задачу в очередь с переданными параметрами и сообщаем об этом клиенту с кодом (200 или 201)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Дополнительно, нужен отдельный метод (ури), который позволит получать статус задачи. Опрашиваться примерно раз в 5с,
 | 
					 | 
				
			||||||
    возможны увелечения тайминга в зависимости от ответа апи (на будущее)
 | 
					 | 
				
			||||||
    Варианты ответа
 | 
					 | 
				
			||||||
    1) такой задачи нет (404)
 | 
					 | 
				
			||||||
    2) такая задача есть и выполняется (200 ли?)
 | 
					 | 
				
			||||||
    3) такая задача есть и завершена (200 и выдать ссылку на загрузку)
 | 
					 | 
				
			||||||
    4) такая задача есть и завершена, но с ошибкой (500 и сообщение о том, что можно попробовать выполнить задачу заново,
 | 
					 | 
				
			||||||
                                                    попутно удалив задачу из выполненных, с очисткой мусора за ней)
 | 
					 | 
				
			||||||
    """
 | 
					 | 
				
			||||||
    red = RedisClient()
 | 
					    red = RedisClient()
 | 
				
			||||||
    task_done = await is_task_already_done_or_exist(red, data.link)
 | 
					    task_done = await is_task_already_done_or_exist(red, data.link)
 | 
				
			||||||
    task_in_process = await is_task_in_process(red, data.link)
 | 
					    task_in_process = await is_task_in_process(red, data.link)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,9 +39,8 @@ class MergeOutputFormatEnum(Enum):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@dataclass
 | 
					@dataclass
 | 
				
			||||||
class SubmitIn:
 | 
					class SubmitIn:
 | 
				
			||||||
    #TODO: дефолтный значения
 | 
					 | 
				
			||||||
    link: str = Form(...)
 | 
					    link: str = Form(...)
 | 
				
			||||||
    video_format: VideoFormatEnum = Form(...)
 | 
					    video_format: VideoFormatEnum = Form(default=MergeOutputFormatEnum.format_mp4)
 | 
				
			||||||
    audio_format: AudioFormatEnum = Form(...)
 | 
					    audio_format: AudioFormatEnum = Form(default=AudioFormatEnum.format_m4a)
 | 
				
			||||||
    merge_output_format: MergeOutputFormatEnum = Form(...)
 | 
					    merge_output_format: MergeOutputFormatEnum = Form(default=MergeOutputFormatEnum.format_mp4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -93,7 +93,7 @@
 | 
				
			|||||||
        const link = document.getElementById("link").value
 | 
					        const link = document.getElementById("link").value
 | 
				
			||||||
        const xhr2 = new XMLHttpRequest();
 | 
					        const xhr2 = new XMLHttpRequest();
 | 
				
			||||||
        // TODO: скорректировать ссылку, она должна быть относительной
 | 
					        // TODO: скорректировать ссылку, она должна быть относительной
 | 
				
			||||||
        xhr2.open('GET', 'http://0.0.0.0:8000/check/?link=' + link);
 | 
					        xhr2.open('GET', 'http://'+document.location.host+'/check/?link=' + link);
 | 
				
			||||||
        xhr2.responseType = 'json';
 | 
					        xhr2.responseType = 'json';
 | 
				
			||||||
        xhr2.onload = function() {
 | 
					        xhr2.onload = function() {
 | 
				
			||||||
            // TODO: добавить обработку исключений и всех возможных кодов в ответе
 | 
					            // TODO: добавить обработку исключений и всех возможных кодов в ответе
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user