in src/lib.rs [38:88]
fn download(
url: String,
filename: String,
max_files: usize,
chunk_size: usize,
parallel_failures: usize,
max_retries: usize,
headers: Option<HashMap<String, String>>,
callback: Option<Bound<'_, PyAny>>,
) -> PyResult<()> {
if parallel_failures > max_files {
return Err(PyException::new_err(
"Error parallel_failures cannot be > max_files".to_string(),
));
}
if (parallel_failures == 0) != (max_retries == 0) {
return Err(PyException::new_err(
"For retry mechanism you need to set both `parallel_failures` and `max_retries`"
.to_string(),
));
}
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()?
.block_on(async {
download_async(
url,
filename.clone(),
max_files,
chunk_size,
parallel_failures,
max_retries,
headers,
callback,
)
.await
})
.map_err(|err| {
let path = Path::new(&filename);
if path.exists() {
match remove_file(filename) {
Ok(_) => err,
Err(err) => {
PyException::new_err(format!("Error while removing corrupted file: {err}"))
}
}
} else {
err
}
})
}