minor fixes
This commit is contained in:
parent
4a37e46ab9
commit
823b06c6e5
@ -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: добавить обработку исключений и всех возможных кодов в ответе
|
||||||
|
Loading…
Reference in New Issue
Block a user