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:
|
||||
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)
|
||||
|
||||
|
|
@ -430,7 +433,7 @@ class HttpAPI(common):
|
|||
|
||||
for item in data:
|
||||
try:
|
||||
item = self._formatItem(item)
|
||||
item = self.format_item(item)
|
||||
except ValueError as e:
|
||||
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)
|
||||
|
||||
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)
|
||||
return
|
||||
|
||||
preset: str = str(data.get("preset", self.config.default_preset))
|
||||
folder: str = str(data.get("folder")) if data.get("folder") else ""
|
||||
cookies: str = str(data.get("cookies")) if data.get("cookies") else ""
|
||||
template: str = str(data.get("template")) if data.get("template") else ""
|
||||
try:
|
||||
item = self.format_item(data)
|
||||
except ValueError as e:
|
||||
return web.json_response(data={"error": str(e)}, status=web.HTTPBadRequest.status_code)
|
||||
|
||||
config = data.get("config")
|
||||
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,
|
||||
)
|
||||
status = await self.add(**item)
|
||||
|
||||
await self.emitter.emit(event=Events.STATUS, data=status, to=sid)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import json
|
||||
import logging
|
||||
|
||||
from .DownloadQueue import DownloadQueue
|
||||
|
|
@ -35,3 +36,45 @@ class common:
|
|||
)
|
||||
|
||||
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