move format_item to common class, and update methods to use it
This commit is contained in:
parent
1187badc2d
commit
f62ba22047
3 changed files with 53 additions and 64 deletions
|
|
@ -408,7 +408,10 @@ class HttpAPI(common):
|
||||||
if not url:
|
if not url:
|
||||||
return web.json_response(data={"error": "url param is required."}, status=web.HTTPBadRequest.status_code)
|
return web.json_response(data={"error": "url param is required."}, status=web.HTTPBadRequest.status_code)
|
||||||
|
|
||||||
status = await self.add(**self._formatItem({"url": url}))
|
try:
|
||||||
|
status = await self.add(**self.format_item({"url": url}))
|
||||||
|
except ValueError as e:
|
||||||
|
return web.json_response(data={"error": str(e)}, status=web.HTTPBadRequest.status_code)
|
||||||
|
|
||||||
return web.json_response(data=status, status=web.HTTPOk.status_code, dumps=self.encoder.encode)
|
return web.json_response(data=status, status=web.HTTPOk.status_code, dumps=self.encoder.encode)
|
||||||
|
|
||||||
|
|
@ -430,7 +433,7 @@ class HttpAPI(common):
|
||||||
|
|
||||||
for item in data:
|
for item in data:
|
||||||
try:
|
try:
|
||||||
item = self._formatItem(item)
|
item = self.format_item(item)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
return web.json_response(data={"error": str(e), "data": item}, status=web.HTTPBadRequest.status_code)
|
return web.json_response(data={"error": str(e), "data": item}, status=web.HTTPBadRequest.status_code)
|
||||||
|
|
||||||
|
|
@ -1155,45 +1158,3 @@ class HttpAPI(common):
|
||||||
await self.emitter.emit(Events.TEST, data)
|
await self.emitter.emit(Events.TEST, data)
|
||||||
|
|
||||||
return web.json_response(data=data, status=web.HTTPOk.status_code, dumps=self.encoder.encode)
|
return web.json_response(data=data, status=web.HTTPOk.status_code, dumps=self.encoder.encode)
|
||||||
|
|
||||||
def _formatItem(self, item: dict) -> dict:
|
|
||||||
"""
|
|
||||||
Format the item to be added to the download queue.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
item (dict): The item to be formatted.
|
|
||||||
|
|
||||||
Raises:
|
|
||||||
ValueError: If the url is not provided.
|
|
||||||
ValueError: If the yt-dlp config is not a valid json.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
dict: The formatted item
|
|
||||||
"""
|
|
||||||
url: str = item.get("url")
|
|
||||||
|
|
||||||
if not url:
|
|
||||||
raise ValueError("url param is required.")
|
|
||||||
|
|
||||||
preset: str = str(item.get("preset", self.config.default_preset))
|
|
||||||
folder: str = str(item.get("folder")) if item.get("folder") else ""
|
|
||||||
cookies: str = str(item.get("cookies")) if item.get("cookies") else ""
|
|
||||||
template: str = str(item.get("template")) if item.get("template") else ""
|
|
||||||
|
|
||||||
config = item.get("config")
|
|
||||||
if isinstance(config, str) and config:
|
|
||||||
try:
|
|
||||||
config = json.loads(config)
|
|
||||||
except Exception as e:
|
|
||||||
raise ValueError(f"Failed to parse json yt-dlp config for '{url}'. {str(e)}")
|
|
||||||
|
|
||||||
item = {
|
|
||||||
"url": url,
|
|
||||||
"preset": preset,
|
|
||||||
"folder": folder,
|
|
||||||
"ytdlp_cookies": cookies,
|
|
||||||
"ytdlp_config": config if isinstance(config, dict) else {},
|
|
||||||
"output_template": template,
|
|
||||||
}
|
|
||||||
|
|
||||||
return item
|
|
||||||
|
|
|
||||||
|
|
@ -180,27 +180,12 @@ class HttpSocket(common):
|
||||||
await self.emitter.error("No URL provided.", data={"unlock": True}, to=sid)
|
await self.emitter.error("No URL provided.", data={"unlock": True}, to=sid)
|
||||||
return
|
return
|
||||||
|
|
||||||
preset: str = str(data.get("preset", self.config.default_preset))
|
try:
|
||||||
folder: str = str(data.get("folder")) if data.get("folder") else ""
|
item = self.format_item(data)
|
||||||
cookies: str = str(data.get("cookies")) if data.get("cookies") else ""
|
except ValueError as e:
|
||||||
template: str = str(data.get("template")) if data.get("template") else ""
|
return web.json_response(data={"error": str(e)}, status=web.HTTPBadRequest.status_code)
|
||||||
|
|
||||||
config = data.get("config")
|
status = await self.add(**item)
|
||||||
if isinstance(config, str) and config:
|
|
||||||
try:
|
|
||||||
config = json.loads(config)
|
|
||||||
except Exception as e:
|
|
||||||
await self.emitter.error(f"Failed to parse json yt-dlp config. {str(e)}", data={"unlock": True}, to=sid)
|
|
||||||
return
|
|
||||||
|
|
||||||
status = await self.add(
|
|
||||||
url=url,
|
|
||||||
preset=preset,
|
|
||||||
folder=folder,
|
|
||||||
ytdlp_cookies=cookies,
|
|
||||||
ytdlp_config=config if isinstance(config, dict) else {},
|
|
||||||
output_template=template,
|
|
||||||
)
|
|
||||||
|
|
||||||
await self.emitter.emit(event=Events.STATUS, data=status, to=sid)
|
await self.emitter.emit(event=Events.STATUS, data=status, to=sid)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from .DownloadQueue import DownloadQueue
|
from .DownloadQueue import DownloadQueue
|
||||||
|
|
@ -35,3 +36,45 @@ class common:
|
||||||
)
|
)
|
||||||
|
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
def format_item(self, item: dict) -> dict:
|
||||||
|
"""
|
||||||
|
Format the item to be added to the download queue.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
item (dict): The item to be formatted.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: If the url is not provided.
|
||||||
|
ValueError: If the yt-dlp config is not a valid json.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: The formatted item
|
||||||
|
"""
|
||||||
|
url: str = item.get("url")
|
||||||
|
|
||||||
|
if not url:
|
||||||
|
raise ValueError("url param is required.")
|
||||||
|
|
||||||
|
preset: str = str(item.get("preset", self.config.default_preset))
|
||||||
|
folder: str = str(item.get("folder")) if item.get("folder") else ""
|
||||||
|
cookies: str = str(item.get("cookies")) if item.get("cookies") else ""
|
||||||
|
template: str = str(item.get("template")) if item.get("template") else ""
|
||||||
|
|
||||||
|
config = item.get("config")
|
||||||
|
if isinstance(config, str) and config:
|
||||||
|
try:
|
||||||
|
config = json.loads(config)
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError(f"Failed to parse json yt-dlp config for '{url}'. {str(e)}")
|
||||||
|
|
||||||
|
item = {
|
||||||
|
"url": url,
|
||||||
|
"preset": preset,
|
||||||
|
"folder": folder,
|
||||||
|
"ytdlp_cookies": cookies,
|
||||||
|
"ytdlp_config": config if isinstance(config, dict) else {},
|
||||||
|
"output_template": template,
|
||||||
|
}
|
||||||
|
|
||||||
|
return item
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue