Exemple #1
0
 def updateJobs(self):
     from vistrails.gui.vistrails_window import _app
     self.view = _app.getViewFromLocator(self.locator)
     if self.view:
         self.name = "%s:%s" % (self.locator.short_name,
                                self.view.controller.get_pipeline_name())
     else:
         self.name = "%s:%s" % (self.locator.short_name,
                                self.workflow.version)
     self.setText(0, self.name)
     self.has_queue = True
     for job in self.jobs.itervalues():
         job.updateJob()
         if not job.job.finished and not job.queue:
             self.has_queue = False
     count = len(self.jobs)
     finished = sum([job.jobFinished for job in self.jobs.values()])
     self.setText(1, "(%s/%s)" % (finished, count))
     self.workflowFinished = (finished == count)
     if self.workflowFinished:
         self.setIcon(0, theme.get_current_theme().JOB_FINISHED)
     elif not self.has_queue:
         self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED)
     else:
         self.setIcon(0, theme.get_current_theme().JOB_CHECKING)
Exemple #2
0
 def updateJobs(self):
     """ Updates name and job states
     """
     name = self.parent().controller.get_pipeline_name(
         self.workflow.version)
     self.setText(0, name)
     self.setToolTip(
         0, 'Double-Click to View Pipeline "%s" with id %s' %
         (name, self.workflow.version))
     self.setToolTip(1, "Log id: %s" % self.workflow.id)
     self.has_handle = True
     for job in self.jobs.itervalues():
         job.updateJob()
         if not job.job.finished and not job.handle:
             self.has_handle = False
     count = len(self.jobs)
     finished = sum([job.jobFinished for job in self.jobs.values()])
     self.setText(1, "(%s/%s)" % (finished, count))
     self.workflowFinished = (finished == count)
     if self.workflowFinished:
         self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
     elif not self.has_handle:
         self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
     else:
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
Exemple #3
0
 def updateJobs(self):
     """ Updates name and job states
     """
     self.paused = False
     try:
         name = self.parent().controller.get_pipeline_name(
                                                        self.workflow.version)
         self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' %
                            (name, self.workflow.version))
     except KeyError:
         name = self.workflow.version
     self.setText(0, name)
     self.setToolTip(1, "Log id: %s" % self.workflow.id)
     changed = False
     self.has_handle = True
     for job in self.jobs.itervalues():
         if job.updateJob():
             changed = True
         if not job.job.finished and not job.handle:
             self.has_handle = False
     count = len(self.jobs)
     finished = sum([job.job.finished or job.job.ready for job in self.jobs.values()])
     self.setText(1, "(%s/%s)" % (finished, count))
     self.workflowFinished = (finished == count)
     if self.workflowFinished:
         self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
     elif not self.has_handle:
         self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
     else:
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
     return changed
Exemple #4
0
 def __init__(self, workflow, parent):
     QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
     self.workflow = workflow
     self.has_handle = True
     self.setIcon(0, theme.get_current_theme().PIPELINE_ICON)
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
     self.workflowFinished = False
     self.jobs = {}
     self.intermediates = {}
     self.updateJobs()
Exemple #5
0
 def __init__(self, workflow, parent):
     QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
     self.workflow = workflow
     self.has_queue = True
     self.setIcon(0, theme.get_current_theme().PIPELINE_ICON)
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
     self.workflowFinished = False
     self.jobs = {}
     self.intermediates = {}
     self.updateJobs()
 def __init__(self, name, error, parent=None):
     QtGui.QTreeWidgetItem.__init__(self, parent, [name, error.msg])
     self.setToolTip(1, error.msg)
     self.queue = error.queue
     if self.queue:
         self.setIcon(0, theme.get_current_theme().JOB_CHECKING)
         self.setToolTip(0, "This Job has a method to check if it has finished.")
     else:
         self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED)
         self.setToolTip(0, 'To check this job the workflow must be re-executed. Make sure "Run To Check" is checked.')
     self.jobFinished = False
Exemple #7
0
 def __init__(self, workflow, parent):
     QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
     self.workflow = workflow
     self.has_handle = True
     # Paused workflows will not be checked by the timer/"Check all" button
     self.paused = False
     self.setIcon(0, theme.get_current_theme().PIPELINE_ICON)
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
     self.workflowFinished = False
     self.jobs = {}
     self.intermediates = {}
     self.updateJobs()
Exemple #8
0
 def __init__(self, workflow, parent):
     QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
     self.workflow = workflow
     self.has_handle = True
     # Paused workflows will not be checked by the timer/"Check all" button
     self.paused = False
     self.setIcon(0, theme.get_current_theme().PIPELINE_ICON)
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
     self.workflowFinished = False
     self.jobs = {}
     self.intermediates = {}
     self.updateJobs()
