Source code for schrodinger.ui.qt.appframework2.knime_af2
import os
import subprocess
from schrodinger.ui.qt.appframework2 import af2
from schrodinger.utils import fileutils
# Constants used in AF2 commands written in knime mode
# These constants will then be replaced with actual values by
# KNIME java code, during node execution
POS_ARG_1 = "%POS1%"
[docs]class KnimeNodeMixin(object):
    """
    This class is obsolete, and is retained for backwards compatability with
    older KNIME wrappers only.
    """
[docs]    def configDialogSettings(self):
        return {} 
[docs]    def closeKnimePanel(self):
        """
        Called when the user presses "OK" button to close the panel - after
        the panel state is validated. By default, it cases the panel to
        prepare the job in the CWD, and write the <jobname>.sh file.
        Override this method in derived class for custom behavior.
        :return: False if closing of panel should be cancelled. Any other
                return value causes the panel to close afterwards.
        """
        return self.write() 
[docs]    def writeStateAndClose(self):
        settings_file = self.jobname() + ".json"
        try:
            self.writePanelState(filename=settings_file)
        except TypeError as te:
            import traceback
            print("Error in writing the panel state")
            # NOTE: One disadvantage of using this approach, is that if the
            # unit tests fail, it looks like the failure happened here, as
            # the exception will get printed to the test log file.
            traceback.print_exc()
            fileutils.force_remove(settings_file)
        if self.closeKnimePanel() is not False:
            # Validation passed and command file was written
            self._close() 
[docs]    def write(self):
        if isinstance(self, af2.JobApp):
            # Panel derived from af2.JobApp
            return af2.JobApp._write(self)
        elif isinstance(self, af2.App):
            # Panel derived from af2.App and use BaseJobRunner
            # to handle jobs
            jobRunner = self.currentTaskRunner()
            # Remove any previous job directories:
            fileutils.force_rmtree(jobRunner.nextJobDir())
            return jobRunner.write() 
[docs]    def writeCommandFile(self, cmdList):
        # Write the command args to the jobname.cmd file
        with open(self.jobname() + ".cmd", "w") as cmd_file:
            cmd_file.write(subprocess.list2cmdline(cmdList)) 
[docs]    def loadSettings(self, jobname):
        panel_state_file = jobname + '.json'
        if os.path.isfile(panel_state_file) and \
                
(os.path.getsize(panel_state_file) > 0):
            self.loadPanelState(filename=panel_state_file)