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