Exemple #9
0
 def updateJob(self):
     if self.job.finished:
         self.jobFinished = self.job.finished
     self.setText(1, self.job.parameters.get('__message__',
                     "Finished" if self.jobFinished else "Running"))
     if self.jobFinished:
         self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
         self.setToolTip(0, "This Job Has Finished")
     elif self.monitor:
         self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
         self.setToolTip(0, "This Job is Running and Scheduled for Checking")
     else:
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
         self.setToolTip(0, "This Job is Running")
     self.setToolTip(1, self.job.id)
 def update_jobs(self):
     # check all jobs
     for workflow in self.workflowItems.values():
         # jobs without a queue can also be checked
         if not workflow.has_queue:
             if self.rerun.isChecked():
                 workflow.execute()
             continue
         if workflow.workflowFinished:
             continue
         for job in workflow.jobs.itervalues():
             if job.jobFinished:
                 continue
             try:
                 # call queue
                 job.jobFinished = job.queue.finished()
                 # old version of BatchQ needs to call .val()
                 if not isinstance(job.jobFinished, bool):
                     job.jobFinished = job.jobFinished.val()
                 if job.jobFinished:
                     job.setText(1, "Finished")
             except Exception, e:
                 debug.critical("Error checking job %s: %s" %
                                (workflow.name, str(e)))
             if job.jobFinished:
                 job.setIcon(0, theme.get_current_theme().JOB_FINISHED)
             workflow.countJobs()
         workflow.workflowFinished = len(workflow.jobs) == \
                      sum(j.jobFinished for j in workflow.jobs.itervalues())
         if workflow.workflowFinished:
             workflow.setIcon(0, theme.get_current_theme().JOB_FINISHED)
             workflow.setText(1, "Finished")
         workflow.countJobs()
         if workflow.workflowFinished:
             if self.autorun.isChecked():
                 self.updating_now = False
                 workflow.execute()
                 self.updating_now = True
                 continue
             ret = QtGui.QMessageBox.information(self, "Job Ready",
                     'Pending Jobs in workflow "%s" have finished, '
                     'continue execution now?' % workflow.name,
                     QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel)
             if ret == QtGui.QMessageBox.Ok:
                 self.updating_now = False
                 workflow.execute()
                 self.updating_now = True
Exemple #11
0
 def updateJob(self):
     if self.job.finished:
         self.jobFinished = self.job.finished
     self.setText(
         1,
         self.job.parameters.get(
             '__message__', "Finished" if self.jobFinished else "Running"))
     if self.jobFinished:
         self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
         self.setToolTip(0, "This Job Has Finished")
     elif self.handle:
         self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
         self.setToolTip(0,
                         "This Job is Running and Scheduled for Checking")
     else:
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
         self.setToolTip(0, "This Job is Running")
     self.setToolTip(1, self.job.id)
Exemple #12
0
 def __init__(self, controller, parent=None):
     self.controller = controller
     self.jobMonitor = controller.jobMonitor
     self.jobMonitor.setCallback(self)
     self.locator = controller.vistrail.locator
     QtGui.QTreeWidgetItem.__init__(self, parent,
                                    [self.locator.short_name, ''])
     self.setIcon(0, theme.get_current_theme().HISTORY_ICON)
     self.setToolTip(0, self.locator.name)
     self.workflowItems = {}
     self.load_running_jobs()
Exemple #13
0
 def __init__(self, controller, parent=None):
     self.controller = controller
     self.jobMonitor = controller.jobMonitor
     self.jobMonitor.setCallback(self)
     self.locator = controller.vistrail.locator
     QtGui.QTreeWidgetItem.__init__(self, parent,
                                    [self.locator.short_name, ''])
     self.setIcon(0, theme.get_current_theme().HISTORY_ICON)
     self.setToolTip(0, self.locator.name)
     self.workflowItems = {}
     self.load_running_jobs()
Exemple #14
0
 def __init__(self, workflow, parent):
     self.locator = BaseLocator.from_url(workflow.vistrail)
     QtGui.QTreeWidgetItem.__init__(self, parent, ['', ''])
     self.setToolTip(0, "Double-Click to View Pipeline")
     self.setToolTip(1, workflow.id)
     self.workflow = workflow
     self.has_queue = True
     self.setIcon(0, theme.get_current_theme().JOB_CHECKING)
     self.setExpanded(True)
     self.workflowFinished = False
     self.jobs = {}
     self.intermediates = {}
     self.updateJobs()
