mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-12 20:15:10 +00:00
fix(api): pass adaptive_workers and download_processes to dl.result
Both became required parameters of dl.result() when adaptive worker scaling landed, but the API path calls it directly and never supplied them, so every API-initiated download raised TypeError. Defaults match the click options.
This commit is contained in:
@@ -397,6 +397,8 @@ Create a download job. Requires `service` and `title_id`; every other field is a
|
||||
| `proxy` / `no_proxy` / `no_proxy_download` | string / bool / bool | `null` / `false` / `false` | Proxy controls. |
|
||||
| `no_folder` / `no_source` / `no_mux` | boolean | `false` | Output/mux controls. |
|
||||
| `workers` | int | `null` | Threads per track. |
|
||||
| `adaptive_workers` | boolean | `false` | Scale segment workers to measured CDN throughput, up to the `workers` cap. |
|
||||
| `download_processes` | int | `1` | Split a track's segments across this many processes. Only engages for large batches. |
|
||||
| `downloads` | int | `1` | Concurrent tracks. |
|
||||
| `worst` | boolean | `false` | Lowest bitrate within quality. |
|
||||
| `best_available` | boolean | `false` | Fall back to best available. |
|
||||
|
||||
@@ -586,6 +586,8 @@ def perform_download(
|
||||
no_source=params.get("no_source", False),
|
||||
no_mux=params.get("no_mux", False),
|
||||
workers=params.get("workers"),
|
||||
adaptive_workers=params.get("adaptive_workers", False),
|
||||
download_processes=params.get("download_processes", 1),
|
||||
downloads=params.get("downloads", 1),
|
||||
worst=params.get("worst", False),
|
||||
best_available=params.get("best_available", False),
|
||||
|
||||
@@ -70,6 +70,8 @@ DEFAULT_DOWNLOAD_PARAMS = {
|
||||
"no_source": False,
|
||||
"no_mux": False,
|
||||
"workers": None,
|
||||
"adaptive_workers": False,
|
||||
"download_processes": 1,
|
||||
"downloads": 1,
|
||||
"worst": False,
|
||||
"best_available": False,
|
||||
@@ -984,6 +986,10 @@ def validate_download_parameters(data: Dict[str, Any]) -> Optional[str]:
|
||||
if not isinstance(data["workers"], int) or data["workers"] <= 0:
|
||||
return "workers must be a positive integer"
|
||||
|
||||
if "download_processes" in data and data["download_processes"] is not None:
|
||||
if not isinstance(data["download_processes"], int) or data["download_processes"] <= 0:
|
||||
return "download_processes must be a positive integer"
|
||||
|
||||
if "downloads" in data and data["downloads"] is not None:
|
||||
if not isinstance(data["downloads"], int) or data["downloads"] <= 0:
|
||||
return "downloads must be a positive integer"
|
||||
|
||||
@@ -781,6 +781,12 @@ async def download(request: web.Request) -> web.Response:
|
||||
workers:
|
||||
type: integer
|
||||
description: Max workers/threads per track download (default - None)
|
||||
adaptive_workers:
|
||||
type: boolean
|
||||
description: Scale per-track segment workers to measured CDN throughput, up to the workers cap (default - false)
|
||||
download_processes:
|
||||
type: integer
|
||||
description: Split a track's segments across this many processes; only engages for large batches (default - 1)
|
||||
downloads:
|
||||
type: integer
|
||||
description: Amount of tracks to download concurrently (default - 1)
|
||||
|
||||
Reference in New Issue
Block a user