Source code for schrodinger.tasks.gui
from schrodinger.tasks.tasks import CallingContext
from schrodinger.tasks.tasks import TaskDirNotFoundError
from schrodinger.ui.qt import messagebox
from schrodinger.utils import fileutils
[docs]def start_task(task, parent=None):
    """
    Start a task using the GUI to interact with preprocessing. Preprocessing
    errors will be shown in a message box, and preprocessing warnings will be
    shown to the user in the form a of a question box that allows the user to
    continue or cancel start.
    :param task: the task to start
    :type tasl: schrodinger.tasks.tasks.AbstractTask
    :param parent: the parent widget, used for positioning the popup messages
    :type parent: QtWidgets.QWidget
    :return: whether the task started
    :rtype: bool
    """
    proceed = _run_preprocessing_with_gui(task, parent)
    if proceed:
        task.start(skip_preprocessing=True)
    else:
        _clean_up_task_dir(task)
    return proceed 
[docs]def write_task(task, parent=None):
    """
    Write a task using the GUI to interact with preprocessing. Preprocessing
    errors will be shown in a message box, and preprocessing warnings will be
    shown to the user in the form a of a question box that allows the user to
    continue or cancel write.
    :param task: the task to write
    :type tasl: schrodinger.tasks.tasks.AbstractTask
    :param parent: the parent widget, used for positioning the popup messages
    :type parent: QtWidgets.QWidget
    :return: whether the write was successful
    :rtype: bool
    """
    try:
        task._write_mode = True
        # Preprocessing should be run in the context of write mode as we may
        # want to selectively run preprocessors during write operation.
        proceed = _run_preprocessing_with_gui(task, parent)
    finally:
        task._write_mode = False
    if proceed:
        task.write(skip_preprocessing=True)
    else:
        _clean_up_task_dir(task)
    return proceed 
def _run_preprocessing_with_gui(task, parent):
    proceed = True
    def callback(result):
        nonlocal proceed
        proceed = result.passed
        if result.message:
            if result.passed:
                proceed = messagebox.show_question(parent,
                                                   text=result.message,
                                                   title='Warning',
                                                   yes_text='Continue',
                                                   no_text='Cancel',
                                                   add_cancel_btn=False)
            else:
                messagebox.show_error(parent, text=result.message)
        return proceed
    task.runPreprocessing(callback, calling_context=CallingContext.GUI)
    return proceed
def _clean_up_task_dir(task):
    """
    Clean up the task dir for `task`. This can be called even if the task
    hasn't created a task directory yet.
    """
    if task.taskDirSetting() is task.AUTO_TASKDIR:
        try:
            taskdir = task.getTaskDir()
        except TaskDirNotFoundError:  # taskdir hasn't been created yet
            pass
        else:
            fileutils.force_rmtree(taskdir)