Exemple #15
0
 def updateJobs(self):
     """ Updates name and job states
     """
     name = self.parent().controller.get_pipeline_name(
                                                     self.workflow.version)
     self.setText(0, name)
     self.setToolTip(0, 'Double-Click to View Pipeline "%s" with id %s' %
                        (name, self.workflow.version))
     self.setToolTip(1, "Log id: %s" % self.workflow.id)
     self.has_queue = True
     for job in self.jobs.itervalues():
         job.updateJob()
         if not job.job.finished and not job.monitor:
             self.has_queue = False
     count = len(self.jobs)
     finished = sum([job.jobFinished for job in self.jobs.values()])
     self.setText(1, "(%s/%s)" % (finished, count))
     self.workflowFinished = (finished == count)
     if self.workflowFinished:
         self.setIcon(1, theme.get_current_theme().JOB_FINISHED)
     elif not self.has_queue:
         self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
     else:
         self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
 def __init__(self, controller, error, parent):
     if controller.vistrail.locator:
         self.name = "%s:%s" % (controller.vistrail.locator.short_name,
                                 controller.get_pipeline_name())
     else:
         self.name = "Untitled.vt:%s" % controller.get_pipeline_name()
         
     QtGui.QTreeWidgetItem.__init__(self, parent,
                 [self.name, error if isinstance(error, str) else error.msg])
     self.setToolTip(0, "Double-Click to View Pipeline")
     self.setToolTip(1, error if isinstance(error, str) else error.msg)
     
     self.controller = controller
     self.version = controller.current_version
     self.has_queue = True
     self.setIcon(0, theme.get_current_theme().JOB_CHECKING)
     self.workflowFinished = False
     self.jobs = {}
     from vistrails.gui.vistrails_window import _app
     self.view = _app.get_current_view()
    def add_job(self, controller, error, prev='', workflow=None):
        """ Adds job recursively """
        added = False
        if not prev:
            if controller.vistrail.locator:
                name = controller.vistrail.locator.short_name
            else:
                name = 'Untitled.vt'
            version_id = controller.current_version
            if (name, version_id) not in self.workflowItems:
                workflow = QWorkflowItem(controller, error, self.jobView)
                self.jobView.addTopLevelItem(workflow)
                self.workflowItems[(name, version_id)] = workflow

                # save job to configuration
                if controller.vistrail.locator:
                    conf = configuration.get_vistrails_configuration()
                    if not conf.has('runningJobsList') or not conf.runningJobsList:
                        conf_jobs = []
                    else:
                        conf_jobs = conf.runningJobsList.split(';')
                    if not conf_jobs:
                        conf_jobs = []
                    url = controller.vistrail.locator.to_url()
                    if '?' in url:
                        url += '&workflow=%d' % version_id
                    else:
                        url += '?workflow=%d' % version_id
                    if not url in conf_jobs:
                        conf_jobs.append(str(url))
                        conf.runningJobsList = ';'.join(conf_jobs)
                        configuration.get_vistrails_persistent_configuration(
                                      ).runningJobsList = conf.runningJobsList
            else:
                workflow = self.workflowItems[(name, version_id)]
        job_name = ((prev+'.') if prev else '') + error.module.__class__.__name__

        if not error.children:
            if not error.queue:
                # We allow jobs without queue objects, but they will
                # have to be checked by re-executing the entire workflow
                workflow.has_queue = False
                workflow.setIcon(0, theme.get_current_theme().JOB_SCHEDULED)
                workflow.setToolTip(0, 'To check this workflow it must be re-executed. Make sure "Run To Check" is checked.')

                #return False
            # remove any previous instance of this job, if name is shorter
            if id(error) in workflow.jobs and \
               len(job_name) > len(workflow.jobs[id(error)].text(0)):
                workflow.takeChild(workflow.indexOfChild(
                  workflow.jobs[id(error)]))
                del workflow.jobs[id(error)]
            # if we did not keep an already existing job, add it
            if id(error) not in workflow.jobs:
                job = QJobItem(job_name, error)
                workflow.addChild(job)
                workflow.jobs[id(error)] = job
                workflow.countJobs()
                return True
        else:
            for child in error.children:
                result = self.add_job(controller, child, job_name, workflow)
                if result:
                    added = True
        return added
Exemple #18
0
 def resume(self):
     self.paused = False
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)
Exemple #19
0
 def pause(self):
     self.paused = True
     self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
Exemple #20
0
 def pause(self):
     self.paused = True
     self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED)
Exemple #21
0
 def resume(self):
     self.paused = False
     self.setIcon(1, theme.get_current_theme().JOB_CHECKING)