Source code for schrodinger.job.download

"""
Manage downloading jobs.
"""
import functools

from schrodinger.infra import jobhub
from schrodinger.Qt import QtCore
from schrodinger.utils import qt_utils


[docs]def download_job(job_id: str) -> str: """ Use Qt evented code to download job if this is running itself from a QThread. Returns a error string if the download fails. """ error = "" @qt_utils.exit_event_loop_on_exception def download_finished(output, *, event_loop=None): nonlocal error error = output event_loop.quit() job_downloader = jobhub.JobDownloader(job_id) event_loop = QtCore.QEventLoop() assert job_downloader.downloadFinished.connect( functools.partial(download_finished, event_loop=event_loop)) QtCore.QTimer.singleShot(0, job_downloader.download) event_loop.exec() exc = qt_utils.get_last_exception() if exc: raise exc return error