From 28dbb06f44bc84f844c948d9bfcd443e86406741 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 20 May 2014 22:10:15 +0200 Subject: [PATCH 001/194] Made Jobs sharable between executions Before, running a new workflow would not use jobs from previous workflows, not even from the same workflow version. Now jobs exist outside workflow executions. Combined wit using the original module signature, this makes it work better as a cache. core/interpreter/job.py: - Jobs now exist outside workflows, but workflows still reference jobs. - Renamed modules -> jobs core/console_mode.py: Modified job manager method names gui/job_monitor.py: Modified job manager method names --- vistrails/core/console_mode.py | 6 +- vistrails/core/interpreter/job.py | 211 ++++++++++++++++-------------- vistrails/gui/job_monitor.py | 13 +- 3 files changed, 123 insertions(+), 107 deletions(-) diff --git a/vistrails/core/console_mode.py b/vistrails/core/console_mode.py index cf5aaeaaa..4f4d06601 100644 --- a/vistrails/core/console_mode.py +++ b/vistrails/core/console_mode.py @@ -122,7 +122,7 @@ def run_and_get_results(w_list, parameters='', workflow_info=None, jobMonitor = JobMonitor.getInstance() current_workflow = jobMonitor.currentWorkflow() if not current_workflow: - for job in jobMonitor._running_workflows.itervalues(): + for job in jobMonitor.workflows.itervalues(): try: job_version = int(job.version) except ValueError: @@ -154,12 +154,12 @@ def run_and_get_results(w_list, parameters='', workflow_info=None, if update_vistrail: controller.write_vistrail(locator) result.append(run) - if current_workflow.modules: + if current_workflow.jobs: if current_workflow.completed(): run.job = "COMPLETED" else: run.job = "RUNNING: %s" % current_workflow.id - for job in current_workflow.modules.itervalues(): + for job in current_workflow.jobs.itervalues(): if not job.finished: run.job += "\n %s %s %s" % (job.start, job.name, job.description()) print run.job diff --git a/vistrails/core/interpreter/job.py b/vistrails/core/interpreter/job.py index fe04c60e1..94526bedf 100644 --- a/vistrails/core/interpreter/job.py +++ b/vistrails/core/interpreter/job.py @@ -51,17 +51,14 @@ import unittest import weakref - JOBS_FILENAME = "jobs.json" - class BaseMonitor(object): def finished(self): """Indicates whether the job has completed (module can resume). """ raise NotImplementedError - class JobMixin(NotCacheable): """ Mixin for suspendable modules. @@ -144,15 +141,15 @@ def getId(self, params): class Workflow(object): - """ Represents a suspended workflow. + """ Represents a workflow that has jobs. It can have one or several suspended modules. It can be serialized to disk. """ def __init__(self, vistrail, version, name='untitled', id=None, user=None, - start=None, modules=[]): + start=None, jobs=None): """ __init__(vistrail: str, version: str/int, name: str, id: str, - user: str, start: str, modules: list) -> None + user: str, start: str, jobs: list) -> None vistrail - the vistrail url version - workflow version @@ -160,7 +157,7 @@ def __init__(self, vistrail, version, name='untitled', id=None, user=None, id - persistent identifier user - who started the job start - start time - finished - is it finished or running? + jobs - a dict with jobs """ self.vistrail = vistrail self.version = version @@ -168,7 +165,7 @@ def __init__(self, vistrail, version, name='untitled', id=None, user=None, self.id = id if id else str(uuid1()) self.user = getpass.getuser() self.start = start if start else str(datetime.datetime.now()) - self.modules = modules if modules else {} + self.jobs = jobs if jobs else {} # parent modules are stored as temporary exceptions self.parents = {} @@ -180,19 +177,13 @@ def to_dict(self): wf['name'] = self.name wf['user'] = self.user wf['start'] = self.start - modules = dict() - for module in self.modules.itervalues(): - modules[module.id] = module.to_dict() - wf['modules'] = modules + wf['jobs'] = self.jobs.keys() return wf @staticmethod def from_dict(wf): - modules = {} - for id, module in wf['modules'].iteritems(): - modules[id] = Job.from_dict(module) return Workflow(wf['vistrail'], wf['version'], wf['name'], wf['id'], - wf['user'], wf['start'], modules) + wf['user'], wf['start'], wf['jobs']) def __eq__(self, other): if self.vistrail != other.vistrail: return False @@ -201,19 +192,19 @@ def __eq__(self, other): if self.id != other.id: return False if self.user != other.user: return False if self.start != other.start: return False - if len(self.modules) != len(other.modules): return False - if self.modules != other.modules: return False + if len(self.jobs) != len(other.jobs): return False + if set(self.jobs) != set(other.jobs): return False return True def reset(self): - for job in self.modules.itervalues(): + for job in self.jobs.itervalues(): job.reset() self.parents = {} def completed(self): """ Returns true if there are no suspended jobs """ - for job in self.modules.itervalues(): + for job in self.jobs.itervalues(): if not job.finished: return False return True @@ -287,7 +278,8 @@ def getInstance(*args, **kwargs): def __init__(self, filename=None): self._current_workflow = None - self._running_workflows = {} + self.workflows = {} + self.jobs = {} self.callback = None self.load_from_file(filename) @@ -306,21 +298,42 @@ def __serialize__(self): serializes the running jobs to json """ + _dict = {} + jobs = dict() - for id, workflow in self._running_workflows.items(): - jobs[id] = workflow.to_dict() - return json.dumps(jobs) + for id, job in self.jobs.items(): + jobs[id] = job.to_dict() + _dict['jobs'] = jobs + + workflows = dict() + for id, workflow in self.workflows.items(): + workflows[id] = workflow.to_dict() + _dict['workflows'] = workflows + + return json.dumps(_dict) def __unserialize__(self, s): """ __unserialize__(s: str) -> None unserializes the running jobs from json """ - jobs = json.loads(s) - self._running_workflows = {} - for id, workflow in jobs.iteritems(): - self._running_workflows[id] = Workflow.from_dict(workflow) - return self._running_workflows + + _dict = json.loads(s) + + jobs = _dict.get('jobs', {}) + self.jobs = {} + for id, job in jobs.iteritems(): + self.jobs[id] = Job.from_dict(job) + + workflows = _dict.get('workflows', {}) + self.workflows = {} + for id, workflow in workflows.iteritems(): + workflow['jobs'] = dict([(i, self.jobs[i]) + for i in workflow['jobs'] + if i in self.jobs]) + wf = Workflow.from_dict(workflow) + self.workflows[id] = wf + return self.workflows def save_to_file(self, filename=None): """ save_to_file(filename: str) -> None @@ -348,36 +361,50 @@ def load_from_file(self, filename=None): f.close() return result + def addWorkflow(self, workflow): + """ addWorkflow(workflow: Workflow) -> None + + """ + self.workflows[workflow.id] = workflow + for id, job in workflow.jobs.iteritems(): + self.jobs[id] = job + def getWorkflow(self, id): """ getWorkflow(id: str) -> Workflow Checks if a workflow exists using its id and returns it """ - return self._running_workflows.get(id, None) + return self.workflows.get(id, None) def deleteWorkflow(self, id): """ deleteWorkflow(id: str) -> None deletes a workflow """ - del self._running_workflows[id] + workflow = self.workflows[id] + del self.workflows[id] + # delete jobs that only occur in this workflow + for job_id in workflow.jobs: + delete = True + for wf in self.workflows: + if job_id in wf.jobs: + delete = False + if delete: + del self.jobs[job_id] if self.callback: self.callback.deleteWorkflow(id) - def deleteJob(self, id, parent_id=None): + def deleteJob(self, id): """ deleteJob(id: str, parent_id: str) -> None - deletes a job - if parent_id is None, the current workflow is used + deletes a job from all workflows """ - if not parent_id: - if not self._current_workflow: - raise Exception("No workflow is running!") - return - parent_id = self._current_workflow.id - del self._running_workflows[parent_id].modules[id] + del self.jobs[id] + for wf in self.workflows: + if id in wf.jobs: + del wf.jobs[id] if self.callback: - self.callback.deleteJob(id, parent_id) + self.callback.deleteJob(id) ############################################################################## # _current_workflow methods @@ -404,21 +431,21 @@ def startWorkflow(self, workflow): def addJobRec(self, obj, parent_id=None): workflow = self.currentWorkflow() id = obj.signature - if id not in workflow.modules and parent_id: + if id not in workflow.jobs and parent_id: id = '%s/%s' % (parent_id, obj.signature) if obj.children: for child in obj.children: self.addJobRec(child, id) return - if obj.signature in workflow.modules: + if obj.signature in workflow.jobs: # this is an already existing new-style job - # mark that it have been used - workflow.modules[obj.signature].mark() + # mark that it has been used + workflow.jobs[obj.signature].mark() return - if id in workflow.modules: + if id in workflow.jobs: # this is an already existing new-style job - # mark that it have been used - workflow.modules[id].mark() + # mark that it has been used + workflow.jobs[id].mark() return # this is a new old-style job that we need to add self.addJob(id, {'__message__':obj.msg}, obj.name) @@ -443,7 +470,7 @@ def finishWorkflow(self): self.addJobRec(parent) # Assume all unfinished jobs that were not updated are now finished - for job in workflow.modules.values(): + for job in workflow.jobs.values(): if not job.finished and not job.updated: job.finish() if self.callback: @@ -454,15 +481,9 @@ def finishWorkflow(self): def addJob(self, id, params=None, name='', finished=False): """ addJob(id: str, params: dict, name: str, finished: bool) -> uuid - Adds a module to the current running workflow + Adds a lob to the currently running workflow """ - workflow = self.currentWorkflow() - if not workflow: - return # ignore non-monitored jobs - # we add workflows permanently if they have at least one job - if not workflow.id in self._running_workflows: - self._running_workflows[workflow.id] = workflow params = params if params is not None else {} @@ -475,8 +496,14 @@ def addJob(self, id, params=None, name='', finished=False): job.finished = finished # we want to keep the start date else: - self._current_workflow.modules[id] = Job(id, params, name, - finished=finished) + job = Job(id, params, name, finished=finished) + self.jobs[id] = job + + workflow = self.currentWorkflow() + if workflow: + workflow.jobs[id] = job + # we add workflows permanently if they have at least one job + self.workflows[workflow.id] = workflow if self.callback: self.callback.addJob(self.getJob(id)) @@ -534,36 +561,26 @@ def checkJob(self, module, id, monitor): def getJob(self, id): """ getJob(id: str) -> Job - Checks if a module exists using its id and returns it - """ - if not self._current_workflow: - return None - return self._current_workflow.modules.get(id, None) + return self.jobs.get(id, None) def getCache(self, id): """ getCache(id: str) -> Job Checks if a completed module exists using its id and returns it """ - if not self._current_workflow: - return None - job = self._current_workflow.modules.get(id, None) - if not job: - return None - return job if job.finished else None + job = self.jobs.get(id, None) + return job if job and job.finished else None def hasJob(self, id): """ hasJob(id: str) -> bool - Checks if a module exists + Checks if a job exists """ - if not self._current_workflow: - return None - return id in self._current_workflow.modules + return id in self.jobs def updateUrl(self, new, old): - for workflow in self._running_workflows.values(): + for workflow in self.workflows.values(): if workflow.vistrail == old: workflow.vistrail = new @@ -597,40 +614,40 @@ def isDone(self, monitor): class TestJob(unittest.TestCase): def test_job(self): - job = JobMonitor.getInstance() - module1 = Job('`13/5', {'a':3, 'b':'7'}) - module2 = Job('3', {'a':6}, 'my_name', 'a_string_date', True) + jm = JobMonitor.getInstance() + job1 = Job('`13/5', {'a':3, 'b':'7'}) + job2 = Job('3', {'a':6}, 'my_name', 'a_string_date', True) # test module to/from dict - module3 = Job.from_dict(module2.to_dict()) - self.assertEqual(module2, module3) + job3 = Job.from_dict(job2.to_dict()) + self.assertEqual(job2, job3) workflow1 = Workflow('a.vt', 26) workflow2 = Workflow('b.vt', 'tagname', 'myjob', 'myid', 'tommy', '2013-10-07 13:06', - {module1.id: module1, module2.id: module2}) + {job1.id: job1, job2.id: job2}) # test workflow to/from dict workflow3 = Workflow.from_dict(workflow2.to_dict()) self.assertEqual(workflow2, workflow3) # test start/finish job - job.startWorkflow(workflow2) - self.assertEqual(workflow2, job._current_workflow) - job.finishWorkflow() - self.assertEqual(None, job._current_workflow) + jm.startWorkflow(workflow2) + self.assertEqual(workflow2, jm._current_workflow) + jm.finishWorkflow() + self.assertEqual(None, jm._current_workflow) # test add job - job.startWorkflow(workflow2) - job.addJob('my_uuid_id', {'myparam': 0}) - self.assertIn('my_uuid_id', workflow2.modules) - job.finishWorkflow() + jm.startWorkflow(workflow2) + jm.addJob('my_uuid_id', {'myparam': 0}) + self.assertIn('my_uuid_id', workflow2.jobs) + jm.finishWorkflow() # test serialization - job._running_workflows[workflow1.id] = workflow1 - job._running_workflows[workflow2.id] = workflow2 - job.save_to_file() - job.load_from_file() - self.assertIn(workflow1.id, job._running_workflows) - self.assertIn(workflow2.id, job._running_workflows) - self.assertEqual(workflow1, job._running_workflows[workflow1.id]) - self.assertEqual(workflow2, job._running_workflows[workflow2.id]) - job._running_workflows = dict() + jm.addWorkflow(workflow1) + jm.addWorkflow(workflow2) + jm.save_to_file() + jm.load_from_file() + self.assertIn(workflow1.id, jm.workflows) + self.assertIn(workflow2.id, jm.workflows) + self.assertEqual(workflow1, jm.workflows[workflow1.id]) + self.assertEqual(workflow2, jm.workflows[workflow2.id]) + jm.workflows = dict() diff --git a/vistrails/gui/job_monitor.py b/vistrails/gui/job_monitor.py index 89526ace9..30f2e235e 100644 --- a/vistrails/gui/job_monitor.py +++ b/vistrails/gui/job_monitor.py @@ -52,7 +52,7 @@ class QNumberValidator(QtGui.QIntValidator): - """Variant of QIntValidaator that rejects Intermediate values. + """Variant of QIntValidator that rejects Intermediate values. Intermediate strings are strings that could be the left part of an Acceptable string. @@ -79,7 +79,6 @@ def contextMenuEvent(self, event): item.stdout) menu.addAction(act) act = QtGui.QAction("View Standard &Error", self) - act.setStatusTip("View Standard Error in new window") QtCore.QObject.connect(act, QtCore.SIGNAL("triggered()"), item.stderr) @@ -187,7 +186,7 @@ def addJobRec(self, obj, parent_id=None): base = (workflowItem.intermediates[parent_id] if parent_id is not None else workflowItem) id = obj.signature - if id not in workflow.modules and parent_id: + if id not in workflow.jobs and parent_id: id = '%s/%s' % (parent_id, obj.signature) if obj.children: # add parent items and their children @@ -196,13 +195,13 @@ def addJobRec(self, obj, parent_id=None): obj.name, base) for child in obj.children: self.addJobRec(child, id) - elif obj.signature in workflow.modules: + elif obj.signature in workflow.jobs: # this is an already existing new-style job job = workflowItem.jobs[obj.signature] job.monitor = obj.monitor # need to force takeChild base.addChild(job.parent().takeChild(job.parent().indexOfChild(job))) - elif id in workflow.modules: + elif id in workflow.jobs: # this is an already existing old-style job job = workflowItem.jobs[id] job.monitor = obj.monitor @@ -402,14 +401,14 @@ def item_clicked(self, item): def load_running_jobs(self): """Loads the current jobs from the JSON file. """ - workflows = self.jobMonitor._running_workflows + workflows = self.jobMonitor.workflows # update gui for workflow in workflows.itervalues(): if workflow.id not in self.workflowItems: workflowItem = QWorkflowItem(workflow, self.jobView) self.jobView.addTopLevelItem(workflowItem) self.workflowItems[workflow.id] = workflowItem - for job in workflow.modules.itervalues(): + for job in workflow.jobs.itervalues(): if job.id not in workflowItem.jobs: workflowItem.jobs[job.id] = QJobItem(job, workflowItem) workflowItem.updateJobs() From 6439e21efe6ff0e0a484a13e59b8642b35c7298e Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 27 May 2014 17:00:23 +0200 Subject: [PATCH 002/194] Set default job name to module class name core/interpreter/job.py: Set default job nasme to self.__class__.__name__ Renamed _running_Workflows -> workflows gui/application.py gui/vistrail_controller.py gui/vistrails_window.py --- vistrails/core/interpreter/job.py | 2 +- vistrails/gui/application.py | 4 ++-- vistrails/gui/vistrail_controller.py | 14 +++++++------- vistrails/gui/vistrails_window.py | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/vistrails/core/interpreter/job.py b/vistrails/core/interpreter/job.py index b7707840d..99f9b835b 100644 --- a/vistrails/core/interpreter/job.py +++ b/vistrails/core/interpreter/job.py @@ -79,7 +79,7 @@ def compute(self): params = self.readInputs() params = self.startJob(params) jm = JobMonitor.getInstance() - jm.addJob(self.signature, params, "name-TODO") + jm.addJob(self.signature, params, self.__class__.__name__) def update_upstream(self): if not hasattr(self, 'signature'): diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index 563a1923e..cd328a350 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -231,7 +231,7 @@ def init(self, optionsDict=None, args=[]): if self.temp_configuration.check('jobList'): job = JobMonitor.getInstance() - for i, j in job._running_workflows.iteritems(): + for i, j in job.workflows.iteritems(): print "JOB: ", i, j.vistrail, j.version, j.start, \ "FINISHED" if j.completed() else "RUNNING" elif self.temp_configuration.check('jobRun'): @@ -746,7 +746,7 @@ def parse_input_args_from_other_instance(self, msg): j.version, j.start, "FINISHED" if j.completed() else "RUNNING") - for i, j in job._running_workflows.iteritems()]) + for i, j in job.workflows.iteritems()]) if self.temp_configuration.check('jobRun'): # skip waiting for completion autoRun = self.configuration.check('autoRun') diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index d6cc7b390..e9020821f 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -414,16 +414,16 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): if not jobView.jobMonitor.currentWorkflow(): version_id = self.current_version url = self.locator.to_url() - # check if a job for this workflow exists + # check if jobs for this workflow exists current_workflow = None - for job in jobView.jobMonitor._running_workflows.itervalues(): + for wf in jobView.jobMonitor.workflows.itervalues(): try: - job_version = int(job.version) + wf_version = int(wf.version) except ValueError: - job_version = self.vistrail.get_version_number(job.version) - if version_id == job_version and url == job.vistrail: - current_workflow = job - jobView.jobMonitor.startWorkflow(job) + wf_version = self.vistrail.get_version_number(wf.version) + if version_id == wf_version and url == wf.vistrail: + current_workflow = wf + jobView.jobMonitor.startWorkflow(wf) if not current_workflow: current_workflow = JobWorkflow(url, version_id) jobView.jobMonitor.startWorkflow(current_workflow) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index b43d179a6..df1fa67ce 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1868,7 +1868,7 @@ def close_vistrail(self, current_view=None, quiet=False): from vistrails.core.interpreter.job import JobMonitor if res == DISCARD_BUTTON: res2 = SAVE_BUTTON - for workflow in JobMonitor.getInstance()._running_workflows.values(): + for workflow in JobMonitor.getInstance().workflows.values(): if workflow.vistrail != locator.to_url(): continue action = vistrail.db_get_action_by_id(workflow.version) From 9e1523b490312c95a129d8e1849502fc99a3c062 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 28 May 2014 16:26:06 +0200 Subject: [PATCH 003/194] Added method for persistent caching of outputs using jobs Adds persistent caching of outputs for any module using new control parameter job_cache core/modules/vistrails_module.py: Added job_cache control parameter and checking/setting job cache for modules that use it. gui/module_iteration.py: Added gui to set job_cache --- vistrails/core/modules/vistrails_module.py | 69 +++++++++++++++++++++- vistrails/gui/module_iteration.py | 18 +++++- 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py index 4b552f066..394dfc3ca 100644 --- a/vistrails/core/modules/vistrails_module.py +++ b/vistrails/core/modules/vistrails_module.py @@ -59,6 +59,8 @@ WHILE_OUTPUT_KEY = 'while_output' WHILE_MAX_KEY = 'while_max' WHILE_DELAY_KEY = 'while_delay' +CACHE_KEY = 'cache' +JOB_CACHE_KEY = 'job_cache' class NeedsInputPort(Exception): def __init__(self, obj, port): @@ -384,6 +386,69 @@ def update_upstream_port(self, port_name): if connector.obj.get_output(connector.port) is InvalidOutput: self.remove_input_connector(port_name, connector) + + def useJobCache(self): + """ useJobCache() -> Module/None + Checks if this is a job cache + """ + if not self.moduleInfo.get('pipeline', None): + return False + p_modules = self.moduleInfo['pipeline'].modules + p_module = p_modules[self.moduleInfo['moduleId']] + if p_module.has_control_parameter_with_name(JOB_CACHE_KEY): + jobCache = p_module.get_control_parameter_by_name( + JOB_CACHE_KEY).value + if jobCache and jobCache.lower() == 'true': + return p_module + return False + + def setJobCache(self): + """ setJobCache() -> Boolean + Checks if this is a job cache and it exists + """ + p_module = self.useJobCache() + if not p_module: + return False + from vistrails.core.interpreter.job import JobMonitor + jm = JobMonitor.getInstance() + specs = p_module.sourcePorts() + if jm.getCache(self.signature): + self.cache = jm.getCache(self.signature) + from vistrails.core.modules.basic_modules import Constant + for param, value in jm.getCache(self.signature).parameters.iteritems(): + # get type for output param + spec = [s for s in specs if s.name == param][0] + module = spec.descriptors()[0].module + if not issubclass(module, Constant): + raise ModuleError(self, "Trying to use a non-constant type a cache: %s" % spec.name) + self.set_output(param, module.translate_to_python(value)) + self.upToDate = True + return True + return False + + def addJobCache(self): + """ addJobCache() -> None + Add outputs from job cache + """ + p_module = self.useJobCache() + if not p_module: + return False + from vistrails.core.interpreter.job import JobMonitor + jm = JobMonitor.getInstance() + specs = p_module.sourcePorts() + params = {} + if not jm.getCache(self.signature): + from vistrails.core.modules.basic_modules import Constant + for spec in specs: + if spec.name == 'self': + continue + # get type for output param + module = spec.descriptors()[0].module + if not issubclass(module, Constant): + raise ModuleError(self, "Trying to cache a non-constant type: %s" % spec.name) + params[spec.name] = module.translate_to_string(self.get_output(spec.name)) + jm.setCache(self.signature, params, p_module.name) + def update_upstream(self): """ update_upstream() -> None Go upstream from the current module, then update its upstream @@ -464,7 +529,8 @@ def update(self): elif self.computed: return self.logging.begin_update(self) - self.update_upstream() + if not self.setJobCache(): + self.update_upstream() if self.upToDate: if not self.computed: self.logging.update_cached(self) @@ -495,6 +561,7 @@ def update(self): self.compute_while() else: self.compute() + self.addJobCache() self.computed = True except ModuleSuspended, e: self.had_error, self.was_suspended = False, True diff --git a/vistrails/gui/module_iteration.py b/vistrails/gui/module_iteration.py index 54081b900..841f0bd01 100644 --- a/vistrails/gui/module_iteration.py +++ b/vistrails/gui/module_iteration.py @@ -41,7 +41,7 @@ from PyQt4 import QtCore, QtGui from vistrails.core.modules.vistrails_module import LOOP_KEY, \ WHILE_COND_KEY, WHILE_INPUT_KEY, WHILE_OUTPUT_KEY, WHILE_MAX_KEY, \ - WHILE_DELAY_KEY + WHILE_DELAY_KEY, CACHE_KEY, JOB_CACHE_KEY from vistrails.gui.theme import CurrentTheme from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface @@ -172,6 +172,11 @@ def createButtons(self): whileLayout.addStretch(1) self.layout().addLayout(whileLayout) + self.jobCacheButton = QtGui.QCheckBox("Cache Output Persistently") + self.jobCacheButton.setToolTip('Cache the module results persistently to disk. (outputs must be constants)') + self.layout().addWidget(self.jobCacheButton) + self.layout().setStretch(2, 0) + self.layout().addStretch(1) self.buttonLayout = QtGui.QHBoxLayout() self.buttonLayout.setMargin(5) @@ -188,7 +193,7 @@ def createButtons(self): self.saveTriggered) self.connect(self.resetButton, QtCore.SIGNAL('clicked(bool)'), self.resetTriggered) - self.layout().setStretch(2, 0) + self.layout().setStretch(3, 0) self.update_module() self.pairwiseButton.toggled.connect(self.stateChanged) self.cartesianButton.toggled.connect(self.stateChanged) @@ -202,6 +207,7 @@ def createButtons(self): self.delayEdit.textChanged.connect(self.stateChanged) self.feedInputEdit.textChanged.connect(self.stateChanged) self.feedOutputEdit.textChanged.connect(self.stateChanged) + self.jobCacheButton.toggled.connect(self.stateChanged) def sizeHint(self): """ sizeHint() -> QSize @@ -300,6 +306,7 @@ def update_module(self, module=None): self.feedInputLabel.setVisible(False) self.feedOutputLabel.setVisible(False) self.portCombiner.setVisible(False) + self.jobCacheButton.setEnabled(False) return # set defaults self.pairwiseButton.setEnabled(True) @@ -321,6 +328,8 @@ def update_module(self, module=None): self.feedOutputLabel.setVisible(False) self.portCombiner.setVisible(False) self.portCombiner.setDefault(module) + self.jobCacheButton.setEnabled(True) + self.jobCacheButton.setChecked(False) if module.has_control_parameter_with_name(LOOP_KEY): type = module.get_control_parameter_by_name(LOOP_KEY).value self.pairwiseButton.setChecked(type=='pairwise') @@ -347,6 +356,9 @@ def update_module(self, module=None): if module.has_control_parameter_with_name(WHILE_OUTPUT_KEY): output = module.get_control_parameter_by_name(WHILE_OUTPUT_KEY).value self.feedOutputEdit.setText(output) + if module.has_control_parameter_with_name(JOB_CACHE_KEY): + jobCache = module.get_control_parameter_by_name(JOB_CACHE_KEY).value + self.jobCacheButton.setChecked(jobCache.lower()=='true') def updateVistrail(self): values = [] @@ -363,6 +375,8 @@ def updateVistrail(self): values.append((WHILE_DELAY_KEY, _while and self.delayEdit.text())) values.append((WHILE_INPUT_KEY, _while and self.feedInputEdit.text())) values.append((WHILE_OUTPUT_KEY,_while and self.feedOutputEdit.text())) + jobCache = self.jobCacheButton.isChecked() + values.append((JOB_CACHE_KEY, jobCache and str(jobCache))) for name, value in values: if value: if not self.module.has_control_parameter_with_name(name) or \ From 4b51e83b410ba3f08e4767e9acee06efa9f92fce Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 28 May 2014 16:47:32 +0200 Subject: [PATCH 004/194] Renamed ModuleIteration -> ModuleOptions Because it now contains non-looping options Also fixed issue with saving gui/module_iteration.py -> gui/module_options.py gui/pipeline_view.py: Changed action name gui/vistrails_window.py: Updated imports --- .../{module_iteration.py => module_options.py} | 17 ++++++++++------- vistrails/gui/pipeline_view.py | 4 ++-- vistrails/gui/vistrails_window.py | 8 ++++---- 3 files changed, 16 insertions(+), 13 deletions(-) rename vistrails/gui/{module_iteration.py => module_options.py} (98%) diff --git a/vistrails/gui/module_iteration.py b/vistrails/gui/module_options.py similarity index 98% rename from vistrails/gui/module_iteration.py rename to vistrails/gui/module_options.py index 841f0bd01..13bd76a63 100644 --- a/vistrails/gui/module_iteration.py +++ b/vistrails/gui/module_options.py @@ -34,9 +34,9 @@ ## ############################################################################### """ This file contains a dialog for editing options for how the given - VisTrails module is looped. + VisTrails module is executed. -QModuleIteration +QModuleOptions """ from PyQt4 import QtCore, QtGui from vistrails.core.modules.vistrails_module import LOOP_KEY, \ @@ -50,7 +50,7 @@ ############################################################################### -class QModuleIteration(QtGui.QDialog, QVistrailsPaletteInterface): +class QModuleOptions(QtGui.QDialog, QVistrailsPaletteInterface): """ QModuleIteration is a dialog for editing module looping options. @@ -62,7 +62,7 @@ def __init__(self, parent=None): """ QtGui.QDialog.__init__(self, parent) - self.setWindowTitle("Module Looping") + self.setWindowTitle("Module Execution Options") self.createButtons() self.update_module() @@ -229,10 +229,7 @@ def saveTriggered(self, checked = False): self.emit(QtCore.SIGNAL('doneConfigure'), self.module.id) def resetTriggered(self, checked = False): - self.state_changed = False self.update_module(self.module) - self.saveButton.setEnabled(False) - self.resetButton.setEnabled(False) def stateChanged(self, state=False, other=None): self.saveButton.setEnabled(True) @@ -307,6 +304,9 @@ def update_module(self, module=None): self.feedOutputLabel.setVisible(False) self.portCombiner.setVisible(False) self.jobCacheButton.setEnabled(False) + self.state_changed = False + self.saveButton.setEnabled(False) + self.resetButton.setEnabled(False) return # set defaults self.pairwiseButton.setEnabled(True) @@ -359,6 +359,9 @@ def update_module(self, module=None): if module.has_control_parameter_with_name(JOB_CACHE_KEY): jobCache = module.get_control_parameter_by_name(JOB_CACHE_KEY).value self.jobCacheButton.setChecked(jobCache.lower()=='true') + self.state_changed = False + self.saveButton.setEnabled(False) + self.resetButton.setEnabled(False) def updateVistrail(self): values = [] diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 6c5256129..dfd47364a 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -642,8 +642,8 @@ def createActions(self): QtCore.QObject.connect(self.viewDocumentationAct, QtCore.SIGNAL("triggered()"), self.viewDocumentation) - self.editLoopingAct = QtGui.QAction("Looping Options", self.scene()) - self.editLoopingAct.setStatusTip("Edit looping options") + self.editLoopingAct = QtGui.QAction("Execution Options", self.scene()) + self.editLoopingAct.setStatusTip("Edit module execution options") QtCore.QObject.connect(self.editLoopingAct, QtCore.SIGNAL("triggered()"), self.editLooping) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index df1fa67ce..1c8e6ee03 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1022,7 +1022,7 @@ def init_palettes(self): from vistrails.gui.debugger import QDebugger from vistrails.gui.module_configuration import QModuleConfiguration from vistrails.gui.module_documentation import QModuleDocumentation - from vistrails.gui.module_iteration import QModuleIteration + from vistrails.gui.module_options import QModuleOptions from vistrails.gui.module_palette import QModulePalette from vistrails.gui.module_info import QModuleInfo from vistrails.gui.paramexplore.param_view import QParameterView @@ -1087,7 +1087,7 @@ def init_palettes(self): (('controller_changed', 'set_controller'), ('module_changed', 'update_module'), ('descriptor_changed', 'update_descriptor'))), - ((QModuleIteration, True), + ((QModuleOptions, True), (('controller_changed', 'set_controller'), ('module_changed', 'update_module'))), ((QShellDialog, True), @@ -2442,8 +2442,8 @@ def show_documentation(self): self.qactions[action_name].setChecked(True) def show_looping_options(self): - from vistrails.gui.module_iteration import QModuleIteration - action_name = QModuleIteration.instance().get_title() + from vistrails.gui.module_options import QModuleOptions + action_name = QModuleOptions.instance().get_title() # easy way to make sure that looping options window is raised self.qactions[action_name].setChecked(False) self.qactions[action_name].setChecked(True) From 1d1529f0027049757f8f1f2c53c13569dc687974 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 5 Aug 2014 19:29:54 -0400 Subject: [PATCH 005/194] Makes log record propagation a bit saner I don't understand how this is not a Python bug, but the users seem happy about this. It is terrible. --- vistrails/core/debug.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index a5fa79e19..8c7b52204 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -134,6 +134,19 @@ def emit(self, record): ################################################################################ +class LevelCheckerLogger(logging.Logger): + def callHandlers(self, record): + """Variant that checks the parents' levels when propagating. + """ + for hdlr in self.handlers: + if record.levelno >= hdlr.level: + hdlr.handle(record) + if (self.propagate and self.parent and + self.parent.isEnabledFor(record.levelno)): + self.parent.handle(record) + +################################################################################ + class DebugPrint(object): """ Class to be used for debugging information. @@ -184,7 +197,11 @@ def make_logger(self, f=None): """ # Setup root logger + oldLoggerClass = logging.getLoggerClass() + logging.setLoggerClass(LevelCheckerLogger) self.logger = logging.getLogger('VisLog') + assert isinstance(self.logger, LevelCheckerLogger) + logging.setLoggerClass(oldLoggerClass) self.logger.setLevel(logging.DEBUG) self.format = logging.Formatter("%(asctime)s %(levelname)s:\n%(message)s") From 30c7410bda1519f2aa3dfe3d1800ba564f18703b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 6 Aug 2014 13:05:29 -0400 Subject: [PATCH 006/194] Makes LevelCheckerLogger instanciation safer --- vistrails/core/debug.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 8c7b52204..de10b9c95 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -34,7 +34,6 @@ ############################################################################### import inspect import logging -import logging.handlers import os import pdb import re @@ -197,11 +196,16 @@ def make_logger(self, f=None): """ # Setup root logger - oldLoggerClass = logging.getLoggerClass() - logging.setLoggerClass(LevelCheckerLogger) - self.logger = logging.getLogger('VisLog') + logging._acquireLock() + try: + oldLoggerClass = logging.getLoggerClass() + logging.setLoggerClass(LevelCheckerLogger) + self.logger = logging.getLogger('VisLog') + logging.setLoggerClass(oldLoggerClass) + finally: + logging._releaseLock() assert isinstance(self.logger, LevelCheckerLogger) - logging.setLoggerClass(oldLoggerClass) + self.logger.setLevel(logging.DEBUG) self.format = logging.Formatter("%(asctime)s %(levelname)s:\n%(message)s") From 0b7263fe45bddc3195db27075f0e7fa0fbf99922 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 6 Aug 2014 13:05:49 -0400 Subject: [PATCH 007/194] Prevents "no handlers for logger "root"" warning --- vistrails/core/debug.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index de10b9c95..697cc3bd6 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -142,7 +142,15 @@ def callHandlers(self, record): hdlr.handle(record) if (self.propagate and self.parent and self.parent.isEnabledFor(record.levelno)): - self.parent.handle(record) + c = self.parent + while c: + for hdlr in c.handlers: + if record.levelno >= hdlr.level: + hdlr.handle(record) + if not c.propagate: + c = None #break out + else: + c = c.parent ################################################################################ From 7337e8e008916d61f6ecdfb09e7f413152d2da0c Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 12 Aug 2014 15:03:10 -0400 Subject: [PATCH 008/194] Loads packages from pkg_resources entry points --- vistrails/core/modules/module_registry.py | 4 ++- vistrails/core/packagemanager.py | 36 +++++++++++++++++++++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index 0c0b9c8c0..d1f9715d5 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -1615,11 +1615,13 @@ def add_output_port(self, module, portName, portSignature, optional=False, optional, sort_key, None, None, None, None, docstring, shape, min_conns, max_conns, depth) - def create_package(self, codepath, load_configuration=True): + def create_package(self, codepath, load_configuration=True, prefix=None): package_id = self.idScope.getNewId(Package.vtType) package = Package(id=package_id, codepath=codepath, load_configuration=load_configuration) + if prefix is not None: + package.prefix = prefix return package def initialize_package(self, package): diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index fce92cb3b..a6046050f 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -268,11 +268,11 @@ def finalize_packages(self): global _package_manager _package_manager = None - def get_available_package(self, codepath): + def get_available_package(self, codepath, prefix=None): try: pkg = self._available_packages[codepath] except KeyError: - pkg = self._registry.create_package(codepath) + pkg = self._registry.create_package(codepath, prefix=prefix) self._available_packages[codepath] = pkg return pkg @@ -777,9 +777,41 @@ def search(dirname): # Finds standard packages packages = self.import_packages_module() search(os.path.dirname(packages.__file__)) + + # Finds user packages userpackages = self.import_user_packages_module() search(os.path.dirname(userpackages.__file__)) + # Finds plugin packages + try: + from pkg_resources import iter_entry_points + except ImportError: + pass + else: + for entry_point in iter_entry_points('vistrails.packages'): + # Reads module name and turns it into prefix and codepath + name = entry_point.module_name.rsplit('.', 1) + if len(name) > 1: + prefix, name = name + else: + prefix = '' + name, = name + + # Check that the module is importable and get path + # FIXME: packages are not zip-safe because of this logic! + path = entry_point.load().__file__ + if path.endswith('.py'): + path = path[:-3] + elif path.endswith('.pyc'): + path = path[:-4] + if path.endswith('__init__'): + path = path[:-9] + if is_vistrails_package(path): + # Ok, accept the name + pkg_name_set.add(name) + # Mke sure a Package gets created, with the right prefix + self.get_available_package(name, prefix=prefix) + pkg_name_set.update(self._package_list) return list(pkg_name_set) From 0326f6d045e4c1e3ba70c2857f01443b1a99867b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 12 Aug 2014 15:25:36 -0400 Subject: [PATCH 009/194] Fills in _available_packages early --- vistrails/core/packagemanager.py | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index ab2588146..2d6c445e5 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -164,7 +164,6 @@ def __init__(self, registry, startup): {'basic_modules': 'vistrails.core.modules.', 'abstraction': 'vistrails.core.modules.'} - # self._registry = None self._userpackages = None self._packages = None self._abstraction_pkg = None @@ -176,6 +175,9 @@ def __init__(self, registry, startup): self._orig_import = __builtin__.__import__ __builtin__.__import__ = self._import_override + # Compute the list of available packages, _available_packages + self.build_available_package_names_list() + for pkg in self._startup.enabled_packages.itervalues(): self.add_package(pkg.name, prefix=pkg.prefix) @@ -561,9 +563,6 @@ def initialize_packages(self,prefix_dictionary={}): the prefix such that prefix + package_name is a valid python import.""" - packages = self.import_packages_module() - userpackages = self.import_user_packages_module() - failed = [] # import the modules app = get_vistrails_application() @@ -754,9 +753,9 @@ def available_package_names_list(self): The distinction between package names, identifiers and code-paths is described in doc/package_system.txt """ + return self._available_packages.keys() - pkg_name_set = set() - + def build_available_package_names_list(self): def is_vistrails_package(path): return ((path.endswith('.py') and not path.endswith('__init__.py') and @@ -764,21 +763,23 @@ def is_vistrails_package(path): os.path.isdir(path) and \ os.path.isfile(os.path.join(path, '__init__.py'))) - def search(dirname): + def search(dirname, prefix): for name in os.listdir(dirname): if is_vistrails_package(os.path.join(dirname, name)): if name.endswith('.py'): name = name[:-3] - pkg_name_set.add(name) + self.get_available_package(name, prefix=prefix) # Finds standard packages packages = self.import_packages_module() - search(os.path.dirname(packages.__file__)) + search(os.path.dirname(packages.__file__), + prefix='vistrails.packages.') # Finds user packages userpackages = self.import_user_packages_module() if userpackages is not None: - search(os.path.dirname(userpackages.__file__)) + search(os.path.dirname(userpackages.__file__), + prefix='userpackages.') # Finds plugin packages try: @@ -805,13 +806,10 @@ def search(dirname): if path.endswith('__init__'): path = path[:-9] if is_vistrails_package(path): - # Ok, accept the name - pkg_name_set.add(name) - # Mke sure a Package gets created, with the right prefix + # Create the Package, with the right prefix self.get_available_package(name, prefix=prefix) - pkg_name_set.update(self._package_list) - return list(pkg_name_set) + return self._available_packages.keys() def dependency_graph(self): """dependency_graph() -> Graph. Returns a graph with package From 54e770a67a3490229dea2b2f5e7ff578936c81b8 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 5 Aug 2014 18:44:49 -0400 Subject: [PATCH 010/194] Renames debug's logger VisLog -> vistrails --- vistrails/core/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 697cc3bd6..29e6ae5e7 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -208,7 +208,7 @@ def make_logger(self, f=None): try: oldLoggerClass = logging.getLoggerClass() logging.setLoggerClass(LevelCheckerLogger) - self.logger = logging.getLogger('VisLog') + self.logger = logging.getLogger('vistrails') logging.setLoggerClass(oldLoggerClass) finally: logging._releaseLock() From 0d6e56357a656e5d4b7547ab16de899d736be52c Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 27 Aug 2014 16:06:20 -0400 Subject: [PATCH 011/194] Different approach -- two loggers The logger that the 'debug' module logs on is now vistrails.logger. It is internal and API users should NOT configure it (change level or attach filters/handlers to it). It is controlled by the 'debug' module. This internal logger re-logs to a 'vistrails' logger, which is meant to be configured by API users if needed -- changing the level of this one won't break anything. --- vistrails/core/debug.py | 46 ++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 29e6ae5e7..fdb1bb636 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -133,24 +133,16 @@ def emit(self, record): ################################################################################ -class LevelCheckerLogger(logging.Logger): - def callHandlers(self, record): - """Variant that checks the parents' levels when propagating. - """ - for hdlr in self.handlers: - if record.levelno >= hdlr.level: - hdlr.handle(record) - if (self.propagate and self.parent and - self.parent.isEnabledFor(record.levelno)): - c = self.parent - while c: - for hdlr in c.handlers: - if record.levelno >= hdlr.level: - hdlr.handle(record) - if not c.propagate: - c = None #break out - else: - c = c.parent +class LoggerHandler(logging.Logger): + """A logging Handler Handler re-logs on a specified Logger. + """ + def __init__(self, logger): + logging.Handler.__init__(self) + self.logger = logger + + def emit(self, record): + if self.logger.isEnabledFor(record.levelno): + self.logger.handle(record) ################################################################################ @@ -203,16 +195,8 @@ def make_logger(self, f=None): We will configure log so it outputs to both stderr and a file. """ - # Setup root logger - logging._acquireLock() - try: - oldLoggerClass = logging.getLoggerClass() - logging.setLoggerClass(LevelCheckerLogger) - self.logger = logging.getLogger('vistrails') - logging.setLoggerClass(oldLoggerClass) - finally: - logging._releaseLock() - assert isinstance(self.logger, LevelCheckerLogger) + # Internal logger, the one we log on + self.logger = logging.getLogger('vistrails.logger') self.logger.setLevel(logging.DEBUG) self.format = logging.Formatter("%(asctime)s %(levelname)s:\n%(message)s") @@ -234,6 +218,12 @@ def make_logger(self, f=None): self.console.setLevel(logging.WARNING) self.logger.addHandler(self.console) + # We also propagate to a second logger, that API users might want to + # configure + self.visible_logger = logging.getLogger('vistrails') + self.logger.propagate = False + self.logger.addHandler(LoggerHandler(self.visible_logger)) + # if system.python_version() <= (2,4,0,'',0): # raise VersionTooLow('Python', '2.4.0') From 224f49e8df749b15a8264c56d13ecca24de86f6f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 27 Aug 2014 16:22:39 -0400 Subject: [PATCH 012/194] Importing debug no longer adds a console handler This means that a root logger should either be configured (usually the case when VisTrails is used by something else) or log_to_console() should be called to add the console StreamHandler to the root logger. --- vistrails/core/debug.py | 14 ++++++++------ vistrails/run.py | 4 ++++ vistrails/tests/runtestsuite.py | 4 ++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index fdb1bb636..5c08f91cc 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -133,7 +133,7 @@ def emit(self, record): ################################################################################ -class LoggerHandler(logging.Logger): +class LoggerHandler(logging.Handler): """A logging Handler Handler re-logs on a specified Logger. """ def __init__(self, logger): @@ -212,11 +212,10 @@ def make_logger(self, f=None): if f: self.set_logfile(f) - #then we define a handler to log to the console + # Then we define a handler to log to the console self.console = logging.StreamHandler() self.console.setFormatter(self.format) self.console.setLevel(logging.WARNING) - self.logger.addHandler(self.console) # We also propagate to a second logger, that API users might want to # configure @@ -224,9 +223,6 @@ def make_logger(self, f=None): self.logger.propagate = False self.logger.addHandler(LoggerHandler(self.visible_logger)) -# if system.python_version() <= (2,4,0,'',0): -# raise VersionTooLow('Python', '2.4.0') - def __init__(self): self.make_logger() self.app = None @@ -286,6 +282,12 @@ def rotate_file_if_necessary(filename): except Exception, e: self.critical("Could not set log file %s: %s" % f, e) + def log_to_console(self, enable=True): + if enable: + logging.getLogger().addHandler(self.console) + else: + logging.getLogger().removeHandler(self.console) + def set_message_level(self,level): """self.set_message_level(level) -> None. Sets the logging verboseness. level must be one of (DebugPrint.CRITICAL, diff --git a/vistrails/run.py b/vistrails/run.py index b49f942f3..10d586322 100644 --- a/vistrails/run.py +++ b/vistrails/run.py @@ -118,6 +118,10 @@ def main(): import locale locale.setlocale(locale.LC_ALL, '') + # Log to the console + from vistrails.core import debug + debug.DebugPrint.getInstance().log_to_console() + from vistrails.gui.requirements import require_pyqt4_api2 require_pyqt4_api2() diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py index 43be8e1e7..40bb1c891 100755 --- a/vistrails/tests/runtestsuite.py +++ b/vistrails/tests/runtestsuite.py @@ -100,6 +100,10 @@ def setNewPyQtAPI(): print "Could not set PyQt API, is PyQt4 installed?" setNewPyQtAPI() +# Log to the console +import vistrails.core.debug +vistrails.core.debug.DebugPrint.getInstance().log_to_console() + import vistrails.tests import vistrails.core import vistrails.core.db.io From 85773c44526441d9f6da4731f89e85520aad89c2 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 27 Aug 2014 16:37:38 -0400 Subject: [PATCH 013/194] Makes set_message_level() change 'vistrails' level --- vistrails/core/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 5c08f91cc..7ca94b4f9 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -292,7 +292,7 @@ def set_message_level(self,level): """self.set_message_level(level) -> None. Sets the logging verboseness. level must be one of (DebugPrint.CRITICAL, DebugPrint.WARNING, DebugPrint.INFO, DebugPrint.DEBUG).""" - self.console.setLevel(level) + self.visible_logger.setLevel(level) def register_splash(self, app): """ register_splash(self, classname) From cbe6fa6697062a03f23082081261c737b569b3eb Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 13:14:25 -0400 Subject: [PATCH 014/194] Fixes bug with nested packages --- vistrails/core/packagemanager.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index 0befd47fa..6b008d066 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -794,6 +794,7 @@ def search(dirname, prefix): name = entry_point.module_name.rsplit('.', 1) if len(name) > 1: prefix, name = name + prefix = '%s.' % prefix else: prefix = '' name, = name From 038396171dfb8aa628cf25f3849b120e96cc9016 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 13:14:36 -0400 Subject: [PATCH 015/194] Don't check package structure for plugins --- vistrails/core/packagemanager.py | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index 6b008d066..15a7eefce 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -759,11 +759,12 @@ def available_package_names_list(self): def build_available_package_names_list(self): def is_vistrails_package(path): - return ((path.endswith('.py') and - not path.endswith('__init__.py') and - os.path.isfile(path)) or - os.path.isdir(path) and \ - os.path.isfile(os.path.join(path, '__init__.py'))) + if os.path.isfile(path): + return (path.endswith('.py') and + not path.endswith('__init__.py')) + elif os.path.isdir(path): + return os.path.isfile(os.path.join(path, '__init__.py')) + return False def search(dirname, prefix): for name in os.listdir(dirname): @@ -774,6 +775,7 @@ def search(dirname, prefix): # Finds standard packages packages = self.import_packages_module() + # This makes VisTrails not zip-safe search(os.path.dirname(packages.__file__), prefix='vistrails.packages.') @@ -799,18 +801,8 @@ def search(dirname, prefix): prefix = '' name, = name - # Check that the module is importable and get path - # FIXME: packages are not zip-safe because of this logic! - path = entry_point.load().__file__ - if path.endswith('.py'): - path = path[:-3] - elif path.endswith('.pyc'): - path = path[:-4] - if path.endswith('__init__'): - path = path[:-9] - if is_vistrails_package(path): - # Create the Package, with the right prefix - self.get_available_package(name, prefix=prefix) + # Create the Package, with the right prefix + self.get_available_package(name, prefix=prefix) return self._available_packages.keys() From 43ce27c8c7b82856a83aff8a9efbc88689b1ed8e Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 16 Sep 2014 22:19:43 +0200 Subject: [PATCH 016/194] Updated VisTrails Server for rewrite-startup vistrails/core/configuration.py: Added server flags back. There are now no single-letter versions. Added descriptions for server and job sections. scripts/start_vistrails.sh: Use new flags scripts/start_vistrails_xvfb.sh: Use new flags vistrails/gui/application_server.py: Use new flags and propagate argv vistrails/vistrails_server.py: Use new flags and propagate argv doc/usersguide/batch.rst: Updated flags and ../examples path The table is still out-of-date --- doc/usersguide/batch.rst | 32 ++++---- scripts/start_vistrails.sh | 10 +-- scripts/start_vistrails_xvfb.sh | 6 +- vistrails/core/configuration.py | 70 ++++++++++++++++- vistrails/gui/application_server.py | 113 +++++++++------------------- vistrails/vistrails_server.py | 3 +- 6 files changed, 129 insertions(+), 105 deletions(-) diff --git a/doc/usersguide/batch.rst b/doc/usersguide/batch.rst index 526a954f7..53bfc2ee3 100644 --- a/doc/usersguide/batch.rst +++ b/doc/usersguide/batch.rst @@ -11,36 +11,36 @@ Starting |vistrails| via the Command Line |vistrails| supports a number of command-line arguments that let you modify certain attributes and behaviors of the program. When invoking |vistrails| from the command line, the arguments are placed after the "run.py" filename. For example, - ``python vistrails/run.py -n`` + ``python vistrails/run.py -b`` -suppresses the |vistrails| splash screen. Table :ref:`table-batch-cli` contains a complete list of the command line switches supported by \vistrails. Each command line switch has both a short form and a long form. The two forms are logically equivalent, and which one you use is a matter of personal preference. The short form consists of a single minus sign "-" followed by a single letter. The longer form uses two minus signs "--" followed by a descriptive word. For example, the above command to suppress the splash screen could have been written as: +starts |vistrails| in batch mode. Table :ref:`table-batch-cli` contains a complete list of the command line switches supported by \vistrails. Each command line switch has both a short form and a long form. The two forms are logically equivalent, and which one you use is a matter of personal preference. The short form consists of a single minus sign "-" followed by a single letter. The longer form uses two minus signs "--" followed by a descriptive word. For example, the above command for batch mode could have been written as: - ``python vistrails/run.py --nosplash`` + ``python vistrails/run.py --batch`` In addition to the explicit switches listed in Table :ref:`table-batch-cli`, the |vistrails| command line also lets you indicate the filename of the vistrail you wish to open. For example, assuming your "examples" directory is one level above your current working directory, this is how you would tell |vistrails| to load the "lung.vt" example at startup: - ``python vistrails/run.py ../examples/lung.vt`` + ``python vistrails/run.py examples/lung.vt`` Moreover, if you want |vistrails| to start on a *specific version* of the pipeline within the vistrail, you can indicate that version's tag name on the command line. The filename and version tag should be separated by a colon. For example, to start |vistrails| with the ``colormap`` version of the "lung.vt" vistrail, use: - ``python vistrails/run.py ../examples/lung.vt:colormap`` + ``python vistrails/run.py examples/lung.vt:colormap`` In the event that the version you want to open contains a space in its tag name, simply surround the entire "filename:tag" pair in double quotes. For example: - ``python vistrails/run.py "../examples/lung.vt:Axial View"`` + ``python vistrails/run.py "examples/lung.vt:Axial View"`` You can also open up multiple vistrails at once by listing more than one vistrail file on the command line. This causes the vistrails to be opened in separate tabs, just as if you had opened them via the GUI. For example: - ``python vistrails/run.py ../examples/lung.vt ../examples/head.vt`` + ``python vistrails/run.py examples/lung.vt examples/head.vt`` You can specify version tags in conjunction with multiple filenames. Here is an example of an elaborate command-line invocation that opens two vistrails and sets each one to a specific version: - ``python vistrails/run.py "../examples/lung.vt:Axial View" ../examples/head.vt:bone`` + ``python vistrails/run.py "examples/lung.vt:Axial View" examples/head.vt:bone`` @@ -186,7 +186,7 @@ As discussed in Chapter :ref:`chap-database`, |vistrails| can read and write vis The last four rows of Table :ref:`table-batch-cli` show the command-line switches that pertain to database connectivity. Be advised that these switches were designed primarily for use by VTL files (see Section :ref:`sec-cli-vtl`) and as such, are not necessarily user-friendly. In particular, these switches are ignored unless you also specify the vistrail ID and version name on the command line. For example, to open the ``contour`` version of the the "spx" vistrail (whose ID is 5) from the database "vistrails" residing on the host "vistrails.sci.utah.edu" with a username of "vistrails": - ``python vistrails/run.py -t vistrails.sci.utah.edu -f vistrails -u vistrails 5:contour`` + ``python vistrails/run.py --host=vistrails.sci.utah.edu --db=vistrails --user=vistrails 5:contour`` Once |vistrails| opens, you will be prompted to enter the password. Upon successful authentication, the vistrail is loaded from the database and opened to the pipeline corresponding to the specified version. @@ -218,13 +218,13 @@ Running |vistrails| in Batch Mode single: batch mode single: non-interactive mode -Although |vistrails| is primarily intended to be run as an interactive, graphical client application, it also supports non-interactive use. |vistrails| can thus be invoked programmatically, \eg as part of a shell script. You can tell |vistrails| to start in non-interactive mode by using the "-b" or "--noninteractive" command line switch when launching \vistrails. [#]_ +Although |vistrails| is primarily intended to be run as an interactive, graphical client application, it also supports non-interactive use. |vistrails| can thus be invoked programmatically, \eg as part of a shell script. You can tell |vistrails| to start in non-interactive mode by using the "-b" or "--batch" command line switch when launching \vistrails. [#]_ Running |vistrails| in non-interactive mode has little effect, however, without an additional command line argument indicating which vistrail to load. Since we are running |vistrails| as part of a batch process, it only makes sense to execute vistrails whose output is something tangible, such as a file. A vistrail whose only output is an interactive rendering in a ``VTKCell``, for instance, would not be well-suited for running in batch mode. Consider the following example. The "offscreen.vt" vistrail (included in the "examples" directory) has a variety of output options, depending on which version you select in the ``History`` view (Figure :ref:`The different versions of the offscreen.vt vistrail... `). The version tagged ``only vtk`` displays its output as an interactive VTK rendering. The version tagged ``html`` creates a simple web page in the Spreadsheet. The ``offscreen`` version, however, outputs an image file named "image.png". Since its output (a file) can be easily accessed outside of |vistrails|, this version is an ideal candidate for running in batch mode. To try it, invoke |vistrails| as shown, specifying both the name of the vistrail file and the desired version: - ``python vistrails/run.py -b ../examples/offscreen.vt:offscreen`` + ``python vistrails/run.py -b examples/offscreen.vt:offscreen`` .. _fig-batch-version_tree: @@ -276,17 +276,17 @@ Users can change workflow parameters that have an alias through the command line For example, offscreen pipeline in offscreen.vt always creates the file called image.png. If you want generate it with a different filename: -``python vistrails/run.py -b ../examples/offscreen.vt:offscreen -a"filename=other.png"`` +``python vistrails/run.py -b examples/offscreen.vt:offscreen --parameters="filename=other.png"`` filename in the example above is the alias name assigned to the parameter in the value method inside the String module. When running a pipeline from the command line, VisTrails will try to start the spreadsheet automatically if the pipeline requires it. For example, this other execution will also start the spreadsheet (attention to how $ characters are escaped when running on bash): -``python vistrails/run.py -b ../examples/head.vt:aliases -a"isovalue=30\$&\$diffuse_color=0.8, 0.4, 0.2"`` +``python vistrails/run.py -b examples/head.vt:aliases --parameters="isovalue=30\$&\$diffuse_color=0.8, 0.4, 0.2"`` You can also execute more than one pipeline on the command line: -``python vistrails/run.py -b ../examples/head.vt:aliases ../examples/spx.vt:spx \ -a"isovalue=30"`` +``python vistrails/run.py -b examples/head.vt:aliases ../examples/spx.vt:spx \ --parameters="isovalue=30"`` -Use the -a parameter only once regardless the number of pipelines. +Use --parameters only once regardless the number of pipelines. .. %TODO should we cover aliases here? @@ -319,7 +319,7 @@ starts a multithreaded version of the XML-RPC server, so it will create a thread Note that this infrastructure works on Linux only. To make this work on Windows, you have to create a script similar to start_vistrails_xvfb.sh (located in the scripts folder) where you can send the number of other instances via command-line options to VisTrails. The command line options are: -``python vistrails_server.py -T
-R -O [-M]&`` +``python vistrails_server.py --host=
--port= -O [-M]&`` If you want the main vistrails instance to be multithreaded, use the -M at the end. diff --git a/scripts/start_vistrails.sh b/scripts/start_vistrails.sh index 86123f33c..e0f3239e3 100755 --- a/scripts/start_vistrails.sh +++ b/scripts/start_vistrails.sh @@ -36,12 +36,12 @@ #settings LOG_DIR=/server/vistrails/logs -VISTRAILS_DIR=/server/vistrails/trunk/vistrails -ADDRESS="crowdlabs.sci.utah.edu" +VISTRAILS_DIR=../vistrails +ADDRESS="localhost" PORT="8081" CONF_FILE="server.cfg" NUMBER_OF_OTHER_VISTRAILS_INSTANCES="2" -MULTI_OPTION="-M" +MULTI_OPTION="--multithread" if (("$#" > "0")); then VIRTUAL_DISPLAY="$1" fi @@ -58,7 +58,7 @@ if (("$#" == "5")); then if(("$5" == "0")); then MULTI_OPTION="" else - MULTI_OPTION="-M" + MULTI_OPTION="--multithread" fi fi @@ -77,6 +77,6 @@ kill -9 `cat $PID` export PYTHONPATH=/home/emanuele/src/titan/build/lib:$PYTHONPATH export LD_LIBRARY_PATH=/home/emanuele/src/titan/build/lib:$LD_LIBRARY_PATH -python vistrails_server.py -T $ADDRESS -R $PORT -C $CONF_FILE -O$NUMBER_OF_OTHER_VISTRAILS_INSTANCES $MULTI_OPTION& +python vistrails_server.py --rpc-server $ADDRESS --rpc-port $PORT --rpc-config $CONF_FILE --rpc-instances $NUMBER_OF_OTHER_VISTRAILS_INSTANCES $MULTI_OPTION& echo $! > $PID diff --git a/scripts/start_vistrails_xvfb.sh b/scripts/start_vistrails_xvfb.sh index e57d256ef..e7cb63066 100755 --- a/scripts/start_vistrails_xvfb.sh +++ b/scripts/start_vistrails_xvfb.sh @@ -42,7 +42,7 @@ ADDRESS="vis-7.sci.utah.edu" PORT="8081" CONF_FILE="server.cfg" NUMBER_OF_OTHER_VISTRAILS_INSTANCES="1" -MULTI_OPTION="-M" +MULTI_OPTION="--multithread" if (("$#" > "0")); then VIRTUAL_DISPLAY="$1" fi @@ -59,7 +59,7 @@ if (("$#" == "5")); then if(("$5" == "0")); then MULTI_OPTION="" else - MULTI_OPTION="-M" + MULTI_OPTION="--multithread" fi fi @@ -104,6 +104,6 @@ sleep 5 #finally kill it if it still did not respond because it was hanging kill -9 `cat $PID` -python vistrails_server.py -T $ADDRESS -R $PORT -C $CONF_FILE -O$NUMBER_OF_OTHER_VISTRAILS_INSTANCES $MULTI_OPTION& +python vistrails_server.py --rpc-server=$ADDRESS --rpc-port $PORT --rpc-config $CONF_FILE --rpc-instances $NUMBER_OF_OTHER_VISTRAILS_INSTANCES $MULTI_OPTION& echo $! > $PID diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 301a2b8b1..70fa14780 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -42,6 +42,8 @@ import sys import weakref +import os.path + from vistrails.core import system from vistrails.core.utils import Ref, append_to_dict_of_lists from vistrails.db.domain import DBConfiguration, DBConfigKey, DBConfigStr, \ @@ -103,6 +105,16 @@ repositoryLocalPath: Local package repository directory repositoryHTTPURL: Remote package repository URL handlerDontAsk: Do not ask about extension handling at startup +rpcServer: Hostname or ip address where this xml rpc server will work +rpcPort: Port where this xml rpc server will work +rpcLogFile: Log file for XML RPC server +rpcInstances: Number of other instances that vistrails should start +multithread: Server will start a thread for each request +rpcConfig: Config file for server connection options +jobCheckInterval: How often to check for jobs (in seconds) +jobAutorun: Run jobs automatically when they finish +jobRun: Continue running specified job by id +jobList: List running jobs """ _documentation = """ @@ -427,6 +439,46 @@ One or more comma-separated key=value parameters +rpcServer: URL + + Hostname or ip address where this xml rpc server will work + +rpcPort: Integer + + Port where this xml rpc server will work + +rpcLogFile: String + + Log file for XML RPC server + +rpcInstances: Integer + + Number of other instances that vistrails should start + +multithread: Boolean + + Server will start a thread for each request + +rpcConfig: String + + Config file for server connection options + +jobCheckInterval: Integer: + + How often to check for jobs (in seconds, default=600) + +jobAutorun: Boolean + + Run jobs automatically when they finish + +jobRun: String + + Continue running specified job by id (use jobList to get) + +jobList: Boolean + + List running jobs + """ class ConfigType(object): @@ -520,11 +572,21 @@ def __init__(self, name, sub_fields): ConfigField('showWindow', True, bool, ConfigType.COMMAND_LINE_FLAG), ConfigField("withVersionTree", False, bool, ConfigType.COMMAND_LINE_FLAG), ConfigField("withWorkflow", False, bool, ConfigType.COMMAND_LINE_FLAG), - ConfigField("graphsAsPdf", True, bool, ConfigType.COMMAND_LINE_FLAG), - ConfigField("host", None, ConfigURL, ConfigType.COMMAND_LINE), + ConfigField("graphsAsPdf", True, bool, ConfigType.COMMAND_LINE_FLAG)], + "Database": + [ConfigField("host", None, ConfigURL, ConfigType.COMMAND_LINE), ConfigField("port", None, int, ConfigType.COMMAND_LINE), ConfigField("db", None, str, ConfigType.COMMAND_LINE), ConfigField("user", None, str, ConfigType.COMMAND_LINE)], + "Server": + [ConfigField('rpcServer', None, str, ConfigType.COMMAND_LINE), + ConfigField('rpcPort', 8080, int, ConfigType.COMMAND_LINE), + ConfigField('rpcLogFile', os.path.join(system.vistrails_root_directory(), + 'rpcserver.log'), ConfigPath, ConfigType.COMMAND_LINE), + ConfigField('rpcInstances', 0, int, ConfigType.COMMAND_LINE), + ConfigField('multithread', None, bool, ConfigType.COMMAND_LINE_FLAG), + ConfigField('rpcConfig', os.path.join(system.vistrails_root_directory(), + 'server.cfg'), ConfigPath, ConfigType.COMMAND_LINE)], "General": [ConfigField('autoSave', True, bool, ConfigType.ON_OFF), ConfigField('dbDefault', False, bool, ConfigType.ON_OFF), @@ -619,8 +681,8 @@ def __init__(self, name, sub_fields): "Jobs": [ConfigField('jobCheckInterval', 600, int), ConfigField('jobAutorun', False, bool), - ConfigField('jobRun', None, str), - ConfigField('jobList', False, bool)], + ConfigField('jobRun', None, str, ConfigType.COMMAND_LINE), + ConfigField('jobList', False, bool, ConfigType.COMMAND_LINE_FLAG)], } # FIXME make sure that the platform-specific configs are added! diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index fd3c1e4fc..4726cfde3 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -2103,9 +2103,6 @@ def __init__(self): self.rpcserver = None self.pingserver = None self.images_url = "http://vistrails.sci.utah.edu/medleys/images/" - self.temp_xml_rpc_options = InstanceObject(server=None, - port=None, - log_file=None) qt.allowQObjects() def is_running_gui(self): @@ -2253,26 +2250,26 @@ def load_config(self, filename): "Please populate it with the correct values and use it" % (filename, new_filename)) - def init(self, optionsDict=None): + def init(self, optionsDict=None, args=[]): """ init(optionDict: dict) -> boolean Create the application with a dict of settings """ - VistrailsApplicationInterface.init(self,optionsDict) + VistrailsApplicationInterface.init(self,optionsDict, args) - self.vistrailsStartup.init() - self.server_logger = self.make_logger(self.temp_xml_rpc_options.log_file, - self.temp_xml_rpc_options.port) - self.load_config(self.temp_xml_rpc_options.config_file) - self.start_other_instances(self.temp_xml_rpc_options.instances) + # self.vistrailsStartup.init() + self.server_logger = self.make_logger(self.temp_configuration.check('rpcLogFile'), + self.temp_configuration.check('rpcPort')) + self.load_config(self.temp_configuration.check('rpcConfig')) + self.start_other_instances(self.temp_configuration.check('rpcInstances')) self._initialized = True return True def start_other_instances(self, number): global virtual_display, script_file self.others = [] - host = self.temp_xml_rpc_options.server - port = self.temp_xml_rpc_options.port + host = self.temp_configuration.check('rpcServer') + port = self.temp_configuration.check('rpcPort') virt_disp = int(virtual_display) for x in xrange(number): port += 1 # each instance needs one port space for now @@ -2305,39 +2302,46 @@ def run_server(self): via xml-rpc. """ - self.server_logger.info("Server is running on http://%s:%s"%(self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port)) - if self.temp_xml_rpc_options.multithread: - self.rpcserver = ThreadedXMLRPCServer((self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port), - self.server_logger) + self.server_logger.info("Server is running on http://%s:%s"%( + self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort'))) + if self.temp_configuration.check('multithread'): + self.rpcserver = ThreadedXMLRPCServer( + (self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort')), + self.server_logger) self.server_logger.info(" multithreaded instance") else: - self.rpcserver = StoppableXMLRPCServer((self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port), - self.server_logger) + self.rpcserver = StoppableXMLRPCServer( + (self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort')), + self.server_logger) """ - self.pingserver = StoppableXMLRPCServer((self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port-1), - self.server_logger) + self.pingserver = StoppableXMLRPCServer( + (self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort')-1), + self.server_logger) """ self.server_logger.info(" singlethreaded instance") #self.rpcserver.register_introspection_functions() self.rpcserver.register_instance(RequestHandler(self.server_logger, self.others)) if self.pingserver: - self.pingserver.register_instance(RequestHandler(self.server_logger, [])) - self.server_logger.info("Status XML RPC Server is listening on http://%s:%s"% \ - (self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port-1)) + self.pingserver.register_instance(RequestHandler( + self.server_logger, [])) + self.server_logger.info( + "Status XML RPC Server is listening on http://%s:%s"% \ + (self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort')-1)) self.pingserver.register_function(self.quit_server, "quit") self.pingserver.serve_forever() self.pingserver.serve_close() self.rpcserver.register_function(self.quit_server, "quit") - self.server_logger.info("Vistrails XML RPC Server is listening on http://%s:%s"% \ - (self.temp_xml_rpc_options.server, - self.temp_xml_rpc_options.port)) + self.server_logger.info( + "Vistrails XML RPC Server is listening on http://%s:%s"% \ + (self.temp_configuration.check('rpcServer'), + self.temp_configuration.check('rpcPort'))) self.rpcserver.serve_forever() self.rpcserver.server_close() return 0 @@ -2349,53 +2353,10 @@ def quit_server(self): self.rpcserver.stop = True return result - def setupOptions(self, args=None): - """ setupOptions() -> None - Check and store all command-line arguments - - """ - add = command_line.CommandLineParser.add_option - - add("-T", "--xml_rpc_server", action="store", dest="rpcserver", - help="hostname or ip address where this xml rpc server will work") - add("-R", "--xml_rpc_port", action="store", type="int", default=8080, - dest="rpcport", help="database port") - add("-L", "--xml_rpc_log_file", action="store", dest="rpclogfile", - default=os.path.join(system.vistrails_root_directory(), - 'rpcserver.log'), - help="log file for XML RPC server") - add("-O", "--xml_rpc_instances", action="store", type='int', default=0, - dest="rpcinstances", - help="number of other instances that vistrails should start") - add("-M", "--multithreaded", action="store_true", - default = None, dest='multithread', - help="server will start a thread for each request") - add("-C", "--config-file", action="store", dest = "rpcconfig", - default=os.path.join(system.vistrails_root_directory(), - 'server.cfg'), - help="config file for server connection options") - VistrailsApplicationInterface.setupOptions(self, args) - - def readOptions(self): - """ readOptions() -> None - Read arguments from the command line - - """ - get = command_line.CommandLineParser().get_option - self.temp_xml_rpc_options = InstanceObject(server=get('rpcserver'), - port=get('rpcport'), - log_file=get('rpclogfile'), - instances=get('rpcinstances'), - multithread=get('multithread'), - config_file=get('rpcconfig')) - VistrailsApplicationInterface.readOptions(self) - - - # The initialization must be explicitly signalled. Otherwise, any # modules importing vis_application will try to initialize the entire # app. -def start_server(optionsDict=None): +def start_server(optionsDict=None, args=[]): """Initializes the application singleton.""" global VistrailsServer if VistrailsServer: @@ -2404,7 +2365,7 @@ def start_server(optionsDict=None): VistrailsServer = VistrailsServerSingleton() vistrails.gui.theme.initializeCurrentTheme() vistrails.core.application.set_vistrails_application(VistrailsServer) - x = VistrailsServer.init(optionsDict) + x = VistrailsServer.init(optionsDict, args) if x == True: return 0 else: diff --git a/vistrails/vistrails_server.py b/vistrails/vistrails_server.py index f99a4f5a1..017e3ea85 100644 --- a/vistrails/vistrails_server.py +++ b/vistrails/vistrails_server.py @@ -75,7 +75,8 @@ def fix_paths(): 'enablePackagesSilently': False, 'handlerDontAsk': True, } - v = vistrails.gui.application_server.start_server(optionsDict) + v = vistrails.gui.application_server.start_server(optionsDict, + args=sys.argv[1:]) app = vistrails.gui.application_server.VistrailsServer() except SystemExit, e: print str(e) From 96b730412327a2b9bf4be226bcae7a454197f9e1 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 17:28:07 -0400 Subject: [PATCH 017/194] Fixes NameError in basic_modules.py --- vistrails/core/modules/basic_modules.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index f83159304..2c5a734a8 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -482,7 +482,7 @@ def compute(self): counter += 1 try: vistrails.core.system.link_or_copy(input_file.name, filename) - except OSError: + except OSError, e: msg = "Could not publish file '%s' \n on '%s': %s" % \ (full_path, filename, e) # I am not sure whether we should raise an error From 2bf369e06aee26c4d3048f0618c624df3b55e91e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 17:56:32 -0400 Subject: [PATCH 018/194] Removes unused printVersion() --- vistrails/core/application.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/vistrails/core/application.py b/vistrails/core/application.py index b0fd50070..5a00267d0 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -92,14 +92,6 @@ def __init__(self): self._initialized = False self.notifications = {} - def printVersion(self): - """ printVersion() -> None - Print version of Vistrail and exit - - """ - print system.about_string() - sys.exit(0) - def read_options(self, args=None): """ read_options() -> None Read arguments from the command line From a9d222d7b80f319b94705835bef8a32367a69654 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 17:56:38 -0400 Subject: [PATCH 019/194] Adds --version --- vistrails/core/configuration.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 70fa14780..b1b20976f 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -874,6 +874,8 @@ def camel_to_dashes(s): parser.add_argument('vistrails', metavar='vistrail', type=str, nargs='*', help="Vistrail to open") _usage_args.add('vistrails') + parser.add_argument('--version', action='version', + version=system.about_string()) prefix_dashes = '' From d016b33c6b7dd4894ab6ec3b1e1b7e6222fe4d8c Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 16 Sep 2014 18:04:31 -0400 Subject: [PATCH 020/194] Fixes vistrails_revision() --- vistrails/core/system/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vistrails/core/system/__init__.py b/vistrails/core/system/__init__.py index d43610c31..b6d472f9f 100644 --- a/vistrails/core/system/__init__.py +++ b/vistrails/core/system/__init__.py @@ -345,12 +345,12 @@ def vistrails_revision(): """ git_dir = os.path.join(vistrails_root_directory(), '..') with Chdir(git_dir): - release = "269e4808eca3" + release = vistrails_version() import vistrails.core.requirements if vistrails.core.requirements.executable_file_exists('git'): lines = [] result = execute_cmdline( - ['git', 'describe', '--always', '--abbrev=12'], + ['git', 'describe', '--always'], lines) if len(lines) == 1: if result == 0: @@ -367,12 +367,12 @@ def get_module_registry(): return _registry def short_about_string(): - return """VisTrails version %s.%s -- contact@vistrails.org""" % \ + return """VisTrails version %s (%s) -- contact@vistrails.org""" % \ (vistrails_version(), vistrails_revision()) def about_string(): """about_string() -> string - Returns the about string for VisTrails.""" - return """VisTrails version %s.%s -- contact@vistrails.org + return """VisTrails version %s (%s) -- contact@vistrails.org Copyright (C) 2011-2014 NYU-Poly. Copyright (C) 2006-2011 University of Utah. All rights reserved. From 2a78f37cd19b112ee7c1f4df23403f081c93cf6d Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 10:50:33 -0400 Subject: [PATCH 021/194] Removes __import__ madness --- vistrails/gui/mashups/mashup_app.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vistrails/gui/mashups/mashup_app.py b/vistrails/gui/mashups/mashup_app.py index 60be7576c..39176be43 100644 --- a/vistrails/gui/mashups/mashup_app.py +++ b/vistrails/gui/mashups/mashup_app.py @@ -40,9 +40,8 @@ QAliasNumericStepperWidget) from vistrails.gui.utils import show_warning, TestVisTrailsGUI -spreadsheet = __import__('vistrails.packages.spreadsheet', globals(), locals(), - ['spreadsheet_controller'], -1) -spreadsheetController = spreadsheet.spreadsheet_controller.spreadsheetController +from vistrails.packages.spreadsheet.spreadsheet_controller import \ + spreadsheetController class QMashupAppMainWindow(QtGui.QMainWindow): From d54fde8c9f9d70d925a5cdb961a7da44971c4bf4 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 10:51:47 -0400 Subject: [PATCH 022/194] Fixes issues in mashup_app.py --- vistrails/gui/mashups/mashup_app.py | 133 ++++++++++++++-------------- 1 file changed, 66 insertions(+), 67 deletions(-) diff --git a/vistrails/gui/mashups/mashup_app.py b/vistrails/gui/mashups/mashup_app.py index 39176be43..26cd2cf56 100644 --- a/vistrails/gui/mashups/mashup_app.py +++ b/vistrails/gui/mashups/mashup_app.py @@ -36,8 +36,8 @@ from PyQt4.QtCore import pyqtSignal from vistrails.core import debug -from vistrails.gui.mashups.mashups_widgets import (QAliasSliderWidget, QDropDownWidget, - QAliasNumericStepperWidget) +from vistrails.gui.mashups.mashups_widgets import QAliasNumericStepperWidget, \ + QAliasSliderWidget, QDropDownWidget from vistrails.gui.utils import show_warning, TestVisTrailsGUI from vistrails.packages.spreadsheet.spreadsheet_controller import \ @@ -47,8 +47,8 @@ class QMashupAppMainWindow(QtGui.QMainWindow): #signals appWasClosed = pyqtSignal(QtGui.QMainWindow) - - def __init__(self, parent=None, vistrail_view=None, dumpcells=False, + + def __init__(self, parent=None, vistrail_view=None, dumpcells=False, controller=None, version=-1): """ QMashupAppMainWindow() Initialize an app window from a mashup. @@ -58,7 +58,7 @@ def __init__(self, parent=None, vistrail_view=None, dumpcells=False, QtGui.QMainWindow.__init__(self, parent) self.vtkCells = [] self.setStatusBar(QtGui.QStatusBar(self)) - + # Central widget centralWidget = QtGui.QWidget() self.mainLayout = QtGui.QVBoxLayout() @@ -99,14 +99,14 @@ def __init__(self, parent=None, vistrail_view=None, dumpcells=False, # Show here to make sure XDisplay info is correct (for VTKCell) self.show() - spreadsheetController.setEchoMode(True) + spreadsheetController.setEchoMode(True) #will run to get Spreadsheet Cell events (cellEvents, errors) = self.runAndGetCellEvents(useDefaultValues=True) if cellEvents: self.numberOfCells = len(cellEvents) self.initCells(cellEvents) if len(errors) > 0: - show_warning("VisTrails::Mashup Preview", + show_warning("VisTrails::Mashup Preview", "There was a problem executing the pipeline: %s." % errors) # Construct the controllers for aliases @@ -114,17 +114,17 @@ def __init__(self, parent=None, vistrail_view=None, dumpcells=False, self.cellControls = {} self.aliasWidgets = {} self.initControls() - - if self.currentMashup.layout != None: + + if self.currentMashup.layout is not None: self.restoreState(QtCore.QByteArray.fromPercentEncoding( QtCore.QByteArray(self.currentMashup.layout))) - - if self.currentMashup.geometry != None: + + if self.currentMashup.geometry is not None: self.restoreGeometry(QtCore.QByteArray.fromPercentEncoding( QtCore.QByteArray(self.currentMashup.geometry))) else: self.resize(self.sizeHint()) - + # Constructing buttons buttonDock = QCustomDockWidget('Control Buttons', self) buttonWidget = QtGui.QWidget(buttonDock) @@ -182,7 +182,7 @@ def __init__(self, parent=None, vistrail_view=None, dumpcells=False, sequenceLayout.addWidget(self.cb_loop_sequence) buttonLayout.addLayout(sequenceLayout, 0, 0, QtCore.Qt.AlignRight) buttonLayout.addWidget(self.cb_auto_update, 0, 1, QtCore.Qt.AlignLeft) - buttonLayout.addWidget(self.cb_keep_camera, 0, 2, 1, 2, QtCore.Qt.AlignLeft) + buttonLayout.addWidget(self.cb_keep_camera, 0, 2, 1, 2, QtCore.Qt.AlignLeft) if self.sequenceOption: buttonLayout.addWidget(self.loopButton, 1, 1, QtCore.Qt.AlignRight) self.loopButton.setEnabled(False) @@ -198,34 +198,34 @@ def __init__(self, parent=None, vistrail_view=None, dumpcells=False, buttonDock.setWidget(buttonWidget) self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, buttonDock) self.controlDocks["__buttons__"] = buttonDock - - self.saveAllAct = QtGui.QAction("S&ave Combined", self, + + self.saveAllAct = QtGui.QAction("S&ave Combined", self, shortcut=QtGui.QKeySequence.SelectAll, - statusTip="Save combined images to disk", + statusTip="Save combined images to disk", triggered=self.saveAllEvent) - self.saveAct = QtGui.QAction("&Save Each", self, + self.saveAct = QtGui.QAction("&Save Each", self, shortcut=QtGui.QKeySequence.Save, - statusTip="Save separate images to disk", + statusTip="Save separate images to disk", triggered=self.saveEventAction) self.showBuilderAct = QtGui.QAction("VisTrails Main Window", self, statusTip="Show VisTrails Main Window", triggered=self.showBuilderWindow) self.createMenus() self.lastExportPath = '' - + def createMenus(self): self.fileMenu = self.menuBar().addMenu("&File") self.fileMenu.addAction(self.saveAct) self.fileMenu.addAction(self.saveAllAct) - + self.viewMenu = self.menuBar().addMenu("&View") self.viewMenu.addAction(self.editingModeAct) - + self.windowMenu = self.menuBar().addMenu("&Window") self.windowMenu.addAction(self.showBuilderAct) - + def runAndGetCellEvents(self, useDefaultValues=False): - spreadsheetController.setEchoMode(True) + spreadsheetController.setEchoMode(True) #will run to get Spreadsheet Cell events cellEvents = [] errors = [] @@ -239,9 +239,9 @@ def runAndGetCellEvents(self, useDefaultValues=False): print "Executing pipeline failed:", debug.format_exception(e), traceback.format_exc() finally: spreadsheetController.setEchoMode(False) - + return (cellEvents, errors) - + def updateCells(self, info=None): # check if we should create a sequence if self.cb_loop_sequence.isChecked(): @@ -259,7 +259,7 @@ def updateCells(self, info=None): #self.SaveCamera() for i in xrange(self.numberOfCells): camera = [] - if (hasattr(self.cellWidgets[i],"getRendererList") and + if (hasattr(self.cellWidgets[i],"getRendererList") and self.cb_keep_camera.isChecked()): for ren in self.cellWidgets[i].getRendererList(): camera.append(ren.GetActiveCamera()) @@ -282,7 +282,7 @@ def updateCellsLoop(self, info=None): for i in xrange(self.numberOfCells): self.cellWidgets[i].setPlayerFrame(slider.value()) return - + if not interactive: for i in xrange(self.numberOfCells): self.cellWidgets[i].clearHistory() @@ -312,7 +312,7 @@ def updateCellsLoop(self, info=None): # show the result self.updateRenderedCells(value if interactive else 0) self.is_executing = True - + if value >= slider.maximum(): break value += slider.singleStep() @@ -320,14 +320,14 @@ def updateCellsLoop(self, info=None): self.is_executing = False slider.setValue(old_value) self.loopButton.setEnabled(True) - + def updateRenderedCells(self, value): """ Show the cell specified by slider info """ self.is_executing = True for i in xrange(self.numberOfCells): camera = [] - if (hasattr(self.cellWidgets[i],"getRendererList") and + if (hasattr(self.cellWidgets[i],"getRendererList") and self.cb_keep_camera.isChecked()): for ren in self.cellWidgets[i].getRendererList(): camera.append(ren.GetActiveCamera()) @@ -362,7 +362,7 @@ def loopButtonClick(self, toggled): cell.startPlayer() else: cell.stopPlayer() - + def timerEvent(self, event): if self.steps: @@ -390,23 +390,23 @@ def toggleEditingMode(self): self.editing = not self.editing if not self.editing: self.saveSettings() - + def saveSettings(self): layout = self.saveState().toPercentEncoding() geom = self.saveGeometry().toPercentEncoding() - + self.currentMashup.layout = layout self.currentMashup.geometry = geom - + self.controller.setChanged(True) - + #self.controller.writeMashuptrail() - + def closeEvent(self, event): self.saveSettings() self.appWasClosed.emit(self) event.accept() - + def auto_update_changed(self, state): if state == QtCore.Qt.Unchecked: self.updateButton.setEnabled(True) @@ -433,23 +433,23 @@ def auto_update_changed(self, state): cell._player.raise_() cell._player.show() cell.hide() - + def loop_int_changed(self, state): self.loopButton.setEnabled(False) - + def saveAll(self): for w in self.widgets: w.saveAll(self.dumpcells) - + def saveEach(self): for w in self.widgets: w.saveEach(self.dumpcells, self.frameNo) - + def saveEventAction(self, checked): self.saveEvent() - + def saveEvent(self, folder=None): - if folder == None: + if folder is None: folder = QtGui.QFileDialog.getExistingDirectory(self, "Save images to...", self.lastExportPath, @@ -458,9 +458,9 @@ def saveEvent(self, folder=None): self.dumpcells = str(folder) self.saveEach() self.lastExportPath = str(folder) - + def saveAllEvent(self, folder=None): - if folder == None: + if folder is None: folder = QtGui.QFileDialog.getExistingDirectory(self, "Save images to...", self.lastExportPath, @@ -468,11 +468,10 @@ def saveAllEvent(self, folder=None): if folder: self.dumpcells = str(folder) self.saveAll() - self.lastExportPath - + def saveAndExport(self, clicked=True): self.saveAll() - + def initCells(self, cellEvents): cellLayout = QtGui.QHBoxLayout() self.mainLayout.addLayout(cellLayout, self.numberOfCells * 2) @@ -493,47 +492,46 @@ def getSelectedCellWidgets(): return vtkCells for cellWidget in self.vtkCells: cellWidget.getSelectedCellWidgets = getSelectedCellWidgets - + def initControls(self): if len(self.currentMashup.alias_list) == 0: return - + #Constructing alias controls self.controlDocks = {} self.cellControls = {} self.toolbuttons = {} - + row = 0 for alias in self.currentMashup.alias_list: dock = QCustomDockWidget(alias.name, #"Control for '%s'" % aliasName, self) vtparam = self.controller.getVistrailParam(alias) - + if alias.component.widget == 'slider': aliasWidget = QAliasSliderWidget(alias, vtparam, dock) - # enables looping of + # enables looping of if alias.component.seq: self.sequenceOption = aliasWidget - elif alias.component.widget == 'numericstepper': aliasWidget = QAliasNumericStepperWidget(alias, vtparam, dock) else: aliasWidget = QDropDownWidget(alias, vtparam, dock) - + aliasWidget.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum) self.connect(aliasWidget, QtCore.SIGNAL("contentsChanged"), self.widget_changed) - + dock.setWidget(aliasWidget) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) self.controlDocks[alias.name] = dock self.cellControls[alias.name] = aliasWidget.value row += 1 self.aliasWidgets[alias.name] = aliasWidget - + # Added a stretch space stretchDock = QCustomDockWidget('Stretch Space', self) stretch = QtGui.QWidget() @@ -542,14 +540,14 @@ def initControls(self): stretchDock.setWidget(stretch) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, stretchDock) self.controlDocks["_stretch_"] = stretchDock - + def widget_changed(self, info): if self.cb_auto_update.isChecked() and not self.is_executing: self.updateCells(info) - - + + def run(self, useDefaultValues=False): - + # Building the list of parameter values params = [] if useDefaultValues: @@ -564,7 +562,7 @@ def run(self, useDefaultValues=False): else: val =str(edit.text()) params.append((alias.component.vttype, alias.component.vtid, - val)) + val)) results = self.controller.execute(params)[0] result = results[0] (objs, errors, executed) = (result.objects, result.errors, @@ -574,16 +572,16 @@ def run(self, useDefaultValues=False): print errors return (False, errors) return (True, []) - + def showBuilderWindow(self): from vistrails.gui.vistrails_window import _app _app.show() - + class QCustomDockWidget(QtGui.QDockWidget): def __init__(self, title, parent=None): QtGui.QDockWidget.__init__(self, title, parent) self.setObjectName(title) - self.setFeatures(QtGui.QDockWidget.DockWidgetClosable | + self.setFeatures(QtGui.QDockWidget.DockWidgetClosable | QtGui.QDockWidget.DockWidgetMovable) self.emptyTitleBar = QtGui.QWidget() self.titleBarVisible = True @@ -591,7 +589,7 @@ def __init__(self, title, parent=None): def showTitleBar(self): self.titleBarVisible = True - self.setFeatures(QtGui.QDockWidget.DockWidgetClosable | + self.setFeatures(QtGui.QDockWidget.DockWidgetClosable | QtGui.QDockWidget.DockWidgetMovable) self.setMaximumHeight(524287) self.setTitleBarWidget(None) @@ -614,8 +612,9 @@ def toggleTitleBar(self): class TestMashupApp(TestVisTrailsGUI): def test_load_mashup(self): + import vistrails.api import vistrails.core.system - filename = (vistrails.core.system.vistrails_root_directory() + + filename = (vistrails.core.system.vistrails_root_directory() + '/tests/resources/spx_loop.vt') view = vistrails.api.open_vistrail_from_file(filename) view.controller.flush_delayed_actions() From 6734c8512f9f31396803ed8a5853f832a60ae99f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 11:08:18 -0400 Subject: [PATCH 023/194] Issue in webServices/init.py --- vistrails/packages/webServices/init.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/vistrails/packages/webServices/init.py b/vistrails/packages/webServices/init.py index 8a6f4472b..e0d514115 100644 --- a/vistrails/packages/webServices/init.py +++ b/vistrails/packages/webServices/init.py @@ -985,10 +985,8 @@ def load_wsdl_no_config(wsdlList): directoryname = directoryname.replace(".","_") directoryname = directoryname.replace("%","_") directoryname = directoryname.replace("+","_") - package_subdirectory = os.path.join(package_directory, directoryname) wsm = WriteServiceModule(wsdl) client_mod = wsm.getClientModuleName() - types_mod = wsm.getTypesModuleName() #import the stub generated files try: @@ -1362,18 +1360,11 @@ def initialize(*args, **keywords): global webServicesmodulesDict global complexsdict wsdlList = [] - if configuration.showWarning == True: - msg = "The Web Services package is deprecated and will be removed from \ -next VisTrails release. Please consider using the new SUDS Web Services package. \ -This message will not be shown again." - pm.show_error_message(pm.get_package(identifier),msg) - try: - from vistrails.gui.application import get_vistrails_application - if get_vistrails_application() is not None: - configuration.showWarning = False - VisTrailsApplication.save_configuration() - except: - pass + if configuration.showWarning: + msg = ("The Web Services package is deprecated and will be removed " + "from the next VisTrails release. Please consider using the " + "new SUDS Web Services package.") + pm.show_error_message(pm.get_package(identifier), msg) if configuration.check('wsdlList'): wsdlList = configuration.wsdlList.split(";") From 9eac6d488b5702d6197c4f707bb612ca1680ab91 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 13:46:10 -0400 Subject: [PATCH 024/194] Removes get_subpipeline(), "unfinished" since 2007 --- vistrails/core/vistrail/pipeline.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index 196cbfe58..46a832af0 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -887,26 +887,6 @@ def compute_signatures(self): for c in self.connections.iterkeys(): self.connection_signature(c) - def get_subpipeline(self, module_set): - """get_subpipeline([module_id] or subgraph) -> Pipeline - - Returns a subset of the current pipeline with the modules passed - in as module_ids and the internal connections between them.""" - if isinstance(module_set, list): - subgraph = self.graph.subgraph(module_set) - elif isinstance(module_set, Graph): - subgraph = module_set - else: - raise TypeError("Expected list of ints or graph") - result = Pipeline() - for module_id in subgraph.iter_vertices(): - result.add_module(copy.copy(self.modules[module_id])) - for (conn_from, conn_to, conn_id) in subgraph.iter_all_edges(): - result.add_connection(copy.copy(self.connections[conn_id])) - # TODO : I haven't finished this yet. -cscheid - raise NotImplementedError - return result - ########################################################################## # Registry-related @@ -1710,14 +1690,6 @@ def test_pipeline_equality_module_list_out_of_order(self): functions=[])) assert p1 == p2 -# def test_subpipeline(self): -# p = self.create_default_pipeline() -# p2 = p.get_subpipeline([0, 1]) -# for m in p2.modules: -# print m -# for c in p2.connections: -# print c - def test_incorrect_port_spec(self): import vistrails.core.modules.basic_modules p = Pipeline() From 2de767f20c91f3803c6020bcde0917e978afef94 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 13:55:26 -0400 Subject: [PATCH 025/194] Moves abstraction creation to GUI controller --- vistrails/core/vistrail/controller.py | 25 ------------------------- vistrails/gui/vistrail_controller.py | 26 +++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/vistrails/core/vistrail/controller.py b/vistrails/core/vistrail/controller.py index 4043eab81..3902596ba 100644 --- a/vistrails/core/vistrail/controller.py +++ b/vistrails/core/vistrail/controller.py @@ -1419,31 +1419,6 @@ def create_abstraction(self, module_ids, connection_ids, name): result = self.perform_action(action) return abstraction - def create_abstractions_from_groups(self, group_ids): - for group_id in group_ids: - self.create_abstraction_from_group(group_id) - - def create_abstraction_from_group(self, group_id, name=""): - self.flush_delayed_actions() - name = self.get_abstraction_name(name) - - (abstraction, connections) = \ - self.build_abstraction_from_group(self.current_pipeline, - group_id, name) - - op_list = [] - getter = self.get_connections_to_and_from - op_list.extend(('delete', c) - for c in getter(self.current_pipeline, [group_id])) - op_list.append(('delete', self.current_pipeline.modules[group_id])) - op_list.append(('add', abstraction)) - op_list.extend(('add', c) for c in connections) - action = vistrails.core.db.action.create_action(op_list) - self.add_new_action(action) - result = self.perform_action(action) - return abstraction - - def ungroup_set(self, module_ids): self.flush_delayed_actions() for m_id in module_ids: diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index 398737b1b..ae25e2766 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -1200,7 +1200,31 @@ def do_save_dir_prompt(self): setattr(get_vistrails_configuration(), 'fileDir', dir_name) vistrails.core.system.set_vistrails_file_directory(dir_name) return dir_name - + + def create_abstractions_from_groups(self, group_ids): + for group_id in group_ids: + self.create_abstraction_from_group(group_id) + + def create_abstraction_from_group(self, group_id, name=""): + self.flush_delayed_actions() + name = self.get_abstraction_name(name) + + (abstraction, connections) = \ + self.build_abstraction_from_group(self.current_pipeline, + group_id, name) + + op_list = [] + getter = self.get_connections_to_and_from + op_list.extend(('delete', c) + for c in getter(self.current_pipeline, [group_id])) + op_list.append(('delete', self.current_pipeline.modules[group_id])) + op_list.append(('add', abstraction)) + op_list.extend(('add', c) for c in connections) + action = vistrails.core.db.action.create_action(op_list) + self.add_new_action(action) + result = self.perform_action(action) + return abstraction + def export_abstractions(self, abstraction_ids): save_dir = self.do_save_dir_prompt() if not save_dir: From d6779b8599ac50fbac1a45fbab366f7ca4bf16d4 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 14:02:48 -0400 Subject: [PATCH 026/194] Fixes lots of issues found by my IDE --- vistrails/core/analogy/__init__.py | 2 +- vistrails/core/application.py | 8 +-- vistrails/core/collection/vistrail.py | 1 + vistrails/core/configuration.py | 2 + vistrails/core/data_structures/graph.py | 5 +- vistrails/core/db/locator.py | 23 +++------ vistrails/core/debug.py | 4 +- vistrails/core/interpreter/job.py | 1 - vistrails/core/modules/module_registry.py | 46 ++++++++--------- vistrails/core/modules/sub_module.py | 4 +- vistrails/core/modules/utils.py | 2 +- vistrails/core/modules/vistrails_module.py | 12 ++--- vistrails/core/packagerepository.py | 4 +- vistrails/core/query/__init__.py | 49 ------------------- vistrails/core/requirements.py | 5 +- vistrails/core/upgradeworkflow.py | 4 +- vistrails/core/vistrail/connection.py | 24 ++------- vistrails/core/vistrail/controller.py | 6 +-- vistrails/core/vistrail/pipeline.py | 4 +- vistrails/gui/application.py | 4 +- vistrails/gui/application_server.py | 7 +-- vistrails/gui/collection/explorer.py | 23 ++++----- vistrails/gui/collection/workspace.py | 5 +- vistrails/gui/debugger.py | 3 +- vistrails/gui/mashups/mashups_manager.py | 2 +- vistrails/gui/module_palette.py | 6 +-- vistrails/gui/modules/output_configuration.py | 4 +- vistrails/gui/modules/paramexplore.py | 1 - vistrails/gui/open_db_window.py | 27 ++++------ vistrails/gui/paramexplore/pe_table.py | 1 + vistrails/gui/paramexplore/virtual_cell.py | 5 -- vistrails/gui/preferences.py | 1 - vistrails/gui/publishing.py | 4 +- vistrails/gui/query_view.py | 2 +- vistrails/gui/shell.py | 8 +-- vistrails/gui/version_view.py | 2 +- vistrails/gui/vistrail_controller.py | 2 +- vistrails/gui/vistrail_view.py | 2 +- vistrails/gui/vistrails_window.py | 21 ++++---- vistrails/packages/RemoteQ/init.py | 24 ++++----- vistrails/packages/SUDSWebServices/init.py | 2 +- vistrails/packages/URL/init.py | 7 +-- vistrails/packages/analytics/init.py | 2 +- vistrails/packages/gmaps/init.py | 5 ++ vistrails/packages/matplotlib/figure_cell.py | 1 - vistrails/packages/matplotlib/init.py | 4 ++ .../packages/parallelflow/engine_manager.py | 5 +- vistrails/packages/persistence/init.py | 11 +++-- vistrails/packages/persistence/repo.py | 1 - vistrails/packages/persistence/widgets.py | 12 ++--- .../packages/spreadsheet/spreadsheet_base.py | 1 - .../spreadsheet/spreadsheet_execute.py | 5 -- .../packages/spreadsheet/spreadsheet_tab.py | 2 +- .../spreadsheet/spreadsheet_tabcontroller.py | 2 +- vistrails/packages/vtk/vtkcell.py | 16 +++--- vistrails/packages/vtk/vtkviewcell.py | 4 +- vistrails/packages/webServices/init.py | 5 +- 57 files changed, 171 insertions(+), 274 deletions(-) diff --git a/vistrails/core/analogy/__init__.py b/vistrails/core/analogy/__init__.py index d1687d73a..78fd06252 100644 --- a/vistrails/core/analogy/__init__.py +++ b/vistrails/core/analogy/__init__.py @@ -125,7 +125,7 @@ def name_remap(d): a_connect.destination.spec == c_connect.destination.spec): break if match is not None: - connection_remap[a_connect.id] = c_connect.id + connection_remap[a_connect.id] = match.id elif _debug: print "failed to find connection match", a_connect.id, a_source, \ a_dest diff --git a/vistrails/core/application.py b/vistrails/core/application.py index b0fd50070..9f64a52e9 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -226,13 +226,13 @@ def _parse_vtinfo(self, info, use_filename=True): name = str(data[0]) # will try to convert version to int # if it fails, it's a tag name + #maybe a tag name contains ':' in its name + #so we need to bring it back together + rest = ":".join(data[1:]) try: - #maybe a tag name contains ':' in its name - #so we need to bring it back together - rest = ":".join(data[1:]) version = int(rest) except ValueError: - version = str(rest) + version = rest elif len(data) == 1: if use_filename and os.path.isfile(str(data[0])): name = str(data[0]) diff --git a/vistrails/core/collection/vistrail.py b/vistrails/core/collection/vistrail.py index 72d38e8e5..383f81e3b 100644 --- a/vistrails/core/collection/vistrail.py +++ b/vistrails/core/collection/vistrail.py @@ -346,6 +346,7 @@ def reload(self, vistrail): # self.add_parameter_exploration_entity(pe) # read persisted log entries + log = None try: log = vistrail.get_persisted_log() except Exception, e: diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 70fa14780..faccc4af9 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -734,6 +734,8 @@ def get_system_config(): sys_config = linux_config elif system.systemType in ['Darwin']: sys_config = mac_config + else: + return config for category, fields in sys_config.iteritems(): if category not in base_config: config[category] = fields diff --git a/vistrails/core/data_structures/graph.py b/vistrails/core/data_structures/graph.py index d61fd4d9e..e207b7466 100644 --- a/vistrails/core/data_structures/graph.py +++ b/vistrails/core/data_structures/graph.py @@ -313,11 +313,14 @@ def change_edge(self, old_froom, old_to, new_to, old_id=None, new_id=None): if old_id == None: efroom = self.adjacency_list[old_froom] + forward_idx = None for i, edge in enumerate(efroom): if edge[0] == old_to: old_id = edge[1] forward_idx = i break + if forward_idx is None: + raise ValueError("No edge to %r" % old_to) else: forward_idx = self.adjacency_list[old_froom].index((old_to, old_id)) @@ -803,7 +806,7 @@ def test3(self): """Test sink and source degree consistency""" g = Graph() for i in xrange(100): - g.add_vertex(i); + g.add_vertex(i) for i in xrange(1000): v1 = random.randint(0,99) v2 = random.randint(0,99) diff --git a/vistrails/core/db/locator.py b/vistrails/core/db/locator.py index 12cc870f5..96cef93dc 100644 --- a/vistrails/core/db/locator.py +++ b/vistrails/core/db/locator.py @@ -401,20 +401,13 @@ def set_connection_info(self, *args, **kwargs): If the connection exists it will update it, else it will add it """ - if kwargs.has_key("id"): - id = kwargs["id"] - if kwargs.has_key("name"): - name = kwargs["name"] - if kwargs.has_key("host"): - host = kwargs["host"] - if kwargs.has_key("port"): - port = kwargs["port"] - if kwargs.has_key("user"): - user = kwargs["user"] - if kwargs.has_key("passwd"): - passwd = kwargs["passwd"] - if kwargs.has_key("db"): - db = kwargs["db"] + id = kwargs["id"] + name = kwargs["name"] + host = kwargs["host"] + port = kwargs["port"] + user = kwargs["user"] + passwd = kwargs["passwd"] + db = kwargs["db"] conn = DBConnection(id=id, name=name, @@ -681,7 +674,7 @@ def guess_extension_from_contents(contents): pass if tag is None: - tag = ''; + tag = '' ## execute and showSpreadsheetOnly should be written to the current ## configuration diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 7ca94b4f9..51a9cd405 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -165,7 +165,7 @@ class DebugPrint(object): so it will only get information of who called the DebugPrint functions. Example of usage: - >>> from core import debug + >>> from vistrails.core import debug >>> debug.DebugPrint.getInstance().set_message_level( debug.DebugPrint.WARNING) # the following messages will be shown @@ -386,6 +386,8 @@ def object_at(desc): target_id = desc elif isinstance(desc, basestring): target_id = int(desc, 16) # Reads desc as the hex address + else: + raise TypeError import gc for obj in gc.get_objects(): if id(obj) == target_id: diff --git a/vistrails/core/interpreter/job.py b/vistrails/core/interpreter/job.py index a194f5c6f..e7ac87bad 100644 --- a/vistrails/core/interpreter/job.py +++ b/vistrails/core/interpreter/job.py @@ -385,7 +385,6 @@ def deleteJob(self, id, parent_id=None): if not parent_id: if not self._current_workflow: raise Exception("No workflow is running!") - return parent_id = self._current_workflow.id del self._running_workflows[parent_id].modules[id] if self.callback: diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index 761f89593..1557f60e5 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -739,34 +739,32 @@ def get_descriptor_by_name(self, identifier, name, namespace='', package_version = package_version or '' module_version = module_version or '' - try: - package = self.packages[identifier] - if package_version: - package_version_key = (identifier, package_version) + if package_version: + package_version_key = (identifier, package_version) + try: package = self.package_versions[package_version_key] - if not module_version: + except KeyError: + raise MissingPackageVersion(identifier, package_version) + else: + try: + package = self.packages[identifier] + except KeyError: + raise MissingPackage(identifier) + if not module_version: + try: descriptor = package.descriptors[(name, namespace)] - else: - descriptor_version_key = (name, namespace, module_version) + except KeyError: + raise MissingModule(identifier, name, namespace, + package_version) + else: + descriptor_version_key = (name, namespace, module_version) + try: descriptor = \ package.descriptor_versions[descriptor_version_key] - return descriptor - except KeyError: - if identifier not in self.packages: - raise MissingPackage(identifier) - elif (name, namespace) not in package.descriptors: - raise MissingModule(identifier, name, namespace, - package_version) - elif package_version and \ - package_version_key not in self.package_versions: - raise MissingPackageVersion(identifier, package_version) - elif module_version and descriptor_version_key not in \ - package.descriptor_versions: + except KeyError: raise MissingModuleVersion(identifier, name, namespace, module_version, package_version) - else: - raise ModuleRegistryException(identifier, name, namespace, - package_version, module_version) + return descriptor def get_similar_descriptor(self, identifier, name, namespace=None, package_version=None, module_version=None): @@ -779,10 +777,6 @@ def get_similar_descriptor(self, identifier, name, namespace=None, except MissingModuleVersion: return self.get_similar_descriptor(identifier, name, namespace, package_version, None) -# except Exception: -# raise - - return None def get_descriptor(self, module): """get_descriptor(module: class) -> ModuleDescriptor diff --git a/vistrails/core/modules/sub_module.py b/vistrails/core/modules/sub_module.py index 1985bee74..830b39579 100644 --- a/vistrails/core/modules/sub_module.py +++ b/vistrails/core/modules/sub_module.py @@ -293,12 +293,12 @@ def get_port_spec_info(pipeline, module): try: type = type_map[module.name] except KeyError: - raise VistrailsInternalError("cannot translate type '%s'" % type) + raise VistrailsInternalError("cannot translate type '%s'" % module.name) if type == 'input': get_edges = pipeline.graph.edges_from get_port_name = \ lambda x: pipeline.connections[x].destination.name - elif type == 'output': + else: # type == 'output' get_edges = pipeline.graph.edges_to get_port_name = \ lambda x: pipeline.connections[x].source.name diff --git a/vistrails/core/modules/utils.py b/vistrails/core/modules/utils.py index 1bea284c2..873652e09 100644 --- a/vistrails/core/modules/utils.py +++ b/vistrails/core/modules/utils.py @@ -39,7 +39,7 @@ def load_cls(cls_item, prefix=None): path = None if isinstance(cls_item, basestring): - [path, cls_name] = cls_item.split(':')[:2] + (path, cls_name) = cls_item.split(':')[:2] elif isinstance(cls_item, tuple): (path, cls_name) = cls_item if path is not None: diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py index 6367aa96b..9b70893ef 100644 --- a/vistrails/core/modules/vistrails_module.py +++ b/vistrails/core/modules/vistrails_module.py @@ -178,12 +178,10 @@ class _InvalidOutput(object): # DummyModuleLogging class DummyModuleLogging(object): - def end_update(self, *args, **kwargs): pass - def begin_update(self, *args, **kwargs): pass - def begin_compute(self, *args, **kwargs): pass - def update_cached(self, *args, **kwargs): pass - def signalSuccess(self, *args, **kwargs): pass - def annotate(self, *args, **kwargs): pass + def _dummy_method(self, *args, **kwargs): pass + + def __getattr__(self, name): + return self._dummy_method _dummy_logging = DummyModuleLogging() @@ -1742,6 +1740,8 @@ def new_module(base_module, name, dict={}, docstring=None): elif isinstance(base_module, list): assert sum(1 for x in base_module if issubclass(x, Module)) == 1 superclasses = tuple(base_module) + else: + raise TypeError d = copy.copy(dict) if docstring: d['__doc__'] = docstring diff --git a/vistrails/core/packagerepository.py b/vistrails/core/packagerepository.py index 334d8dc34..00c09cd8b 100644 --- a/vistrails/core/packagerepository.py +++ b/vistrails/core/packagerepository.py @@ -109,7 +109,7 @@ def install_package(self, codepath): try: f = open(os.path.join(self._path, codepath, 'MANIFEST')) except IOError, e: - raise InvalidPackage("Package is missing manifest.") + raise PackageRepository.InvalidPackage("Package is missing manifest.") # create directory self.create_main_directory(codepath) for l in f: @@ -146,7 +146,7 @@ def install_package(self, codepath): try: f = urllib2.urlopen(self._path + '/' + codepath + '/MANIFEST') except urllib2.HTTPError, e: - raise InvalidPackage("Package is missing manifest.") + raise PackageRepository.InvalidPackage("Package is missing manifest.") self.create_main_directory(codepath) for l in f: l = l[:-1] diff --git a/vistrails/core/query/__init__.py b/vistrails/core/query/__init__.py index 1a22cf325..5afe8f349 100644 --- a/vistrails/core/query/__init__.py +++ b/vistrails/core/query/__init__.py @@ -292,55 +292,6 @@ def run(self, vistrail, name): return result -class Query2(Query): - - def run(self, vistrail, name): - import vistrails.gui.vis_application - c = vistrails.gui.vis_application.logger.db.cursor() - c.execute(""" - select distinct module_id, wf_version from - wf_exec, exec, vistrails - where - wf_exec.wf_exec_id = exec.wf_exec_id and - vistrails.vistrails_name = %s and - vistrails.vistrails_id = wf_exec.vistrails_id""", name) - lst = list(c.fetchall()) - versions = set([x[1] for x in lst]) - executions = set(lst) - result = [] - for version in versions: - p = vistrail.getPipeline(int(version)) - inv_graph = p.graph.inverse() - - # s = upstream(x) union x where x.name = filesink blablabla - s = set() - for module_id, module in p.modules.iteritems(): - if (module_id, version) not in executions: - continue - if module.name == 'FileSink': - for f in module.functions: - if (f.name == 'outputName' and - len(f.params) == 1 and - f.params[0].value() == 'atlas-x.gif'): - s = s.union(set(self.upstream(inv_graph, module_id) + [module_id])) - break - - # s2 = upstream(y) where y.name = softmean - s2 = set() - for module_id, module in p.modules.iteritems(): - if module.name == 'SoftMean': - s2 = s2.union(set(self.upstream(inv_graph, module_id) + [module_id])) - - qresult = s - s2 - - for m in qresult: - result.append((int(version), m)) - self.queryResult = result - self.tupleLength = 2 - self.computeIndices() - return result - - class Query3(Query): def run(self, vistrail, name): diff --git a/vistrails/core/requirements.py b/vistrails/core/requirements.py index 06954aa8f..f2831848e 100644 --- a/vistrails/core/requirements.py +++ b/vistrails/core/requirements.py @@ -48,11 +48,8 @@ def python_module_exists(module_name): Returns if python module of given name can be safely imported. """ - try: - sys.modules[module_name] + if module_name in sys.modules: return True - except KeyError: - pass try: __import__(module_name) return True diff --git a/vistrails/core/upgradeworkflow.py b/vistrails/core/upgradeworkflow.py index e8ac63c78..9cef65863 100644 --- a/vistrails/core/upgradeworkflow.py +++ b/vistrails/core/upgradeworkflow.py @@ -875,8 +875,8 @@ def run_multi_upgrade_test(self, pkg_remap): app = get_vistrails_application() created_vistrail = False + pm = get_package_manager() try: - pm = get_package_manager() pm.late_enable_package('upgrades', {'upgrades': 'vistrails.tests.resources.'}) @@ -950,8 +950,8 @@ def test_external_upgrade(self): app.temp_configuration.upgradeDelay = False created_vistrail = False + pm = get_package_manager() try: - pm = get_package_manager() pm.late_enable_package('upgrades', {'upgrades': 'vistrails.tests.resources.'}) diff --git a/vistrails/core/vistrail/connection.py b/vistrails/core/vistrail/connection.py index ea15cdb38..922f557f8 100644 --- a/vistrails/core/vistrail/connection.py +++ b/vistrails/core/vistrail/connection.py @@ -114,24 +114,6 @@ def convert(_connection): for port in _connection.ports: Port.convert(port) - ########################################################################## - # Debugging - - def show_comparison(self, other): - if type(other) != type(self): - print "Type mismatch" - return - if self.__source != other.__source: - print "Source mismatch" - self.__source.show_comparison(other.__source) - return - if self.__dest != other.__dest: - print "Dest mismatch" - self.__dest.show_comparison(other.__dest) - return - print "no difference found" - assert self == other - ########################################################################## # Properties @@ -151,8 +133,8 @@ def _get_sourceId(self): def _set_sourceId(self, id): """ _set_sourceId(id : int) -> None - Sets this connection source id. It updates both self.__source.moduleId - and self.__source.id. Do not use this function, use sourceId + Sets this connection source id. It updates both self.source.moduleId + and self.source.id. Do not use this function, use sourceId property: c.sourceId = id """ @@ -170,7 +152,7 @@ def _get_destinationId(self): def _set_destinationId(self, id): """ _set_destinationId(id : int) -> None - Sets this connection destination id. It updates self.__dest.moduleId. + Sets this connection destination id. It updates self.dest.moduleId. Do not use this function, use destinationId property: c.destinationId = id diff --git a/vistrails/core/vistrail/controller.py b/vistrails/core/vistrail/controller.py index 3902596ba..9c6c16aab 100644 --- a/vistrails/core/vistrail/controller.py +++ b/vistrails/core/vistrail/controller.py @@ -1554,10 +1554,11 @@ def create_name(base_name, names): names = in_names cur_names = in_cur_names process_list = in_process_list - elif m.name == 'OutputPort': + else: # m.name == 'OutputPort' neighbors = self.get_upstream_neighbors(pipeline, m) names = out_names cur_names = out_cur_names + process_list = out_process_list if len(neighbors) < 1: # print "not adding, no neighbors" @@ -1655,7 +1656,7 @@ def create_name(base_name, names): if m.name == 'InputPort': neighbors = self.get_downstream_neighbors(full_pipeline, m) names = in_names - elif m.name == 'OutputPort': + else: # m.name == 'OutputPort' neighbors = self.get_upstream_neighbors(full_pipeline, m) names = out_names if len(neighbors) < 1: @@ -2372,7 +2373,6 @@ def check_abstraction(self, descriptor_tuple, lookup): new_desc.namespace, new_desc.package_version, str(new_desc.version)) return self.check_abstraction(descriptor_tuple, lookup) - return None def ensure_abstractions_loaded(self, vistrail, abs_fnames): lookup = {} diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index 46a832af0..31abd4cb2 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -1513,9 +1513,7 @@ def test_copy(self): self.assertNotEquals(p1.id, p3.id) def test_copy2(self): - import vistrails.core.db.io - - # nedd to id modules and abstraction_modules with same counter + # need to id modules and abstraction_modules with same counter id_scope = IdScope(remap={Abstraction.vtType: Module.vtType}) p1 = self.create_pipeline2(id_scope) diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index b9e4c916a..285dcb60a 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -667,7 +667,8 @@ def message_received(self): self.temp_configuration.spreadsheetDumpPDF = False self.temp_configuration.execute = False self.temp_configuration.batch = False - + + output = None try: # redirect stdout old_stdout = sys.stdout @@ -677,6 +678,7 @@ def message_received(self): sys.stdout.close() sys.stdout = old_stdout except Exception, e: + debug.unexpected_exception(e) import traceback debug.critical("Unknown error", e) result = traceback.format_exc() diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 4726cfde3..d062a88bb 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -543,6 +543,7 @@ def remove_vt_from_db(self, host, port, db_name, user, vt_id): config['db'] = db_name config['user'] = db_write_user config['passwd'] = db_write_pass + conn = None try: conn = vistrails.db.services.io.open_db_connection(config) vistrails.db.services.io.delete_entity_from_db(conn,'vistrail', vt_id) @@ -550,7 +551,7 @@ def remove_vt_from_db(self, host, port, db_name, user, vt_id): return (1, 1) except Exception, e: self.server_logger.error(str(e)) - if conn: + if conn is not None: vistrails.db.services.io.close_db_connection(conn) return (str(e), 0) @@ -683,7 +684,7 @@ def run_from_db_webgl(self, host, port, db_name, vt_id, path_to_figures, package='edu.utah.sci.vistrails.vtWebGL', functions=[]) mWeb.version = '0.0.2' - workflow.add_module(mWeb); + workflow.add_module(mWeb) # create connection from render to web source = Port(id=id_scope.getNewId(Port.vtType), type='source', @@ -702,7 +703,7 @@ def run_from_db_webgl(self, host, port, db_name, vt_id, path_to_figures, workflow.add_connection(c1) workflow.validate() - c.current_pipeline = workflow; + c.current_pipeline = workflow (results, x) = c.execute_current_workflow() if len(results[0].errors.values()) > 0: print "> ERROR: ", results[0].errors diff --git a/vistrails/gui/collection/explorer.py b/vistrails/gui/collection/explorer.py index a02724e6d..c6d04964f 100644 --- a/vistrails/gui/collection/explorer.py +++ b/vistrails/gui/collection/explorer.py @@ -181,18 +181,17 @@ def checkConnection(connectionList): conn = connectionList.get_connection(conn_id) config = getConnectionInfo(connectionList, conn_id) if config != None: + config_name = config['name'] + config_id = config['id'] try: - config_name = config['name'] - del config['name'] - config_id = config['id'] - del config['id'] test_db_connection(config) except VistrailsDBException: # assume connection is wrong - config['name'] = config_name - config['id'] = config_id config["create"] = False showConnConfig(connectionList, **config) + else: + del config['name'] + del config['id'] class QDBWidget(QtGui.QWidget): """ Custom widget for handling the showConnConfig """ @@ -369,10 +368,8 @@ def searchDatabase(self): config = self.config if conn.dbtype == 'MySQL': #removing extra keyword arguments for MySQldb - config_name = config['name'] - del config['name'] - config_id = config['id'] - del config['id'] + config_name = config.pop('name') + config_id = config.pop('id') wf_exec_list = runLogQuery(config, vistrail=self.vistrail, version=self.version, @@ -646,10 +643,8 @@ def searchDatabase(self): config = self.config if conn.dbtype == 'MySQL': #removing extra keyword arguments for MySQldb - config_name = config['name'] - del config['name'] - config_id = config['id'] - del config['id'] + config_name = config.pop('name') + config_id = config.pop('id') workflow_list = runWorkflowQuery(config, vistrail=self.vistrail, version=self.version, diff --git a/vistrails/gui/collection/workspace.py b/vistrails/gui/collection/workspace.py index 92c9bc84f..038549119 100644 --- a/vistrails/gui/collection/workspace.py +++ b/vistrails/gui/collection/workspace.py @@ -206,7 +206,7 @@ def remove_all(self): def add_file(self): s = QtGui.QFileDialog.getOpenFileName( self, "Choose a file", - "", "Vistrail files (*.vt *.xml)"); + "", "Vistrail files (*.vt *.xml)") if str(s): locator = FileLocator(str(s)) url = locator.to_url() @@ -218,7 +218,7 @@ def add_file(self): def add_dir(self): s = QtGui.QFileDialog.getExistingDirectory( self, "Choose a directory", - "", QtGui.QFileDialog.ShowDirsOnly); + "", QtGui.QFileDialog.ShowDirsOnly) if str(s): self.update_from_directory(str(s)) @@ -394,7 +394,6 @@ def remove_object(self): class QWorkflowEntityItem(QBrowserWidgetItem): def get_vistrail(self): parent = self.parent() - QVistrailEntityItem while parent and type(parent) != QVistrailEntityItem: parent = parent.parent() return parent diff --git a/vistrails/gui/debugger.py b/vistrails/gui/debugger.py index 5b27be5fd..5f738c9a2 100644 --- a/vistrails/gui/debugger.py +++ b/vistrails/gui/debugger.py @@ -33,6 +33,7 @@ ## ############################################################################### from PyQt4 import QtGui, QtCore +from vistrails.core.modules.vistrails_module import ModuleError import vistrails.core.system import copy import sys @@ -203,7 +204,7 @@ def create_port_item(self, port_name, port_value, display_vals=False, if display_vals: p_item.setText(1, str(port_value)) else: - typestr = str(port_val.__class__) + typestr = str(port_value.__class__) typestr = typestr.split('.') typestr = typestr[len(typestr)-1] typestr = typestr[0:len(typestr)-2] diff --git a/vistrails/gui/mashups/mashups_manager.py b/vistrails/gui/mashups/mashups_manager.py index 4619cd849..74dba6262 100644 --- a/vistrails/gui/mashups/mashups_manager.py +++ b/vistrails/gui/mashups/mashups_manager.py @@ -116,7 +116,7 @@ def createMashupController(self, vt_controller, version, view=DummyView()): MashupsManager.addMashuptrailtoVistrailController(vt_controller, mashuptrail) - elif res == 'Move': + else: # res == 'Move' # we will move the parent trail and validate all mashups # for the current pipeline to make sure they will be # executable for the current version diff --git a/vistrails/gui/module_palette.py b/vistrails/gui/module_palette.py index 36668f0a3..f5f4f88db 100644 --- a/vistrails/gui/module_palette.py +++ b/vistrails/gui/module_palette.py @@ -290,10 +290,10 @@ def contextMenuEvent(self, event): identifiers = [i for i, j in self.parent().packages.iteritems() if j == weakref.ref(p)] if identifiers: + identifier = identifiers[0] + registry = get_module_registry() + package = registry.packages[identifier] try: - identifier = identifiers[0] - registry = get_module_registry() - package = registry.packages[identifier] if package.has_contextMenuName(): name = package.contextMenuName(str(item.text(0))) if name: diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index d1663df7a..06f688d7a 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -39,7 +39,7 @@ from PyQt4 import QtCore, QtGui -from vistrails.core.configuration import ConfigPath +from vistrails.core.configuration import ConfigPath, ConfigField from vistrails.core.modules.basic_modules import Dictionary from vistrails.gui.common_widgets import QSearchTreeWindow, QSearchTreeWidget, \ QFileChooserToolButton, QDirectoryChooserToolButton @@ -374,7 +374,7 @@ def add_combo(self, layout, field, config_key, config_desc, config_val): for entry in entries: combo.addItem(entry) self.set_combo_value(combo, config_val) - laout.addWidget(combo, row, 1) + layout.addWidget(combo, row, 1) def call_field_changed(val): if inv_remap is not None: diff --git a/vistrails/gui/modules/paramexplore.py b/vistrails/gui/modules/paramexplore.py index 0ccc0542c..e7dc55f0a 100644 --- a/vistrails/gui/modules/paramexplore.py +++ b/vistrails/gui/modules/paramexplore.py @@ -665,7 +665,6 @@ def get_values(self, count): param_info = self._param_info module = param_info.spec.descriptor.module def get(): - import code values = [] d = {} try: diff --git a/vistrails/gui/open_db_window.py b/vistrails/gui/open_db_window.py index 98d79183b..36283b266 100644 --- a/vistrails/gui/open_db_window.py +++ b/vistrails/gui/open_db_window.py @@ -481,20 +481,13 @@ def setConnectionInfo(self, *args, **kwargs): If the connection exists it will update it, else it will add it """ - if kwargs.has_key("id"): - id = kwargs["id"] - if kwargs.has_key("name"): - name = kwargs["name"] - if kwargs.has_key("host"): - host = kwargs["host"] - if kwargs.has_key("port"): - port = kwargs["port"] - if kwargs.has_key("user"): - user = kwargs["user"] - if kwargs.has_key("passwd"): - passwd = kwargs["passwd"] - if kwargs.has_key("db"): - db = kwargs["db"] + id = kwargs["id"] + name = kwargs["name"] + host = kwargs["host"] + port = kwargs["port"] + user = kwargs["user"] + passwd = kwargs["passwd"] + db = kwargs["db"] conn = DBConnection(id=id, name=name, @@ -552,10 +545,8 @@ def getDBObjectList(self, conn_id, obj_type): config = self.getConnectionInfo(conn_id) if conn.dbtype == 'MySQL': #removing extra keyword arguments for MySQldb - config_name = config['name'] - del config['name'] - config_id = config['id'] - del config['id'] + config_name = config.pop('name') + config_id = config.pop('id') vt_list = vistrails.db.services.io.get_db_object_list(config, obj_type) if conn.dbtype == 'MySQL': config['name'] = config_name diff --git a/vistrails/gui/paramexplore/pe_table.py b/vistrails/gui/paramexplore/pe_table.py index cba2241fb..ab2d76b07 100644 --- a/vistrails/gui/paramexplore/pe_table.py +++ b/vistrails/gui/paramexplore/pe_table.py @@ -38,6 +38,7 @@ from ast import literal_eval from xml.dom.minidom import parseString from xml.sax.saxutils import escape, unescape +from vistrails.core.vistrail.module_param import ModuleParam from vistrails.gui.theme import CurrentTheme from vistrails.gui.common_widgets import QPromptWidget from vistrails.gui.modules.paramexplore import QParameterEditor diff --git a/vistrails/gui/paramexplore/virtual_cell.py b/vistrails/gui/paramexplore/virtual_cell.py index ec515e64c..f57cc5925 100644 --- a/vistrails/gui/paramexplore/virtual_cell.py +++ b/vistrails/gui/paramexplore/virtual_cell.py @@ -42,11 +42,6 @@ import copy import os.path -# FIXME broke this as Actions have been changed around -# -# from core.vistrail.action import AddModuleAction, AddConnectionAction, \ -# DeleteConnectionAction, ChangeParameterAction - ############################################################################### def split_camel_case(text): diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py index d2af69c29..465b04d26 100644 --- a/vistrails/gui/preferences.py +++ b/vistrails/gui/preferences.py @@ -688,7 +688,6 @@ def configuration_changed(self, item, new_value): we guarantee the changes were saved before VisTrails crashes. """ - from PyQt4 import QtCore from vistrails.gui.application import get_vistrails_application get_vistrails_application().save_configuration() diff --git a/vistrails/gui/publishing.py b/vistrails/gui/publishing.py index 0f6edb1a7..017c8ee5c 100644 --- a/vistrails/gui/publishing.py +++ b/vistrails/gui/publishing.py @@ -453,13 +453,13 @@ def __init__(self, parent=None, f=QtCore.Qt.WindowFlags()): label1 = QtGui.QLabel("Embed:") self.cbcontent = QtGui.QComboBox() self.cbcontent.setEditable(False) - items = ["Workflow Results", "Workflow Graph", "History Tree Graph"]; + items = ["Workflow Results", "Workflow Graph", "History Tree Graph"] self.cbcontent.addItems(items) label2 = QtGui.QLabel("In:") self.cbtype = QtGui.QComboBox() self.cbtype.setEditable(False) - items = ["Wiki", "Latex", "Shared Memory"]; + items = ["Wiki", "Latex", "Shared Memory"] self.cbtype.addItems(items) self.controller = None diff --git a/vistrails/gui/query_view.py b/vistrails/gui/query_view.py index bbc435f68..9bcd43789 100644 --- a/vistrails/gui/query_view.py +++ b/vistrails/gui/query_view.py @@ -150,7 +150,7 @@ def do_search(only_current_vistrail=False, result_entities = do_search(True) self.update_version_tree() self.show_workflow_matches() - elif self.level == QueryController.LEVEL_ALL: + else: # self.level == QueryController.LEVEL_ALL result_entities = do_search() self.show_global_matches() diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index d7f0a0bfb..4716659bd 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -473,13 +473,9 @@ def reset(self, locals): self.pointer = 0 self.last = 0 # interpreter prompt. - if hasattr(sys, "ps1"): - sys.ps1 - else: + if not hasattr(sys, "ps1"): sys.ps1 = ">>> " - if hasattr(sys, "ps2"): - sys.ps2 - else: + if not hasattr(sys, "ps2"): sys.ps2 = "... " # interpreter banner diff --git a/vistrails/gui/version_view.py b/vistrails/gui/version_view.py index a40b5fe6b..b3e02a53f 100644 --- a/vistrails/gui/version_view.py +++ b/vistrails/gui/version_view.py @@ -886,7 +886,7 @@ def adjust_version_colors(self, controller): custom_color = parse_custom_color(custom_color.value) except ValueError, e: debug.warning("Version %r has invalid color annotation " - "(%s)" % (v, e)) + "(%s)" % (nodeId, e)) custom_color = None else: custom_color = None diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index ae25e2766..bf41c9d0d 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -905,7 +905,7 @@ def collapse_versions(self, v): children = [to for (to, _) in full.adjacency_list[current] if (to in am) and not self.vistrail.is_pruned(to)] if len(children) > 1: - break; + break self.vistrail.collapseVersion(current) changed = True diff --git a/vistrails/gui/vistrail_view.py b/vistrails/gui/vistrail_view.py index d258bf35f..474b4751d 100644 --- a/vistrails/gui/vistrail_view.py +++ b/vistrails/gui/vistrail_view.py @@ -687,7 +687,7 @@ def tab_changed(self, index): self.set_to_current(view) def set_to_current(self, view): - from vistrails.gui.vistrails_window import _app, QVistrailViewWindow + from vistrails.gui.vistrails_window import _app if isinstance(view, QDiffView): view.set_to_current() #print "view changed!", self.controller, \ diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 6a6eace45..50f91472e 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1186,11 +1186,11 @@ def dock_palettes(self, window=None): for dock_area, p_group in self.palette_layout: for p_klass in p_group: + assert isinstance(p_klass, tuple) + p_klass, visible = p_klass if isinstance(p_klass, tuple): + notifications = visible p_klass, visible = p_klass - if isinstance(p_klass, tuple): - notifications = visible - p_klass, visible = p_klass palette = p_klass.instance() if dock_area == QtCore.Qt.RightDockWidgetArea: pin_status = palette.get_pin_status() @@ -1665,13 +1665,14 @@ def open_vistrail_from_locator(self, locator_class): if locator.has_temporaries(): if not locator_class.prompt_autosave(self): locator.clean_temporaries() - if hasattr(locator, '_vnode'): + version = None + if hasattr(locator,'_vtag'): + # if a tag is set, it should be used instead of the + # version number + if locator._vtag != '': + version = locator._vtag + elif hasattr(locator, '_vnode'): version = locator._vnode - if hasattr(locator,'_vtag'): - # if a tag is set, it should be used instead of the - # version number - if locator._vtag != '': - version = locator._vtag mashuptrail = None mashupversion = None execute = False @@ -1965,7 +1966,7 @@ def get_next_view(self): return self.stack.currentWidget() else: if len(self.windows) > 0: - return self.windows.iterkeys().next() + return next(self.windows.iterkeys()) return None def get_current_controller(self): diff --git a/vistrails/packages/RemoteQ/init.py b/vistrails/packages/RemoteQ/init.py index b86c9eb18..e58aebe5a 100644 --- a/vistrails/packages/RemoteQ/init.py +++ b/vistrails/packages/RemoteQ/init.py @@ -241,13 +241,13 @@ def compute(self): job = PBS("remote", command, working_directory, dependencies = [trans], **additional_arguments) job.run() - try: - ret = job._ret - if ret: + ret = job._ret + if ret: + try: job_id = int(ret) - except ValueError: - end_machine() - raise ModuleError(self, "Error submitting job: %s" % ret) + except ValueError: + end_machine() + raise ModuleError(self, "Error submitting job: %s" % ret) finished = job.finished() job_info = job.get_job_info() if job_info: @@ -320,13 +320,13 @@ def startJob(self, params): self.job = PBSScript("remote", params['command'], work_dir, dependencies = [trans], **params['additional_arguments']) self.job.run() - try: - ret = self.job._ret - if ret: + ret = self.job._ret + if ret: + try: job_id = int(ret.split('\n')[0]) - except ValueError: - end_machine() - raise ModuleError(self, "Error submitting job: %s" % ret) + except ValueError: + end_machine() + raise ModuleError(self, "Error submitting job: %s" % ret) self.set_job_machine(params, self.machine) return params diff --git a/vistrails/packages/SUDSWebServices/init.py b/vistrails/packages/SUDSWebServices/init.py index 1078128b7..7333941e8 100644 --- a/vistrails/packages/SUDSWebServices/init.py +++ b/vistrails/packages/SUDSWebServices/init.py @@ -607,7 +607,7 @@ def compute(self): except Exception, e: debug.unexpected_exception(e) raise ModuleError(self, "Error invoking method %s: %s" % ( - name, debug.format_exception(e))) + mname, debug.format_exception(e))) for name, qtype in self.wsmethod.outputs.iteritems(): if isinstance(result, list): # if result is a list just set the output diff --git a/vistrails/packages/URL/init.py b/vistrails/packages/URL/init.py index 9b9be1d9c..5542b9329 100644 --- a/vistrails/packages/URL/init.py +++ b/vistrails/packages/URL/init.py @@ -539,11 +539,8 @@ def compute(self): self.checksum = self.get_input("checksum") # get file path path_url = "%s/datasets/path/%s/"%(self.base_url, self.checksum) - try: - dataset_path_request = urllib2.urlopen(url=path_url) - dataset_path = dataset_path_request.read() - except urllib2.HTTPError: - pass + dataset_path_request = urllib2.urlopen(url=path_url) + dataset_path = dataset_path_request.read() if os.path.isfile(dataset_path): out_file = PathObject(dataset_path) diff --git a/vistrails/packages/analytics/init.py b/vistrails/packages/analytics/init.py index 2a4702790..cd29cee4a 100644 --- a/vistrails/packages/analytics/init.py +++ b/vistrails/packages/analytics/init.py @@ -114,7 +114,7 @@ def count_actions(self, vistrail): Tally[action.what] = {action.vtType : 1} # if is there, if subdictionary does not have vtType key, create entry - elif Tally.has_key(action.what) == none: + elif Tally.has_key(action.what) is None: Tally[action.what] = {action.vtType : 1} return Tally diff --git a/vistrails/packages/gmaps/init.py b/vistrails/packages/gmaps/init.py index 07b316bd7..6cad63e8a 100644 --- a/vistrails/packages/gmaps/init.py +++ b/vistrails/packages/gmaps/init.py @@ -2,6 +2,11 @@ from .vis import _modules as vis_modules from .identifiers import identifier +from vistrails.core.modules.utils import create_port_spec_string +from vistrails.core.vistrail.port import Port +from vistrails.core.vistrail.port_spec import PortSpec +from vistrails.core.vistrail.port_spec_item import PortSpecItem + _modules = gmap_modules + vis_modules def handle_module_upgrade_request(controller, module_id, pipeline): diff --git a/vistrails/packages/matplotlib/figure_cell.py b/vistrails/packages/matplotlib/figure_cell.py index 55c5d553d..35c8034a5 100644 --- a/vistrails/packages/matplotlib/figure_cell.py +++ b/vistrails/packages/matplotlib/figure_cell.py @@ -54,7 +54,6 @@ class MplFigureToSpreadsheet(SpreadsheetMode): @classmethod def can_compute(cls): return SpreadsheetMode.can_compute() - return True def compute_output(self, output_module, configuration=None): fig = output_module.get_input('value') diff --git a/vistrails/packages/matplotlib/init.py b/vistrails/packages/matplotlib/init.py index b82c01f20..9688655a6 100644 --- a/vistrails/packages/matplotlib/init.py +++ b/vistrails/packages/matplotlib/init.py @@ -129,6 +129,7 @@ def attach_inputs(new_module, inputs, selected_inputs): to_properties = [] to_axes = [] old_figure = (None, None) + props_name = None if module.name == 'MplScatterplot': props_name = 'MplPathCollectionProperties' props_input = 'pathCollectionProperties' @@ -208,6 +209,9 @@ def attach_inputs(new_module, inputs, selected_inputs): more_ops = [] if any(p in inputs[0] or p in inputs[1] for p in to_properties): # create props module + if props_name is None: + raise RuntimeError("properties module needed for unknown module " + "%s" % module.name) desc = reg.get_descriptor_by_name(identifier, props_name) props_module = \ controller.create_module_from_descriptor(desc, diff --git a/vistrails/packages/parallelflow/engine_manager.py b/vistrails/packages/parallelflow/engine_manager.py index 58763f605..5bea853dc 100644 --- a/vistrails/packages/parallelflow/engine_manager.py +++ b/vistrails/packages/parallelflow/engine_manager.py @@ -12,8 +12,7 @@ try: from PyQt4 import QtCore, QtGui - QtGui.QDialog -except Exception: +except ImportError: qt_available = False else: qt_available = True @@ -271,7 +270,7 @@ def progress(n): pass if qt_available: bar.hide() bar.deleteLater() - print "parallelflow: %d engines started" % (i + 1) + print "parallelflow: %d engines started" % nb def info(self): """Show some information on the cluster. diff --git a/vistrails/packages/persistence/init.py b/vistrails/packages/persistence/init.py index d3c23951f..4415631c3 100644 --- a/vistrails/packages/persistence/init.py +++ b/vistrails/packages/persistence/init.py @@ -598,11 +598,12 @@ def initialize(): check_paths = literal_eval(configuration.search_dbs) except Exception: print "*** persistence error: cannot parse search_dbs ***" - for path in check_paths: - if os.path.exists(path): - search_dbs.append(path) - else: - print '*** persistence warning: cannot find path "%s"' % path + else: + for path in check_paths: + if os.path.exists(path): + search_dbs.append(path) + else: + print '*** persistence warning: cannot find path "%s"' % path _configuration_widget = None diff --git a/vistrails/packages/persistence/repo.py b/vistrails/packages/persistence/repo.py index b43eec950..147845e1f 100644 --- a/vistrails/packages/persistence/repo.py +++ b/vistrails/packages/persistence/repo.py @@ -159,7 +159,6 @@ def read_chunk(): return f.read(chunk_size) my_iter = chain([head], iter(read_chunk,'')) return iter_sha1(my_iter) - return None @staticmethod def compute_tree_hash(dirname): diff --git a/vistrails/packages/persistence/widgets.py b/vistrails/packages/persistence/widgets.py index db35a10db..b4695b437 100644 --- a/vistrails/packages/persistence/widgets.py +++ b/vistrails/packages/persistence/widgets.py @@ -269,22 +269,16 @@ def remove_data(self, where_dict): id = where_dict['id'] version = where_dict.get('version', None) if version is not None: - found = False for idx, value_tuple in enumerate(self.id_lists[id]): if value_tuple[self.idxs['version']] == version: - found = True + del self.id_lists[id][idx] break - if found: - del self.id_lists[id][idx] else: path_type = self.id_lists[id][0][self.idxs['type']] - found = False for idx, key_id in enumerate(self.id_lists_keys): if key_id == id: - found = True + del self.id_lists_keys[idx] break - if found: - del self.id_lists_keys[idx] del self.id_lists[id] self.reset() @@ -836,6 +830,8 @@ def new_file_changed(self): new_file = str(self.new_file.get_path()) if new_file: base_name = os.path.basename(new_file) + else: + base_name = '' self.name_edit.setText(base_name) self.keep_local.setChecked(True) self.local_path.set_path(new_file) diff --git a/vistrails/packages/spreadsheet/spreadsheet_base.py b/vistrails/packages/spreadsheet/spreadsheet_base.py index 983b705c6..79aa8df7e 100644 --- a/vistrails/packages/spreadsheet/spreadsheet_base.py +++ b/vistrails/packages/spreadsheet/spreadsheet_base.py @@ -202,7 +202,6 @@ def getCellToolBar(self, row, col): return self.toolBars[cell.toolBarType] else: return self.blankCellToolBar - return self.sheet.getCellToolBar(row, col) def getCellRect(self, row, col): """ getCellRect(row: int, col: int) -> QRect diff --git a/vistrails/packages/spreadsheet/spreadsheet_execute.py b/vistrails/packages/spreadsheet/spreadsheet_execute.py index fa5c4aebe..1a013f5d4 100644 --- a/vistrails/packages/spreadsheet/spreadsheet_execute.py +++ b/vistrails/packages/spreadsheet/spreadsheet_execute.py @@ -54,11 +54,6 @@ from identifiers import identifier as spreadsheet_pkg -# FIXME broke this as Actions have been changed around -# -# from core.vistrail.action import AddModuleAction, AddConnectionAction, \ -# DeleteConnectionAction, ChangeParameterAction - ################################################################################ def assignPipelineCellLocations(pipeline, sheetName, diff --git a/vistrails/packages/spreadsheet/spreadsheet_tab.py b/vistrails/packages/spreadsheet/spreadsheet_tab.py index c1d2096db..9088da348 100644 --- a/vistrails/packages/spreadsheet/spreadsheet_tab.py +++ b/vistrails/packages/spreadsheet/spreadsheet_tab.py @@ -895,7 +895,7 @@ def indexAtPos(self, p): for i in xrange(self.count()): if self.isTabEnabled(i) and self.tabRect(i).contains(p): return i - return -1; + return -1 def mousePressEvent(self, e): """ mousePressEvent(e: QMouseEvent) -> None diff --git a/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py b/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py index 25197012e..489e25854 100644 --- a/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py +++ b/vistrails/packages/spreadsheet/spreadsheet_tabcontroller.py @@ -763,7 +763,7 @@ def parse_locator(text): "&Cancel", 0, pipelineCount, self, QtCore.Qt.WindowStaysOnTopHint - ); + ) progress.show() for pipelineIdx in xrange(pipelineCount): # FIXME: eval should pretty much never be used diff --git a/vistrails/packages/vtk/vtkcell.py b/vistrails/packages/vtk/vtkcell.py index 01a4138e1..b9ac73660 100644 --- a/vistrails/packages/vtk/vtkcell.py +++ b/vistrails/packages/vtk/vtkcell.py @@ -324,6 +324,7 @@ def SetRenderWindow(self,w): if self.mRenWin.GetMapped(): self.mRenWin.Finalize() if system.systemType=='Linux': + vp = None try: vp = '_%s_void_p' % (hex(int(QtGui.QX11Info.display()))[2:]) except TypeError: @@ -331,13 +332,14 @@ def SetRenderWindow(self,w): if isinstance(QtGui.QX11Info.display(),QtGui.Display): display = sip.unwrapinstance(QtGui.QX11Info.display()) vp = '_%s_void_p' % (hex(display)[2:]) - v = vtk.vtkVersion() - version = [v.GetVTKMajorVersion(), - v.GetVTKMinorVersion(), - v.GetVTKBuildVersion()] - if version < [5, 7, 0]: - vp = vp + '\0x00' - self.mRenWin.SetDisplayId(vp) + if vp is not None: + v = vtk.vtkVersion() + version = [v.GetVTKMajorVersion(), + v.GetVTKMinorVersion(), + v.GetVTKBuildVersion()] + if version < [5, 7, 0]: + vp = vp + '\0x00' + self.mRenWin.SetDisplayId(vp) self.resizeWindow(1,1) self.mRenWin.SetWindowInfo(str(int(self.winId()))) if self.isVisible(): diff --git a/vistrails/packages/vtk/vtkviewcell.py b/vistrails/packages/vtk/vtkviewcell.py index cfa463fe3..f9aba8535 100644 --- a/vistrails/packages/vtk/vtkviewcell.py +++ b/vistrails/packages/vtk/vtkviewcell.py @@ -251,6 +251,7 @@ def SetRenderWindow(self,w): if self.mRenWin: self.mRenWin.Register(None) if system.systemType=='Linux': + vp = None try: vp = '_%s_void_p' % (hex(int(QtGui.QX11Info.display()))[2:]) except TypeError: @@ -258,7 +259,8 @@ def SetRenderWindow(self,w): if isinstance(QtGui.QX11Info.display(),QtGui.Display): display = sip.unwrapinstance(QtGui.QX11Info.display()) vp = '_%s_void_p' % (hex(display)[2:]) - self.mRenWin.SetDisplayId(vp) + if vp is not None: + self.mRenWin.SetDisplayId(vp) if not self.mRenWin.GetMapped(): self.mRenWin.GetInteractor().Initialize() system.XDestroyWindow(self.mRenWin.GetGenericDisplayId(), diff --git a/vistrails/packages/webServices/init.py b/vistrails/packages/webServices/init.py index e0d514115..b68f10bfd 100644 --- a/vistrails/packages/webServices/init.py +++ b/vistrails/packages/webServices/init.py @@ -434,10 +434,7 @@ def compute(self): if str(element.name) == str(name): #get the request method name reqname = element.input.getMessage().name - try: - req = getattr(self.modclient,reqname)() - except: - print "sys.exc_value: ", sys.exc_value + req = getattr(self.modclient,reqname)() for inparam in inparams: #Now set all attributes for the request object if self.has_input(inparam.name): From ad18c1e260f612e7691125bc1cd958e63f1bfc9c Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 14:02:28 -0400 Subject: [PATCH 027/194] Marks problems --- vistrails/core/modules/abstraction.py | 2 +- vistrails/core/vistrail/pipeline.py | 7 +++++-- vistrails/core/vistrail/vistrail.py | 1 + vistrails/gui/application.py | 2 +- vistrails/gui/application_server.py | 2 +- vistrails/gui/modules/output_configuration.py | 2 +- vistrails/gui/shell.py | 2 +- vistrails/packages/JobSubmission/init.py | 2 +- vistrails/packages/matplotlib/plots.py | 2 +- .../packages/spreadsheet/widgets/imageviewer/__init__.py | 2 +- 10 files changed, 14 insertions(+), 10 deletions(-) diff --git a/vistrails/core/modules/abstraction.py b/vistrails/core/modules/abstraction.py index f372e9a1d..53e61dd11 100644 --- a/vistrails/core/modules/abstraction.py +++ b/vistrails/core/modules/abstraction.py @@ -164,7 +164,7 @@ def package_dependencies(): all_packages.update(p for p in dependencies.iterkeys() if p != identifier) my_vistrails[abstraction[:-4]] = \ - (vistrail, abs_fname, inter_depends) + (vistrail, abs_fname, inter_depends) # FIXME vistrail might not be set else: debug.critical(("Subworkflow '%s' is missing packages it " + "depends on") % abstraction) diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index 31abd4cb2..38d412ce0 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -290,6 +290,7 @@ def check_connection(self, c): Checks semantics of connection """ + # FIXME : there *EndPoint attributes don't exist if c.source.endPoint != Port.SourceEndPoint: return False if c.destination.endPoint != Port.DestinationEndPoint: @@ -305,8 +306,10 @@ def check_connection(self, c): def connects_at_port(self, p): """ connects_at_port(p: Port) -> list of Connection Returns a list of Connections that connect at port p - + """ + # FIXME : there *EndPoint attributes don't exist + # FIXME : no VTKRTTI global result = [] if p.endPoint == Port.DestinationEndPoint: el = self.graph.edges_to(p.moduleId) @@ -485,7 +488,7 @@ def change_connection(self, old_id, c, *args): old_conn.id) if self.graph.out_degree(old_conn.sourceId) < 1: self.modules[old_conn.sourceId].connected_output_ports.discard( - conn.source.name) + conn.source.name) # FIXME : conn is c? old_conn? if self.graph.in_degree(old_conn.destinationId) < 1: connected_input_ports = \ self.modules[old_conn.destinationId].connected_input_ports diff --git a/vistrails/core/vistrail/vistrail.py b/vistrails/core/vistrail/vistrail.py index 5c8e7dcc1..3a8c43818 100644 --- a/vistrails/core/vistrail/vistrail.py +++ b/vistrails/core/vistrail/vistrail.py @@ -334,6 +334,7 @@ def make_actions_from_diff(self, diff): (The point is that this might be smaller than the algebra-based one). """ + # FIXME : Uses long-gone *Action (p1, p2, m_shared, diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index 285dcb60a..59245dc0e 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -503,7 +503,7 @@ def noninteractiveMode(self): port=self.temp_configuration.check('port') or 3306, database=self.temp_configuration.check('db'), user=self.temp_configuration.check('user'), - passwd=passwd, + passwd=passwd, # FIXME : passwd not set here obj_id=f_name, obj_type=None, connection_id=None) diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index d062a88bb..36ee1c7d1 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -67,7 +67,7 @@ from vistrails.core.utils import InstanceObject from vistrails.core.vistrail.vistrail import Vistrail -from vistrails.core import command_line +from vistrails.core import command_line # FIXME : This file doesn't exist. I take it application_server is not used anymore? from vistrails.core import system from vistrails.core.modules.module_registry import get_module_registry as module_registry from vistrails.core import interpreter diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index 06f688d7a..14113d704 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -384,7 +384,7 @@ def call_field_changed(val): return combo def set_combo_value(self, combo, config_val): - if "allowed_values" in options: + if "allowed_values" in options: # FIXME : options unset here if "remap" in options: remap = options["remap"] cur_text = remap[config_val] diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index 4716659bd..a234b4d68 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -514,7 +514,7 @@ def readline(self): self.setTextCursor(cursor) while self.reading: - qApp.processOneEvent() + qApp.processOneEvent() # FIXME : unset. Is this even used? if len(self.line) == 0: return '\n' else: diff --git a/vistrails/packages/JobSubmission/init.py b/vistrails/packages/JobSubmission/init.py index 99ce15714..fb4fd01e2 100644 --- a/vistrails/packages/JobSubmission/init.py +++ b/vistrails/packages/JobSubmission/init.py @@ -304,7 +304,7 @@ def collective_compute(self): members = [ ('_input_ports', [('operation', '(org.comp-phys.batchq:JobOperation)'),('job', '(org.comp-phys.batchq:Job)')] ), ('_output_ports', [('job', '(org.comp-phys.batchq:Job)')] ), ('compute', collective_compute ), - ('collection_name', name)] + ('collection_name', name)] # FIXME : there is no way "name" is what you meant here namespace = categories['job_collective_operations'] for name, func in collective.iteritems(): dct = dict(members) diff --git a/vistrails/packages/matplotlib/plots.py b/vistrails/packages/matplotlib/plots.py index ee96abd6e..d7a243948 100644 --- a/vistrails/packages/matplotlib/plots.py +++ b/vistrails/packages/matplotlib/plots.py @@ -888,7 +888,7 @@ def plot_figure(self, figure, args, kwargs): matplotlib.pyplot.broken_barh(*args, **kwargs) if self.has_input('brokenBarHCollectionProperties'): properties = self.get_input('brokenBarHCollectionProperties') - if brokenBarHCollection is not None: + if brokenBarHCollection is not None: # FIXME : this is not set properties.update_props(brokenBarHCollection) class MplBoxplot(MplPlot): diff --git a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py index dd3522da3..790320ea3 100644 --- a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py +++ b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py @@ -36,7 +36,7 @@ # ImageViewer plugin for VisTrails Spreadsheet ################################################################################ from imageviewer import ImageViewerCell, ImageFileToSpreadsheet -from vistrails.core.modules.output_modules import ImageFileOutput +from vistrails.core.modules.output_modules import ImageFileOutput # FIXME : This is missing ################################################################################ From 64b40dd73c0765450dc9bcbfdd54b849895582a5 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 14:22:17 -0400 Subject: [PATCH 028/194] Removes broken methods that I confirmed are unused --- vistrails/core/vistrail/pipeline.py | 42 ---------- vistrails/core/vistrail/vistrail.py | 119 ---------------------------- 2 files changed, 161 deletions(-) diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index 38d412ce0..0e6f12ab7 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -285,48 +285,6 @@ def fresh_module_id(self): def fresh_connection_id(self): return self.get_tmp_id(Connection.vtType) - def check_connection(self, c): - """check_connection(c: Connection) -> boolean - Checks semantics of connection - - """ - # FIXME : there *EndPoint attributes don't exist - if c.source.endPoint != Port.SourceEndPoint: - return False - if c.destination.endPoint != Port.DestinationEndPoint: - return False - if not self.has_module_with_id(c.sourceId): - return False - if not self.has_module_with_id(c.destinationId): - return False - if c.source.type != c.destination.type: - return False - return True - - def connects_at_port(self, p): - """ connects_at_port(p: Port) -> list of Connection - Returns a list of Connections that connect at port p - - """ - # FIXME : there *EndPoint attributes don't exist - # FIXME : no VTKRTTI global - result = [] - if p.endPoint == Port.DestinationEndPoint: - el = self.graph.edges_to(p.moduleId) - for (edgeto, edgeid) in el: - dest = self.connection[edgeid].destination - if VTKRTTI().intrinsicPortEqual(dest, p): - result.append(self.connection[edgeid]) - elif p.endPoint == Port.SourceEndPoint: - el = self.graph.edges_from(p.moduleId) - for (edgeto, edgeid) in el: - source = self.connection[edgeid].source - if VTKRTTI().intrinsicPortEqual(source, p): - result.append(self.connection[edgeid]) - else: - raise VistrailsInternalError("port with bogus information") - return result - def connections_to_module(self, moduleId): """ connections_to_module(int moduleId) -> list of module ids returns a list of module ids that are inputs to the given moduleId diff --git a/vistrails/core/vistrail/vistrail.py b/vistrails/core/vistrail/vistrail.py index 3a8c43818..e5ccca240 100644 --- a/vistrails/core/vistrail/vistrail.py +++ b/vistrails/core/vistrail/vistrail.py @@ -327,125 +327,6 @@ def getPipelineVersionNumber(self, version): workflow = vistrails.core.db.io.get_workflow(self, version) return workflow - def make_actions_from_diff(self, diff): - """ make_actions_from_diff(diff) -> [action] - Returns a sequence of actions that performs the diff. - - (The point is that this might be smaller than the - algebra-based one). - """ - # FIXME : Uses long-gone *Action - (p1, - p2, - m_shared, - m_to_be_deleted, - m_to_be_added, - parameter_changes, - c_shared, - c_to_be_deleted, - c_to_be_added) = (diff.p1, - diff.p2, - diff.v1andv2, - diff.v1only, - diff.v2only, - diff.paramchanged, - diff.c1andc2, - diff.c1only, - diff.c2only) - - p1_c = copy.copy(p1) - result = [] - - module_id_remap = Bidict() - module_id_remap.update(m_shared) - - connection_id_remap = Bidict() - connection_id_remap.update(c_shared) - - for ((m_id_from, m_id_to), _) in parameter_changes: - module_id_remap[m_id_from] = m_id_to - - # First all the modules to get the remap - for p2_m_id in m_to_be_added: - add_module = AddModuleAction() - add_module.module = copy.copy(p2.modules[p2_m_id]) - add_module.module.id = p1_c.fresh_module_id() - module_id_remap[add_module.module.id] = p2_m_id - result.append(add_module) - add_module.perform(p1_c) - - - # Then all the connections using the remap - for p2_c_id in c_to_be_added: - c2 = p2.connections[p2_c_id] - add_connection = AddConnectionAction() - new_c = copy.copy(c2) - add_connection.connection = new_c - new_c.id = p1_c.fresh_connection_id() - new_c.sourceId = module_id_remap.inverse[c2.sourceId] - new_c.destinationId = module_id_remap.inverse[c2.destinationId] - connection_id_remap[c2.id] = new_c.id - result.append(add_connection) - add_connection.perform(p1_c) - - - # Now delete all connections: - delete_conns = DeleteConnectionAction() - delete_conns.ids = copy.copy(c_to_be_deleted) - if len(delete_conns.ids) > 0: - delete_conns.perform(p1_c) - result.append(delete_conns) - - # And then all the modules - delete_modules = DeleteModuleAction() - delete_modules.ids = copy.copy(m_to_be_deleted) - if len(delete_modules.ids) > 0: - delete_modules.perform(p1_c) - result.append(delete_modules) - - # From now on, module_id_remap is not necessary, we can act - # on p1 ids without worry. (they still exist) - - # Now move everyone - move_action = MoveModuleAction() - for (p1_m_id, p2_m_id) in m_shared.iteritems(): - delta = p2.modules[p2_m_id].location - p1.modules[p1_m_id].location - move_action.addMove(p1_m_id, delta.x, delta.y) - move_action.perform(p1_c) - result.append(move_action) - - # Now change parameters - def make_param_change(fto_name, fto_params, - m_id, f_id, m): - action = ChangeParameterAction() - for (p_id, param) in enumerate(fto_params): - p_name = m.functions[f_id].params[p_id].name - p_alias = m.functions[f_id].params[p_id].alias - (p_type, p_value) = param - action.addParameter(m_id, f_id, p_id, fto_name, - p_name, p_value, p_type, p_alias) - return action - - if len(parameter_changes): - # print parameter_changes - for ((m_from_id, m_to_id), plist) in parameter_changes: - m_from = p1.modules[m_to_id] - for ((ffrom_name, ffrom_params), - (fto_name, fto_params)) in plist: - for (f_id, f) in enumerate(m_from.functions): - if f.name != fto_name: continue - new_action = make_param_change(fto_name, - fto_params, - m_from_id, - f_id, - m_from) - new_action.perform(p1_c) - result.append(new_action) - - return (result, - module_id_remap, - connection_id_remap) - def get_pipeline_diff_with_connections(self, v1, v2): """like get_pipeline_diff but returns connection info Keyword arguments: From e361b3481b2a9d648474389d417d63780f1ae6b3 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 14:57:50 -0400 Subject: [PATCH 029/194] Fixes ModuleRegistry raising MissingPackageVersion If no version exists, get_descriptor_by_name() is supposed to raise MissingPackage, apparently. --- vistrails/core/modules/module_registry.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index 1557f60e5..ec7d7e8ef 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -739,17 +739,15 @@ def get_descriptor_by_name(self, identifier, name, namespace='', package_version = package_version or '' module_version = module_version or '' + try: + package = self.packages[identifier] + except KeyError: + raise MissingPackage(identifier) if package_version: - package_version_key = (identifier, package_version) try: - package = self.package_versions[package_version_key] + package = self.package_versions[(identifier, package_version)] except KeyError: raise MissingPackageVersion(identifier, package_version) - else: - try: - package = self.packages[identifier] - except KeyError: - raise MissingPackage(identifier) if not module_version: try: descriptor = package.descriptors[(name, namespace)] From f38d237d4e21dbfb1ac32580081941c530710c0b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 19 Sep 2014 15:00:22 -0400 Subject: [PATCH 030/194] Renames 'developperDebugger' -> 'developerDebugger' --- vistrails/core/debug.py | 2 +- vistrails/tests/runtestsuite.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 7ca94b4f9..e7f1b4d14 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -71,7 +71,7 @@ def unexpected_exception(e, tb=None, frame=None): try: from vistrails.core.configuration import get_vistrails_configuration debugger = getattr(get_vistrails_configuration(), - 'developperDebugger', + 'developerDebugger', False) except Exception: debugger = False diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py index 40bb1c891..f13b96210 100755 --- a/vistrails/tests/runtestsuite.py +++ b/vistrails/tests/runtestsuite.py @@ -223,7 +223,7 @@ def module_filter(name): 'installBundles': installbundles, 'enablePackagesSilently': True, 'handlerDontAsk': True, - 'developperDebugger': debug_mode, + 'developerDebugger': debug_mode, } if dotVistrails: optionsDict['dotVistrails'] = dotVistrails From 93f1e5d375ee1e870f9bad699a22c9aafb954090 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 22 Sep 2014 23:10:12 +0200 Subject: [PATCH 031/194] Generate command documentation using sphinx-argparse doc/usersguide/batch.rst: Replaced html and latex version of command list with argparse command doc/usersguide/conf.py: Added "sphinxarg.ext" dependency --- doc/usersguide/batch.rst | 127 ++------------------------------------- doc/usersguide/conf.py | 2 +- 2 files changed, 6 insertions(+), 123 deletions(-) diff --git a/doc/usersguide/batch.rst b/doc/usersguide/batch.rst index 53bfc2ee3..47678b032 100644 --- a/doc/usersguide/batch.rst +++ b/doc/usersguide/batch.rst @@ -43,127 +43,10 @@ You can specify version tags in conjunction with multiple filenames. Here is an ``python vistrails/run.py "examples/lung.vt:Axial View" examples/head.vt:bone`` - -.. topic:: Note: - - As of this writing, the |vistrails| development team is refactoring the implementation of many of the command-line switches presented in Table :ref:`table-batch-cli`. As such, depending on your version of |vistrails|, the results you achieve may not match those described. For a list of known issues with the command line switches, please refer to the |vistrails| website. - -.. raw::latex - \begin{table} - \caption{Command line arguments supported by VisTrails.} - \label{table:batch:cli} - \begin{center} - \begin{tabular}{ | l | l | p{3in} | } - \hline - \textbf{Short form} & \textbf{Long form} & \textbf{Description} \\ - \hline - -h & -$\,$-help & Print a help message and exit. \\ - \hline - -S \emph{/path} & -$\,$-startup=\emph{/path} & - Set user configuration directory (default is \texttt{$\sim$/.vistrails}) - %% (Not fully working. see Ticket 213) - \\ - \hline - -? & & Print a help message and exit. \\ - \hline - -v & -$\,$-version & Print version information and exit. \\ - \hline - -V \emph{num} & -$\,$-verbose=\emph{num} & - Set verboseness level (0--2, default=0, higher means - more verbose). \\ - \hline - -b & -$\,$-noninteractive & Run in non-interactive (batch) mode. \\ - \hline - -n & -$\,$-nosplash & Do not display splash screen on startup. \\ - \hline - -q \emph{file} & -$\,$-quickstart=\emph{file} & - Start VisTrails using the specified static registry. \\ - \hline - -c \emph{num} & -$\,$-cache=\emph{num} & - Enable/disable caching (0 to disable, nonzero to enable. Default is enabled). \\ - \hline - -m \emph{num} & -$\,$-movies=\emph{num} & - Set automatic movie creation on spreadsheet (0 or 1, - default=1). Set this to zero to work around VTK bug - with offscreen renderer and OpenGL texture3D mappers. \\ - \hline - -s & -$\,$-multiheads & Display the Builder and Spreadsheet on different - screens (if available). - \\ - \hline - -x & -$\,$-maximized & Maximize Builder and Spreadsheet windows at startup. \\ - \hline - -D & -$\,$-detachHistoryView & Detach the history view from the builder window. \\ - \hline - -l & -$\,$-nologger & Disable logging. \\ - \hline - -d & -$\,$-debugsignals & Debug Qt Signals. \\ - \hline - -a \emph{params} & -$\,$-parameters=\emph{params} & - Set workflow parameters (non-interactive mode only). \\ - \hline - -e \emph{dir} & -$\,$-dumpcells=\emph{dir} & - Set directory to dump spreadsheet cells before exiting (non-interactive mode only). \\ - \hline - -G & -$\,$-workflowgraph & - Save workflow graph in specified directory without running - the workflow (non-interactive mode only). - \hline - -U & -$\,$-evolutiongraph & - Save evolution graph in specified directory without running - any workflowDump images in pdf format (non-interactive mode only). - \hline - -p & -$\,$-pdf & - Dump images in pdf format (non-interactive mode only). - \hline - -g & -$\,$-noSingleInstance & - Run VisTrails without the single instance restriction. \\ - \hline - -t \emph{host} & -$\,$-host=\emph{host} & Set hostname or IP address of database server. \\ - \hline - -r \emph{port} & -$\,$-port=\emph{port} & Set database port. \\ - \hline - -f \emph{dbName} & -$\,$-db=\emph{dbName} & Set database name. \\ - \hline - -u \emph{userName} & -$\,$-user=\emph{userName} & Set database username. \\ - \hline - \end{tabular} - \end{center} - \end{table} - -.. tabularcolumns:: |l|l|p{7.5cm}| - -.. _table-batch-cli: - -.. csv-table:: Command line arguments supported by |vistrails|. - :header: **Short form**, **Long form**, **Description** - :widths: 10, 15, 20 - - -h, :math:`--`\ help, Print a help message and exit. - -S */path*, -\ -startup=\ */path*, Set user configuration directory (default is :math:`\sim`\ ``/.vistrails``) - -?, , Print a help message and exit. - -v, --version, Print version information and exit. - -V *num*, --verbose=\ *num*, "Set verboseness level (0--2, default=0, higher means more verbose)." - -b, --noninteractive, Run in non-interactive (batch) mode. - -n, --nosplash, Do not display splash screen on startup. - -q *file*, --quickstart=\ *file*, Start VisTrails using the specified static registry. - -c *num*, --cache=\ *num*, "Enable/disable caching (0 to disable, nonzero to enable. Default is enabled)." - -m *num*, --movies=\ *num*, "Set automatic movie creation on spreadsheet (0 or 1, default=1). Set this to zero to work around VTK bug with offscreen renderer and OpenGL texture3D mappers." - -s, --multiheads, Display the Builder and Spreadsheet on different screens (if available). - -x, --maximized, Maximize Builder and Spreadsheet windows at startup. - -P, --parameterExploration, execute Parameter Exploration. - -l, --nologger, Disable logging. - -d, --debugsignals, Debug Qt Signals. - -a *params*, --parameters=\ *params*, Set workflow parameters (non-interactive mode only). - -e *dir*, --dumpcells=\ *dir*, Set directory to dump spreadsheet cells before exiting (non-interactive mode only). - -G, --workflowgraph, Save workflow graph in specified directory without running the workflow (non-interactive mode only). - -U, --evolutiongraph, Save evolution graph in specified directory without running any workflow (non-interactive mode only). - -p, --pdf, Dump images in pdf format (non-interactive mode only). - -g, --noSingleInstance, Run VisTrails without the single instance restriction. - -t *host*, --host=\ *host*, Set hostname or IP address of database server. - -r *port*, --port=\ *port*, Set database port. - -f *dbName*, --db=\ *dbName*, Set database name. - -u *userName*, --user=\ *userName*, Set database username. +.. argparse:: + :module: vistrails.core.configuration + :func: build_sphinx_parser + :prog: run.py .. index:: configuration directory @@ -171,7 +54,7 @@ Specifying a User Configuration Directory ========================================= In addition to the default .vistrails directory, VisTrails allows you to create and use additional configuration directories. First, you will need to create a new directory. This is done by running: - ``python vistrails/run.py -S /path_to_new_directory/new_directory_name``. +``python vistrails/run.py -S /path_to_new_directory/new_directory_name``. This will both create a new directory containing default configuration files and directories, and launch VisTrails, which will use the newly created files for configuration. The user is then free to add desired configurations to the new directory. Once a configuration directory exists, subsequent calls using the directory name (``python vistrails/run.py -S /path_to_directory/existing_directory``) will launch VisTrails using the 'existing_directory' for configuration and a new directory will not be created. diff --git a/doc/usersguide/conf.py b/doc/usersguide/conf.py index 795fa9de0..07d26b218 100644 --- a/doc/usersguide/conf.py +++ b/doc/usersguide/conf.py @@ -22,7 +22,7 @@ # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', 'sphinx.ext.extlinks'] +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig', 'sphinx.ext.extlinks', 'sphinxarg.ext'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] From 9a14ab39953b1ac32f1521bcae01ddbcc5d7f635 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 10:59:38 -0400 Subject: [PATCH 032/194] Adds sphinx-argparse to requirements.txt This is now needed to build the documentation. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index fa05d3a3d..19d040a55 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ python-dateutil scipy scp Sphinx +sphinx-argparse SQLAlchemy suds unittest2 From 406650f94346bdae4f178d297722cf90e7b7dfc3 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 23 Sep 2014 19:01:11 +0200 Subject: [PATCH 033/194] Added back logging.handlers core/debug.py: It was removed by 30c7410b but is needed on non-windows. Buildbot only issued a warning. --- vistrails/core/debug.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index e7f1b4d14..f54f59dfd 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -34,6 +34,7 @@ ############################################################################### import inspect import logging +import logging.handlers import os import pdb import re From ff27b470cbf1578fce16c9eb109d3fbaa50e036b Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 23 Sep 2014 19:31:19 +0200 Subject: [PATCH 034/194] Added parameterExploration config option back --- vistrails/core/configuration.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 70fa14780..9449b5e3a 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -64,6 +64,7 @@ executionLog: Track execution provenance when running workflows errorLog: Write errors to a log file parameters: List of parameters to use when running workflow +parameterExploration: Run parameter exploration instead of workflow host: The hostname for the database to load the vistrail from port: The port for the database to load the vistrail from db: The name for the database to load the vistrail from @@ -256,6 +257,11 @@ List of parameters to use when running workflow +parameterExploration: String + + Open and execute parameter exploration specified by the + version argument after the .vt file + pythonPrompt: Boolean *Deprecated* @@ -569,6 +575,8 @@ def __init__(self, name, sub_fields): flag='-p'), # ConfigField("package", [], str, flag='-p', nargs='*'), ConfigField("parameters", None, str, ConfigType.COMMAND_LINE), + ConfigField("parameterExploration", False, bool, + ConfigType.COMMAND_LINE_FLAG), ConfigField('showWindow', True, bool, ConfigType.COMMAND_LINE_FLAG), ConfigField("withVersionTree", False, bool, ConfigType.COMMAND_LINE_FLAG), ConfigField("withWorkflow", False, bool, ConfigType.COMMAND_LINE_FLAG), From 7d791514762b6991ad6577ada9089546277ebc93 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 23 Sep 2014 19:32:39 +0200 Subject: [PATCH 035/194] Fixes formatting of critical message in core.debug --- vistrails/core/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index f54f59dfd..5cf2a6fac 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -281,7 +281,7 @@ def rotate_file_if_necessary(filename): self.logger.addHandler(handler) except Exception, e: - self.critical("Could not set log file %s: %s" % f, e) + self.critical("Could not set log file %s: %s" % (f, e)) def log_to_console(self, enable=True): if enable: From e6452be70fc13b8f96b704ade3fde4eadfca36ca Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 15:07:55 -0400 Subject: [PATCH 036/194] Fixes use of debug.critical() --- vistrails/core/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 5cf2a6fac..dc856e95a 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -281,7 +281,7 @@ def rotate_file_if_necessary(filename): self.logger.addHandler(handler) except Exception, e: - self.critical("Could not set log file %s: %s" % (f, e)) + self.critical("Could not set log file %s:" % f, e) def log_to_console(self, enable=True): if enable: From cf7afc4fc41cf58b4b682308ea61a9f0d83834f6 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 13:23:31 -0400 Subject: [PATCH 037/194] Adds missing +x on scripts --- scripts/delete_from_db.py | 1 + scripts/diff_package.py | 1 + scripts/extract.py | 19 +++++++++++-------- scripts/generate_pkg_doc.py | 2 ++ scripts/merge_vistrails.py | 0 scripts/sql_delete.py | 1 + scripts/sql_to_xml.py | 1 + scripts/update_db.py | 1 + scripts/watch_vistrail_servers.py | 0 9 files changed, 18 insertions(+), 8 deletions(-) mode change 100644 => 100755 scripts/delete_from_db.py mode change 100644 => 100755 scripts/diff_package.py mode change 100644 => 100755 scripts/extract.py mode change 100644 => 100755 scripts/generate_pkg_doc.py mode change 100644 => 100755 scripts/merge_vistrails.py mode change 100644 => 100755 scripts/sql_delete.py mode change 100644 => 100755 scripts/sql_to_xml.py mode change 100644 => 100755 scripts/update_db.py mode change 100644 => 100755 scripts/watch_vistrail_servers.py diff --git a/scripts/delete_from_db.py b/scripts/delete_from_db.py old mode 100644 new mode 100755 index 5212fb302..fa5e19242 --- a/scripts/delete_from_db.py +++ b/scripts/delete_from_db.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. diff --git a/scripts/diff_package.py b/scripts/diff_package.py old mode 100644 new mode 100755 index 3260e0cb0..6cccabf1c --- a/scripts/diff_package.py +++ b/scripts/diff_package.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. diff --git a/scripts/extract.py b/scripts/extract.py old mode 100644 new mode 100755 index 5475bfb7d..29d55007d --- a/scripts/extract.py +++ b/scripts/extract.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. @@ -36,23 +37,25 @@ import imp import sys -def copyDir(src, dst): + +def copy_dir(src, dst): for info in src.entryInfoList(): if info.isDir(): dst.mkdir(info.fileName()) src.cd(info.fileName()) dst.cd(info.fileName()) - copyDir(src, dst) + copy_dir(src, dst) src.cd('..') dst.cd('..') elif info.isFile(): QtCore.QFile.copy(info.filePath(), dst.filePath(info.fileName())) - -if __name__=="__main__": - if len(sys.argv)!=2: + + +if __name__ == "__main__": + if len(sys.argv) != 2: print "Usage: python extract.py resource_rc" sys.exit(0) - moduleName = sys.argv[1] - imp.load_source('resModule', moduleName) - copyDir(QtCore.QDir(":"), QtCore.QDir(".")) + module_name = sys.argv[1] + imp.load_source('resModule', module_name) + copy_dir(QtCore.QDir(":"), QtCore.QDir(".")) diff --git a/scripts/generate_pkg_doc.py b/scripts/generate_pkg_doc.py old mode 100644 new mode 100755 index 78f4372f8..47cf955de --- a/scripts/generate_pkg_doc.py +++ b/scripts/generate_pkg_doc.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + import itertools import sys diff --git a/scripts/merge_vistrails.py b/scripts/merge_vistrails.py old mode 100644 new mode 100755 diff --git a/scripts/sql_delete.py b/scripts/sql_delete.py old mode 100644 new mode 100755 index 15090b07a..40b183ce7 --- a/scripts/sql_delete.py +++ b/scripts/sql_delete.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. diff --git a/scripts/sql_to_xml.py b/scripts/sql_to_xml.py old mode 100644 new mode 100755 index 14ecdf0b0..18a1f9b24 --- a/scripts/sql_to_xml.py +++ b/scripts/sql_to_xml.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. diff --git a/scripts/update_db.py b/scripts/update_db.py old mode 100644 new mode 100755 index cd8daa15c..8229ba87e --- a/scripts/update_db.py +++ b/scripts/update_db.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python ############################################################################### ## ## Copyright (C) 2011-2014, NYU-Poly. diff --git a/scripts/watch_vistrail_servers.py b/scripts/watch_vistrail_servers.py old mode 100644 new mode 100755 From 8dd1a1d231d109b8c6f86ea7df043d35eeeede88 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 23 Sep 2014 22:53:47 +0200 Subject: [PATCH 038/194] Fixes passwd being marked as uninitialized in gui/application.py: The logic should always initialize it but moving it should remove the warning. --- vistrails/gui/application.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index 59245dc0e..9b983f9cd 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -465,9 +465,9 @@ def noninteractiveMode(self): """ usedb = False + passwd = '' if self.temp_configuration.check('host'): usedb = True - passwd = '' if usedb and self.temp_configuration.check('user'): db_config = dict((x, self.temp_configuration.check(x)) for x in ['host', 'port', @@ -503,7 +503,7 @@ def noninteractiveMode(self): port=self.temp_configuration.check('port') or 3306, database=self.temp_configuration.check('db'), user=self.temp_configuration.check('user'), - passwd=passwd, # FIXME : passwd not set here + passwd=passwd, obj_id=f_name, obj_type=None, connection_id=None) From e222ab7c0ebe54275212f970d3f99187a8a2b76f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 17:00:01 -0400 Subject: [PATCH 039/194] Fixes typo: parameterExploration is a flag --- vistrails/core/configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 9449b5e3a..dda858f27 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -257,7 +257,7 @@ List of parameters to use when running workflow -parameterExploration: String +parameterExploration: Boolean Open and execute parameter exploration specified by the version argument after the .vt file From 8cdd44c8a226522168acea61058429ac393931b2 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 23 Sep 2014 23:05:30 +0200 Subject: [PATCH 040/194] Removed command_line import from application_server.py command_line.py does not exist anymore. I missed this because the .pyc still existed and application_server.py is not tested by the test suite. --- vistrails/gui/application_server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 36ee1c7d1..6345921fb 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -67,7 +67,6 @@ from vistrails.core.utils import InstanceObject from vistrails.core.vistrail.vistrail import Vistrail -from vistrails.core import command_line # FIXME : This file doesn't exist. I take it application_server is not used anymore? from vistrails.core import system from vistrails.core.modules.module_registry import get_module_registry as module_registry from vistrails.core import interpreter From db7abd40ba90411c704adea547be9ee957fe7f7e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 17:15:05 -0400 Subject: [PATCH 041/194] Adds unexpected_exception() for core notifications --- vistrails/core/application.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vistrails/core/application.py b/vistrails/core/application.py index b0fd50070..7e316d0a0 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -345,7 +345,8 @@ def send_notification(self, notification_id, *args): try: #print " m: ", m m(*args) - except Exception: + except Exception, e: + debug.unexpected_exception(e) traceback.print_exc() def showBuilderWindow(self): From 7fad01699503e8068fd81e2d877d24031a876560 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 17:28:22 -0400 Subject: [PATCH 042/194] Fixes DBLocator#parse() broken by cccf158c "Details to be added later". I'm unsure whether these "parse" methods are actually used. --- vistrails/db/services/locator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/db/services/locator.py b/vistrails/db/services/locator.py index ae9662925..4f6d7b3a2 100644 --- a/vistrails/db/services/locator.py +++ b/vistrails/db/services/locator.py @@ -938,7 +938,7 @@ def parse(element): name = str(n.firstChild.nodeValue).strip(" \n\t") #print host, port, database, name, vt_id return DBLocator(host, port, database, - user, passwd, name, vt_id, None) + user, passwd, name, obj_id=vt_id) return None else: return None From a65aedca026f91206e7617df2a3c2482b766e784 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 23 Sep 2014 18:28:34 -0400 Subject: [PATCH 043/194] Pass on application_server.py --- vistrails/gui/application_server.py | 74 ++++++++++++----------------- 1 file changed, 30 insertions(+), 44 deletions(-) diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 6345921fb..0c613daf0 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -56,7 +56,6 @@ from SimpleXMLRPCServer import SimpleXMLRPCServer from datetime import date, datetime -from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.application import VistrailsApplicationInterface import vistrails.gui.theme import vistrails.core.application @@ -65,7 +64,6 @@ from vistrails.core.db import io import vistrails.core.db.action -from vistrails.core.utils import InstanceObject from vistrails.core.vistrail.vistrail import Vistrail from vistrails.core import system from vistrails.core.modules.module_registry import get_module_registry as module_registry @@ -359,7 +357,7 @@ def get_server_packages(self, codepath=None, status=None): self.server_logger.error(err_msg) finally: self.proxies_queue.put(proxy) - if s == 0: + if s == 0: # FIXME : s might not be defined here messages.append('An error occurred: %s' % result) else: messages.append(result[1]) @@ -640,23 +638,16 @@ def run_from_db_webgl(self, host, port, db_name, vt_id, path_to_figures, obj_type=None, connection_id=None) (vistrail, abstractions , thumbnails, mashups) = io.load_vistrail(locator) - from core.vistrail.controller import VistrailController as BaseController + from vistrails.core.vistrail.controller import VistrailController as BaseController c = BaseController() c.set_vistrail(vistrail, locator, abstractions, thumbnails, mashups) - # get server packages - local_packages = [x.identifier for x in module_registry().package_list] - version_id = 0 - version_tag = 0 - - from db.domain import IdScope - from core.vistrail.connection import Connection - from core.vistrail.module import Module - from core.vistrail.port import Port + from vistrails.core.vistrail.connection import Connection + from vistrails.core.vistrail.module import Module + from vistrails.core.vistrail.port import Port # get last pipeline - workflow = False - if (vt_tag == ''): + if vt_tag == '': version = vistrail.get_latest_version()#-1; else: version = int(vt_tag) @@ -668,16 +659,14 @@ def run_from_db_webgl(self, host, port, db_name, vt_id, path_to_figures, id_scope = vistrail.idScope if workflow: # if doesnt have VTKWebView and vtkRenderer - if ("vtkRenderer" not in [x.name for x in workflow.module_list]): + if "vtkRenderer" not in [x.name for x in workflow.module_list]: return (str("Doesn't have vtkRenderer"), 1) # if already have VTKWebView, execute it - if ("VTKWebView" not in [x.name for x in workflow.module_list]): + if "VTKWebView" not in [x.name for x in workflow.module_list]: # else, add VTKWebView to vtkRenderer and execute it renderer = workflow.module_list[[x.name for x in workflow.module_list].index('vtkRenderer')] - action_list = [] - mWeb = Module(id=id_scope.getNewId(Module.vtType), name='VTKWebView', package='edu.utah.sci.vistrails.vtWebGL', @@ -726,6 +715,7 @@ def executeMedley(self, xml_medley, extra_info=None): # recovering from it... (the server can find cached images) self.server_logger.error("couldn't instantiate medley") + # FIXME : there's no "recovering", this line will raise NameError self.server_logger.debug("%s medley: %s"%(medley._type, medley._name)) result = "" subdir = hashlib.sha224(xml_string).hexdigest() @@ -751,10 +741,7 @@ def executeMedley(self, xml_medley, extra_info=None): if extra_info is None: extra_info = {} - if extra_info.has_key('pathDumpCells'): - if extra_info['pathDumpCells']: - extra_path = extra_info['pathDumpCells'] - else: + if not extra_info.has_key('pathDumpCells'): extra_info['pathDumpCells'] = path_to_images if not self.path_exists_and_not_empty(extra_info['pathDumpCells']): @@ -775,7 +762,7 @@ def executeMedley(self, xml_medley, extra_info=None): workflow = medley._version sequence = False for (k,v) in medley._alias_list.iteritems(): - if v._component._seq == True: + if v._component._seq: sequence = True val = XMLObject.convert_from_str(v._component._minVal, v._component._spec) @@ -797,7 +784,7 @@ def executeMedley(self, xml_medley, extra_info=None): try: gc.collect() results = \ - vistrails.core.console_mode.run_and_get_results( \ + vistrails.core.console_mode.run_and_get_results( [(locator,int(workflow))], s_alias, update_vistrail=False, @@ -820,7 +807,6 @@ def executeMedley(self, xml_medley, extra_info=None): self.server_logger.info("renaming files") for root, dirs, file_names in os.walk(extra_info['pathDumpCells']): break - s = [] for f in file_names: if f.lower().endswith(".png"): fmask = "%s_"+mask+"%s" @@ -845,7 +831,7 @@ def executeMedley(self, xml_medley, extra_info=None): self.server_logger.info("Not sequence aliases: %s"% s_alias) try: results = \ - vistrails.core.console_mode.run_and_get_results( \ + vistrails.core.console_mode.run_and_get_results( [(locator,int(workflow))], s_alias, extra_info=extra_info) @@ -862,7 +848,7 @@ def executeMedley(self, xml_medley, extra_info=None): ok = False result += str(errors[i]) - self.server_logger.info( "success? %s"% ok) + self.server_logger.info("success? %s" % ok) # FIXME : ok might not be defined elif medley._type == 'visit': cur_dir = os.getcwd() @@ -976,7 +962,7 @@ def run_from_db(self, host, port, db_name, vt_id, path_to_figures, result = '' if vt_tag !='': - version = vt_tag; + version = vt_tag try: locator = DBLocator(host=host, port=int(port), @@ -986,17 +972,15 @@ def run_from_db(self, host, port, db_name, vt_id, path_to_figures, obj_id=int(vt_id), obj_type=None, connection_id=None) - results = [] self.server_logger.info("run_and_get_results(%s,%s,%s,%s,%s)" % \ (locator, version, parameters, True, extra_info)) try: - results = \ - vistrails.core.console_mode.run_and_get_results([(locator, - int(version))], - parameters, - update_vistrail=True, - extra_info=extra_info, - reason="Server Pipeline Execution") + results = vistrails.core.console_mode.run_and_get_results( + [(locator, int(version))], + parameters, + update_vistrail=True, + extra_info=extra_info, + reason="Server Pipeline Execution") except Exception, e: self.server_logger.error("workflow execution failed:") self.server_logger.error(str(e)) @@ -1393,7 +1377,7 @@ def get_vt_graph_png(self, host, port, db_name, vt_id, is_local=True): vt_id = long(vt_id) subdir = 'vistrails' filepath = os.path.join(media_dir, 'graphs', subdir) - base_fname = "graph_%s.png" % (vt_id) + base_fname = "graph_%s.png" % vt_id filename = os.path.join(filepath,base_fname) if ((not os.path.exists(filepath) or (os.path.exists(filepath) and not os.path.exists(filename)) or @@ -1482,7 +1466,7 @@ def get_vt_graph_pdf(self, host, port, db_name, vt_id, is_local=True): vt_id = long(vt_id) subdir = 'vistrails' filepath = os.path.join(media_dir, 'graphs', subdir) - base_fname = "graph_%s.pdf" % (vt_id) + base_fname = "graph_%s.pdf" % vt_id filename = os.path.join(filepath,base_fname) if ((not os.path.exists(filepath) or (os.path.exists(filepath) and not os.path.exists(filename)) or @@ -1835,11 +1819,11 @@ def __init__(self, id, name, vtid=None, version=None, alias_list=None, self._vtid = vtid self._type = t - if has_seq == None: + if has_seq is None: self._has_seq = False if isinstance(self._alias_list, dict): for v in self._alias_list.itervalues(): - if v._component._seq == True: + if v._component._seq: self._has_seq = True else: self._has_seq = has_seq @@ -1938,9 +1922,12 @@ def from_xml(node): id = AliasSimpleGUI.convert_from_str(data, 'long') data = node.get('name', None) name = AliasSimpleGUI.convert_from_str(data, 'str') + component = None for child in node.getchildren(): if child.tag == "component": component = ComponentSimpleGUI.from_xml(child) + if component is None: + raise RuntimeError("Missing component tag") alias = AliasSimpleGUI(id,name,component) return alias @@ -2277,7 +2264,7 @@ def start_other_instances(self, number): virt_disp += 1 args = [script_file,":%s"%virt_disp,host,str(port),'0', '0'] try: - p = subprocess.Popen(args) + subprocess.Popen(args) time.sleep(20) self.others.append("http://%s:%s"%(host,port)) except Exception, e: @@ -2365,8 +2352,7 @@ def start_server(optionsDict=None, args=[]): VistrailsServer = VistrailsServerSingleton() vistrails.gui.theme.initializeCurrentTheme() vistrails.core.application.set_vistrails_application(VistrailsServer) - x = VistrailsServer.init(optionsDict, args) - if x == True: + if VistrailsServer.init(optionsDict, args): return 0 else: return 1 From 2ab3a777623497be3d078c4c466653fe6668a43a Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 24 Sep 2014 14:15:26 -0400 Subject: [PATCH 044/194] Fixes shell.py Removes old dead code that was left here for unknown reasons. --- vistrails/gui/shell.py | 847 +---------------------------------------- 1 file changed, 21 insertions(+), 826 deletions(-) diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index a234b4d68..144957402 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -43,796 +43,16 @@ """ from PyQt4 import QtGui, QtCore -from code import InteractiveInterpreter -import copy import sys -import time -import os.path -import vistrails.api -from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.interpreter.default import get_default_interpreter -import vistrails.core.modules.module_registry -from vistrails.core.modules.utils import create_port_spec_string -import vistrails.core.system -from vistrails.core.system import strftime -from vistrails.core.vistrail.port_spec import PortSpec from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface -from vistrails.core.utils import all ################################################################################ -class QShellDialog(QtGui.QWidget, QVistrailsPaletteInterface): - """This class incorporates the QShell into a dockable widget for use in the - VisTrails environment""" - def __init__(self, parent=None): - QtGui.QWidget.__init__(self, parent=parent) - #locals() returns the original dictionary, not a copy as - #the docs say - self.firstLocals = copy.copy(locals()) - self.shell = QShell(self.firstLocals,None) - layout = QtGui.QVBoxLayout() - layout.setMargin(0) - layout.setSpacing(0) - layout.addWidget(self.shell) - self.setLayout(layout) - # self.setWidget(self.shell) - self.setWindowTitle(self.shell.windowTitle()) - # self.setTitleBarWidget(QtGui.QLabel(self.shell.windowTitle())) - # self.monitorWindowTitle(self.shell) - self.vistrails_interpreter = get_default_interpreter() - - def createMenu(self): - """createMenu() -> None - Creates a menu bar and adds it to the main layout. - - """ - self.newSessionAct = QtGui.QAction("&Restart",self) - self.newSessionAct.setShortcut("Ctrl+R") - self.connect(self.newSessionAct, QtCore.SIGNAL("triggered()"), - self.newSession) - - self.saveSessionAct = QtGui.QAction("&Save", self) - self.saveSessionAct.setShortcut("Ctrl+S") - self.connect(self.saveSessionAct, QtCore.SIGNAL("triggered()"), - self.saveSession) - - self.closeSessionAct = QtGui.QAction("Close", self) - self.closeSessionAct.setShortcut("Ctrl+W") - self.connect(self.closeSessionAct,QtCore.SIGNAL("triggered()"), - self.closeSession) - - self.menuBar = QtGui.QMenuBar(self) - menu = self.menuBar.addMenu("&Session") - menu.addAction(self.newSessionAct) - menu.addAction(self.saveSessionAct) - menu.addAction(self.closeSessionAct) - - self.layout().setMenuBar(self.menuBar) - - def closeEvent(self, e): - """closeEvent(e) -> None - Event handler called when the dialog is about to close.""" - self.closeSession() - self.emit(QtCore.SIGNAL("shellHidden()")) - - def showEvent(self, e): - """showEvent(e) -> None - Event handler called when the dialog acquires focus - - """ - self.shell.show() - - def closeSession(self): - """closeSession() -> None. - Hides the dialog instead of closing it, so the session continues open. - - """ - self.hide() - - def newSession(self): - """newSession() -> None - Tells the shell to start a new session passing a copy of the original - locals dictionary. - - """ - self.shell.restart(copy.copy(self.firstLocals)) - - def saveSession(self): - """saveSession() -> None - Opens a File Save dialog and passes the filename to shell's saveSession. - - """ - default = 'visTrails' + '-' + strftime("%Y%m%d-%H%M.log") - default = os.path.join(vistrails.core.system.vistrails_file_directory(),default) - fileName = QtGui.QFileDialog.getSaveFileName(self, - "Save Session As..", - default, - "Log files (*.log)") - if not fileName: - return - - self.shell.saveSession(str(fileName)) - - def visibility_changed(self, visible): - QVistrailsPaletteInterface.visibility_changed(self, visible) - if visible: - self.shell.show() - else: - self.shell.hide() - -############################################################################## -# QShell - - -class vistrails_port(object): - def __init__(self, vistrails_module, port_spec): - # print 'calling vistrails_port.__init__' - self._vistrails_module = vistrails_module - self._port_spec = port_spec - - def __call__(self, *args, **kwargs): - if len(args) + len(kwargs) > 0: - self._vistrails_module._update_func(self._port_spec, - *args, **kwargs) - return None - return self - -class vistrails_module(object): - def __init__(self, *args, **kwargs): - if not hasattr(self, '_module'): - self._module = \ - vistrails.api.add_module_from_descriptor(self._module_desc) - # FIXME if constant, we can use args - module_desc = self._module_desc - for attr_name, value in kwargs.iteritems(): - self._process_attr_value(attr_name, value) - - def _process_attr_value(self, attr_name, value): - if self._module.has_port_spec(attr_name, 'input'): - port_spec = self._module.get_port_spec(attr_name, 'input') - - args = None - # FIXME want this to be any iterable - if isinstance(value, tuple): - args = value - else: - args = (value,) - self._update_func(port_spec, *args) - else: - raise AttributeError("type object '%s' has no " - "attribute '%s'" % \ - (self.__class__.__name__, - attr_name)) - - def __getattr__(self, attr_name): - def create_port(port_spec): - return vistrails_port(self, port_spec) - try: - return self.__dict__[attr_name] - except KeyError: - if self._module.has_port_spec(attr_name, 'output'): - port_spec = \ - self._module.get_port_spec(attr_name, 'output') - return create_port(port_spec) - elif self._module.has_port_spec(attr_name, 'input'): - port_spec = \ - self._module.get_port_spec(attr_name, 'input') - return create_port(port_spec) - else: - raise AttributeError("type object '%s' has no " - "attribute '%s'" % \ - (self.__class__.__name__, - attr_name)) - - def __setattr__(self, attr_name, value): - if attr_name.startswith('_'): - self.__dict__[attr_name] = value - else: - self._process_attr_value(attr_name, value) - - def _update_func(self, port_spec, *args, **kwargs): - # print 'running _update_func', port_spec.name - # print args - - if port_spec.type != 'input': - if self._module.has_port_spec(port_spec.name, 'input'): - port_spec = \ - self._module.get_port_spec(port_spec.name, 'input') - else: - raise TypeError("cannot update an output port spec") - - # FIXME deal with kwargs - num_ports = 0 - num_params = 0 - for value in args: - # print 'processing', type(value), value - if isinstance(value, vistrails_port): - # make connection to specified output port - # print 'updating port' - num_ports += 1 - elif isinstance(value, vistrails_module): - # make connection to 'self' output port of value - # print 'updating module' - num_ports += 1 - else: - # print 'update literal', type(value), value - num_params += 1 - if num_ports > 1 or (num_ports == 1 and num_params > 0): - reg = vistrails.core.modules.module_registry.get_module_registry() - tuple_desc = reg.get_descriptor_by_name( - vistrails.core.system.get_vistrails_basic_pkg_id(), 'Tuple') - - d = {'_module_desc': tuple_desc, - '_package': self._package,} - tuple = type('module', (vistrails_module,), d)() - - output_port_spec = PortSpec(id=-1, - name='value', - type='output', - sigstring=port_spec.sigstring) - vistrails.api.add_port_spec(tuple._module.id, output_port_spec) - self._update_func(port_spec, *[tuple.value()]) - assert len(port_spec.descriptors()) == len(args) - for i, descriptor in enumerate(port_spec.descriptors()): - arg_name = 'arg%d' % i - sigstring = create_port_spec_string([descriptor.spec_tuple]) - tuple_port_spec = PortSpec(id=-1, - name=arg_name, - type='input', - sigstring=sigstring) - vistrails.api.add_port_spec(tuple._module.id, tuple_port_spec) - tuple._process_attr_value(arg_name, args[i]) - - - # create tuple object - pass - elif num_ports == 1: - other = args[0] - if isinstance(other, vistrails_port): - if other._port_spec.type != 'output': - other_module = other._vistrails_module._module - if other_module.has_port_spec(port_spec.name, - 'output'): - other_port_spec = \ - other_module.get_port_spec(port_spec.name, - 'output') - else: - raise TypeError("cannot update an input " - "port spec") - else: - other_port_spec = other._port_spec - - vistrails.api.add_connection(other._vistrails_module._module.id, - other_port_spec, - self._module.id, - port_spec) - elif isinstance(other, vistrails_module): - other_port_spec = \ - other._module.get_port_spec('self', 'output') - vistrails.api.add_connection(other._module.id, - other_port_spec, - self._module.id, - port_spec) - else: - vistrails.api.change_parameter(self._module.id, - port_spec.name, - [str(x) for x in args]) - -class QShell(QtGui.QTextEdit): - """This class embeds a python interperter in a QTextEdit Widget - It is based on PyCute developed by Gerard Vermeulen. - - """ - def __init__(self, locals=None, parent=None): - """Constructor. - - The optional 'locals' argument specifies the dictionary in which code - will be executed; it defaults to a newly created dictionary with key - "__name__" set to "__console__" and key "__doc__" set to None. - - The optional 'log' argument specifies the file in which the interpreter - session is to be logged. - - The optional 'parent' argument specifies the parent widget. If no parent - widget has been specified, it is possible to exit the interpreter - by Ctrl-D. - - """ - - QtGui.QTextEdit.__init__(self, parent) - self.setReadOnly(False) - self.setWindowTitle("Console") - # to exit the main interpreter by a Ctrl-D if QShell has no parent - if parent is None: - self.eofKey = QtCore.Qt.Key_D - else: - self.eofKey = None - - # flag for knowing when selecting text - self.selectMode = False - self.interpreter = None - self.controller = None - # storing current state - #this is not working on mac - #self.prev_stdout = sys.stdout - #self.prev_stdin = sys.stdin - #self.prev_stderr = sys.stderr - # capture all interactive input/output - #sys.stdout = self - #sys.stderr = self - #sys.stdin = self - - # user interface setup - - self.setAcceptRichText(False) - self.setWordWrapMode(QtGui.QTextOption.WrapAnywhere) - - conf = get_vistrails_configuration() - shell_conf = conf.shell - # font - font = QtGui.QFont(shell_conf.fontFace, shell_conf.fontSize) - font.setFixedPitch(1) - self.setFont(font) - self.reset(locals) - - def load_package(self, pkg_name): - reg = vistrails.core.modules.module_registry.get_module_registry() - package = reg.get_package_by_name(pkg_name) - - def create_dict(modules, ns, m, mdesc): - md = {} - if len(ns) == 0: - d = {'_module_desc': mdesc, - '_package': pkg,} - modules[m] = type('module', (vistrails_module,), d) - else: - if ns[0] in modules: - md = create_dict(modules[ns[0]], ns[1:], m, mdesc) - else: - md = create_dict(md, ns[1:], m, mdesc) - modules[ns[0]] = md - return modules - - def create_namespace_path(root, modules): - for k,v in modules.iteritems(): - if isinstance(v, dict): - d = create_namespace_path(k,v) - modules[k] = d - - if root is not None: - modules['_package'] = pkg - return type(root, (object,), modules)() - else: - return modules - - def get_module_init(module_desc): - def init(self, *args, **kwargs): - self.__dict__['module'] = \ - vistrails.api.add_module_from_descriptor(module_desc) - return init - - def get_module(package): - def getter(self, attr_name): - desc_tuple = (attr_name, '') - if desc_tuple in package.descriptors: - module_desc = package.descriptors[desc_tuple] - d = {'_module_desc': module_desc, - '_package': self,} - return type('module', (vistrails_module,), d) - else: - raise AttributeError("type object '%s' has no attribute " - "'%s'" % (self.__class__.__name__, - attr_name)) - return getter - - d = {'__getattr__': get_module(package),} - pkg = type(package.name, (object,), d)() - - modules = {} - for (m,ns) in package.descriptors: - module_desc = package.descriptors[(m,ns)] - modules = create_dict(modules, ns.split('|'), m, module_desc) - - modules = create_namespace_path(None, modules) - - for (k,v) in modules.iteritems(): - setattr(pkg, k, v) - return pkg - - def selected_modules(self): - shell_modules = [] - modules = vistrails.api.get_selected_modules() - for module in modules: - d = {'_module': module} - shell_modules.append(type('module', (vistrails_module,), d)()) - return shell_modules - - def reset(self, locals): - """reset(locals) -> None - Reset shell preparing it for a new session. - - """ - locals['load_package'] = self.load_package - locals['selected_modules'] = self.selected_modules - if self.interpreter: - del self.interpreter - self.interpreter = InteractiveInterpreter(locals) - - # last line + last incomplete lines - self.line = '' - self.lines = [] - # the cursor position in the last line - self.point = 0 - # flag: the interpreter needs more input to run the last lines. - self.more = 0 - # flag: readline() is being used for e.g. raw_input() and input() - self.reading = 0 - # history - self.history = [] - self.pointer = 0 - self.last = 0 - # interpreter prompt. - if not hasattr(sys, "ps1"): - sys.ps1 = ">>> " - if not hasattr(sys, "ps2"): - sys.ps2 = "... " - - # interpreter banner - - self.write('VisTrails shell running Python %s on %s.\n' % - (sys.version, sys.platform)) - self.write('Type "copyright", "credits" or "license"' - ' for more information on Python.\n') - self.write(sys.ps1) - - - def flush(self): - """flush() -> None. - Simulate stdin, stdout, and stderr. - - """ - pass - - def isatty(self): - """isatty() -> int - Simulate stdin, stdout, and stderr. - - """ - return 1 - - def readline(self): - """readline() -> str - - Simulate stdin, stdout, and stderr. - - """ - self.reading = 1 - self.__clearLine() - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - self.setTextCursor(cursor) - - while self.reading: - qApp.processOneEvent() # FIXME : unset. Is this even used? - if len(self.line) == 0: - return '\n' - else: - return self.line - - def write(self, text): - """write(text: str) -> None - Simulate stdin, stdout, and stderr. - - """ - - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - self.insertPlainText(text) - cursor = self.textCursor() - self.last = cursor.position() - - def insertFromMimeData(self, source): - if source.hasText(): - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - self.__insertText(source.text()) - - def scroll_bar_at_bottom(self): - """Returns true if vertical bar exists and is at bottom, or if - vertical bar does not exist.""" - bar = self.verticalScrollBar() - if not bar: - return True - return bar.value() == bar.maximum() - - def __run(self): - """__run() -> None - Append the last line to the history list, let the interpreter execute - the last line(s), and clean up accounting for the interpreter results: - (1) the interpreter succeeds - (2) the interpreter fails, finds no errors and wants more line(s) - (3) the interpreter fails, finds errors and writes them to sys.stderr - - """ - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - self.setTextCursor(cursor) - # self.set_controller() - should_scroll = self.scroll_bar_at_bottom() - self.pointer = 0 - self.history.append(self.line) - self.lines.append(self.line) - source = '\n'.join(self.lines) - self.write('\n') - self.more = self.interpreter.runsource(source) - if self.more: - self.write(sys.ps2) - else: - self.write(sys.ps1) - self.lines = [] - self.__clearLine() - if should_scroll: - bar = self.verticalScrollBar() - if bar: - bar.setValue(bar.maximum()) - - def __clearLine(self): - """__clearLine() -> None - Clear input line buffer. - - """ - self.line = "" - self.point = 0 - - def __insertText(self, text): - """__insertText(text) -> None - Insert text at the current cursor position. - - """ - self.insertPlainText(text) - self.line = self.line[:self.point] + text + self.line[self.point:] - self.point += len(text) - - # def add_pipeline(self, p): - # """ - # add_pipeline(p) -> None - # Set the active pipeline in the command shell. This replaces the modules - # variable with the list of current active modules of the selected pipeline. - # """ - # if self.controller: - # self.interpreter.active_pipeline = self.controller.current_pipeline - # else: - # self.interpreter.active_pipeline = p - # cmd = 'active_pipeline = self.shell.interpreter.active_pipeline' - # self.interpreter.runcode(cmd) - # cmd = 'modules = self.vistrails_interpreter.find_persistent_entities(active_pipeline)[0]' - # self.interpreter.runcode(cmd) - - def set_controller(self, controller=None): - """set_controller(controller: VistrailController) -> None - Set the current VistrailController on the shell. - """ - self.controller = controller - if controller: - self.interpreter.active_pipeline = self.controller.current_pipeline - cmd = 'active_pipeline = self.shell.interpreter.active_pipeline' - self.interpreter.runcode(cmd) - cmd = 'modules = self.vistrails_interpreter.' \ - 'find_persistent_entities(active_pipeline)[0]' - self.interpreter.runcode(cmd) - - # def set_pipeline(self): - # """set_active_pipeline() -> None - # Makes sure that the pipeline being displayed is present in the shell for - # direct inspection and manipulation - # """ - # self.add_pipeline(None) - - def keyPressEvent(self, e): - """keyPressEvent(e) -> None - Handle user input a key at a time. - - Notice that text might come more than one keypress at a time - if user is a fast enough typist! - - """ - text = e.text() - key = e.key() - - # NB: Sometimes len(str(text)) > 1! - if len(text) and all(ord(x) >= 32 and - ord(x) < 127 - for x in str(text)): - # exit select mode and jump to end of text - cursor = self.textCursor() - if self.selectMode or cursor.hasSelection(): - self.selectMode = False - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - self.__insertText(text) - return - - if e.modifiers() & QtCore.Qt.MetaModifier and key == self.eofKey: - self.parent().closeSession() - - if e.modifiers() & QtCore.Qt.ControlModifier: - if key == QtCore.Qt.Key_C or key == QtCore.Qt.Key_Insert: - self.copy() - elif key == QtCore.Qt.Key_V: - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - self.paste() - elif key == QtCore.Qt.Key_A: - self.selectAll() - self.selectMode = True - else: - e.ignore() - return - - if e.modifiers() & QtCore.Qt.ShiftModifier: - if key == QtCore.Qt.Key_Insert: - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - self.paste() - else: - e.ignore() - return - - # exit select mode and jump to end of text - cursor = self.textCursor() - if self.selectMode or cursor.hasSelection(): - self.selectMode = False - cursor.movePosition(QtGui.QTextCursor.End) - cursor.clearSelection() - self.setTextCursor(cursor) - - if key == QtCore.Qt.Key_Backspace: - if self.point: - QtGui.QTextEdit.keyPressEvent(self, e) - self.point -= 1 - self.line = self.line[:self.point] + self.line[self.point+1:] - elif key == QtCore.Qt.Key_Delete: - QtGui.QTextEdit.keyPressEvent(self, e) - self.line = self.line[:self.point] + self.line[self.point+1:] - elif key == QtCore.Qt.Key_Return or key == QtCore.Qt.Key_Enter: - if self.reading: - self.reading = 0 - else: - self.__run() - elif key == QtCore.Qt.Key_Tab: - self.__insertText(text) - elif key == QtCore.Qt.Key_Left: - if self.point: - QtGui.QTextEdit.keyPressEvent(self, e) - self.point -= 1 - elif key == QtCore.Qt.Key_Right: - if self.point < len(self.line): - QtGui.QTextEdit.keyPressEvent(self, e) - self.point += 1 - elif key == QtCore.Qt.Key_Home: - cursor = self.textCursor() - cursor.movePosition(QtGui.QTextCursor.StartOfLine) - cursor.setPosition(cursor.position() + 4) - self.setTextCursor(cursor) - self.point = 0 - elif key == QtCore.Qt.Key_End: - QtGui.QTextEdit.keyPressEvent(self, e) - self.point = len(self.line) - elif key == QtCore.Qt.Key_Up: - if len(self.history): - if self.pointer == 0: - self.pointer = len(self.history) - self.pointer -= 1 - self.__recall() - elif key == QtCore.Qt.Key_Down: - if len(self.history): - self.pointer += 1 - if self.pointer == len(self.history): - self.pointer = 0 - self.__recall() - else: - e.ignore() - - def __recall(self): - """__recall() -> None - Display the current item from the command history. - - """ - cursor = self.textCursor() - cursor.setPosition(self.last) - - cursor.select(QtGui.QTextCursor.LineUnderCursor) - - cursor.removeSelectedText() - self.setTextCursor(cursor) - self.insertPlainText(sys.ps1) - self.__clearLine() - self.__insertText(self.history[self.pointer]) - - - def focusNextPrevChild(self, next): - """focusNextPrevChild(next) -> None - Suppress tabbing to the next window in multi-line commands. - - """ - if next and self.more: - return 0 - return QtGui.QTextEdit.focusNextPrevChild(self, next) - - def mousePressEvent(self, e): - """mousePressEvent(e) -> None - Keep the cursor after the last prompt. - """ - if e.button() == QtCore.Qt.LeftButton: - self.selectMode = True - QtGui.QTextEdit.mousePressEvent(self, e) -# cursor = self.textCursor() -# cursor.movePosition(QtGui.QTextCursor.End) -# self.setTextCursor(cursor) - return - - def hide(self): - """suspend() -> None - Called when hiding the parent window in order to recover the previous - state. - - """ - #recovering the state - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.stdin = sys.__stdin__ - - def show(self): - """show() -> None - Store previous state and starts capturing all interactive input and - output. - - """ - # capture all interactive input/output - sys.stdout = self - sys.stderr = self - sys.stdin = self - self.setFocus() - - def saveSession(self, fileName): - """saveSession(fileName: str) -> None - Write its contents to a file """ - output = open(str(fileName), 'w') - output.write(self.toPlainText()) - output.close() - - def restart(self, locals=None): - """restart(locals=None) -> None - Restart a new session - - """ - self.clear() - self.reset(locals) - - def contentsContextMenuEvent(self,ev): - """ - contentsContextMenuEvent(ev) -> None - Suppress the right button context menu. - - """ - return - -################################################################################ - -def getIPythonDialog(): +def get_shell_dialog(): from IPython.qt.console.rich_ipython_widget import RichIPythonWidget from IPython.qt.inprocess import QtInProcessKernelManager -# from IPython.kernel.inprocess.ipkernel import InProcessKernel km = QtInProcessKernelManager() km.start_kernel() @@ -842,10 +62,6 @@ def getIPythonDialog(): kernel_client = km.client() kernel_client.start_channels() - def stop(): - kernel_client.stop_channels() - km.shutdown_kernel() - class IPythonDialog(RichIPythonWidget, QVistrailsPaletteInterface): """This class incorporates an IPython shell into a dockable widget for use in the VisTrails environment""" @@ -854,20 +70,8 @@ def __init__(self, parent=None): self.running_workflow = False self.kernel_manager = km self.kernel_client = kernel_client - self.exit_requested.connect(stop) - #locals() returns the original dictionary, not a copy as - #the docs say - # self.firstLocals = copy.copy(locals()) - # self.shell = IPythonXXX(self.firstLocals,None) - # layout = QtGui.QVBoxLayout() - # layout.setMargin(0) - # layout.setSpacing(0) - # layout.addWidget(self.shell) - # self.setLayout(layout) - # self.setWidget(self.shell) + self.exit_requested.connect(self.stop) self.setWindowTitle("Console") - # self.setTitleBarWidget(QtGui.QLabel(self.shell.windowTitle())) - # self.monitorWindowTitle(self.shell) self.vistrails_interpreter = get_default_interpreter() def visibility_changed(self, visible): @@ -876,24 +80,27 @@ def visibility_changed(self, visible): self.show() else: self.hide() + def stop(self): + kernel_client.stop_channels() + km.shutdown_kernel() def hide(self): """suspend() -> None Called when hiding the parent window in order to recover the previous state. - + """ #recovering the state sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ sys.stdin = sys.__stdin__ RichIPythonWidget.hide(self) - + def show(self): """show() -> None - Store previous state and starts capturing all interactive input and + Store previous state and starts capturing all interactive input and output. - + """ # capture all interactive input/output sys.stdout = self @@ -903,37 +110,37 @@ def show(self): def showEvent(self, e): """showEvent(e) -> None - Event handler called when the dialog acquires focus - + Event handler called when the dialog acquires focus + """ self.show() def flush(self): - """flush() -> None. + """flush() -> None. Simulate stdin, stdout, and stderr. - + """ pass - + def isatty(self): """isatty() -> int Simulate stdin, stdout, and stderr. - + """ return 1 - + def readline(self): """readline() -> str - + Simulate stdin, stdout, and stderr. - + """ return "" - + def write(self, text): """write(text: str) -> None Simulate stdin, stdout, and stderr. - + """ self.input_buffer = '' if not self.running_workflow: @@ -945,7 +152,6 @@ def write(self, text): self._control.ensureCursorVisible() self._control.moveCursor(QtGui.QTextCursor.End) - def eventFilter(self, obj, event): """ Reimplemented to ensure a console-like behavior in the underlying text widgets. @@ -957,23 +163,12 @@ def eventFilter(self, obj, event): return IPythonDialog -#install_attempted = False -#installed = vistrails.core.requirements.python_module_exists('IPython.frontend.qt') -#if not installed and not install_attempted: -# print "attempt to install" -# install_attempted = True -# from vistrails.core.bundles import installbundle -# installed = installbundle.install({'linux-ubuntu': 'ipython-qtconsole'}) -#if installed: -# print "installed!" -# QShellDialog = getIPythonDialog() - # This is tested with IPython 1.0.0 and its beta versions # TODO: Once IPython 1.0 is included in the distro we should add auto-install try: from IPython.qt.inprocess import QtInProcessKernelManager try: - QShellDialog = getIPythonDialog() + QShellDialog = get_shell_dialog() except Exception, e: import traceback; traceback.print_exc() except Exception: From f0d5dcf57bddee330771af86029f3059383f8993 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 24 Sep 2014 14:34:35 -0400 Subject: [PATCH 045/194] Adds py_import to shell.py --- vistrails/gui/shell.py | 24 +++++++++++------------- vistrails/gui/vistrails_window.py | 4 ++-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index 144957402..d265ba40e 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -45,14 +45,23 @@ from PyQt4 import QtGui, QtCore import sys +from vistrails.core.bundles import py_import from vistrails.core.interpreter.default import get_default_interpreter from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface ################################################################################ def get_shell_dialog(): - from IPython.qt.console.rich_ipython_widget import RichIPythonWidget - from IPython.qt.inprocess import QtInProcessKernelManager + deps = {'pip': 'ipython>=1.0', + 'linux-ubuntu': 'ipython-qtconsole', + 'linux-debian': 'ipython-qtconsole'} + + IPython = py_import('IPython.qt.console.rich_ipython_widget', deps) + RichIPythonWidget = \ + IPython.qt.console.rich_ipython_widget.RichIPythonWidget + py_import('IPython.qt.inprocess', deps) + QtInProcessKernelManager = \ + IPython.qt.inprocess.QtInProcessKernelManager km = QtInProcessKernelManager() km.start_kernel() @@ -162,14 +171,3 @@ def eventFilter(self, obj, event): return RichIPythonWidget.eventFilter(self, obj, event) return IPythonDialog - -# This is tested with IPython 1.0.0 and its beta versions -# TODO: Once IPython 1.0 is included in the distro we should add auto-install -try: - from IPython.qt.inprocess import QtInProcessKernelManager - try: - QShellDialog = get_shell_dialog() - except Exception, e: - import traceback; traceback.print_exc() -except Exception: - pass diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 50f91472e..80451acf8 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1027,7 +1027,7 @@ def init_palettes(self): from vistrails.gui.module_info import QModuleInfo from vistrails.gui.paramexplore.param_view import QParameterView from vistrails.gui.paramexplore.pe_inspector import QParamExploreInspector - from vistrails.gui.shell import QShellDialog + from vistrails.gui.shell import get_shell_dialog from vistrails.gui.version_prop import QVersionProp from vistrails.gui.vis_diff import QDiffProperties from vistrails.gui.collection.explorer import QExplorerWindow @@ -1090,7 +1090,7 @@ def init_palettes(self): ((QModuleIteration, True), (('controller_changed', 'set_controller'), ('module_changed', 'update_module'))), - ((QShellDialog, True), + ((get_shell_dialog(), True), (('controller_changed', 'set_controller'),)), ((QDebugger, True), (('controller_changed', 'set_controller'),)), From f6e12cb3092fde3b26cd562560271172beafa2fe Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 17:44:02 -0400 Subject: [PATCH 046/194] Fixes capture_stdout() --- vistrails/tests/utils.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/vistrails/tests/utils.py b/vistrails/tests/utils.py index bcfc146e0..c8ab3823f 100644 --- a/vistrails/tests/utils.py +++ b/vistrails/tests/utils.py @@ -234,11 +234,13 @@ def capture_stdout(): old_stdout = sys.stdout sio = StringIO.StringIO() sys.stdout = sio - yield lines - sys.stdout = old_stdout - lines.extend(sio.getvalue().split('\n')) - if lines and not lines[-1]: - del lines[-1] + try: + yield lines + finally: + sys.stdout = old_stdout + lines.extend(sio.getvalue().split('\n')) + if lines and not lines[-1]: + del lines[-1] class MockLogHandler(logging.Handler): From cb21717976d8f9d26de66d09510b9c04d2ae077f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 17:44:15 -0400 Subject: [PATCH 047/194] Adds capture_stderr() --- vistrails/tests/utils.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/vistrails/tests/utils.py b/vistrails/tests/utils.py index c8ab3823f..c593f5d25 100644 --- a/vistrails/tests/utils.py +++ b/vistrails/tests/utils.py @@ -229,20 +229,32 @@ def intercept_results(*args): @contextlib.contextmanager -def capture_stdout(): +def capture_stream(stream): lines = [] - old_stdout = sys.stdout + old = getattr(sys, stream) sio = StringIO.StringIO() - sys.stdout = sio + setattr(sys, stream, sio) try: yield lines finally: - sys.stdout = old_stdout + setattr(sys, stream, old) lines.extend(sio.getvalue().split('\n')) if lines and not lines[-1]: del lines[-1] +@contextlib.contextmanager +def capture_stdout(): + with capture_stream('stdout') as lines: + yield lines + + +@contextlib.contextmanager +def capture_stderr(): + with capture_stream('stderr') as lines: + yield lines + + class MockLogHandler(logging.Handler): """Mock logging handler to check for expected logs. """ From ef5e426e6e71bb2859b58d4a13c08f00e88e21a0 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 17:48:13 -0400 Subject: [PATCH 048/194] Silences core.configuration tests --- vistrails/core/configuration.py | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index dda858f27..8fb441a36 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -42,7 +42,7 @@ import sys import weakref -import os.path +import os from vistrails.core import system from vistrails.core.utils import Ref, append_to_dict_of_lists @@ -1566,7 +1566,6 @@ def get_vistrails_temp_configuration(): get_vistrails_configuration = get_vistrails_temp_configuration -import os import tempfile import unittest @@ -1647,13 +1646,26 @@ def test_copy(self): def test_parser(self): if sys.version_info < (2, 7): self.skipTest("argparse on Python 2.6: bug 10680") + from vistrails.tests.utils import capture_stdout, capture_stderr p = build_command_line_parser(base_config) - with self.assertRaises(SystemExit) as e: - p.parse_args(["-h"]) - self.assertEqual(e.exception.code, 0) - with self.assertRaises(SystemExit) as e: - p.parse_args(["--db-default", "--no-db-default"]) - self.assertEqual(e.exception.code, 2) + err = [] + try: + with capture_stdout() as err: + with self.assertRaises(SystemExit) as e: + p.parse_args(["-h"]) + self.assertEqual(e.exception.code, 0) + self.assertGreater(len(err), 20) + except: + sys.stdout.write('\n'.join(err)) + raise + try: + with capture_stderr() as err: + with self.assertRaises(SystemExit) as e: + p.parse_args(["--db-default", "--no-db-default"]) + self.assertEqual(e.exception.code, 2) + except: + sys.stderr.write('\n'.join(err)) + raise def test_parse_into_config(self): p = build_command_line_parser(base_config) From 272199523acde4fc3160d81bf486030e6b04016b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 15:29:39 -0400 Subject: [PATCH 049/194] Splits ModuleRegistry#auto_add_ports() This takes the decoding logic, decode_input_port() and decode_output_port(), out of auto_add_ports(). --- vistrails/core/modules/module_registry.py | 174 ++++++++++++---------- 1 file changed, 96 insertions(+), 78 deletions(-) diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index 761f89593..930240205 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -53,6 +53,7 @@ from vistrails.core.modules.package import Package from vistrails.core.requirements import MissingRequirement import vistrails.core.modules.utils +from vistrails.core.modules.utils import create_port_spec_item_string from vistrails.core.utils import VistrailsInternalError, memo_method, \ InvalidModuleClass, ModuleAlreadyExists, append_to_dict_of_lists, \ all, profile, versions_increasing, InvalidPipeline, VistrailsDeprecation @@ -970,89 +971,106 @@ def convert_port_val(self, val, sig=None, cls=None): # match retval = desc.module.translate_to_string(val) return retval - + + def decode_port(self, port_info, simple_t, compound_t, deprecated_t, + is_input): + if (not isinstance(port_info, simple_t) and + not isinstance(port_info, compound_t)): + port_name = port_info[0] + port_sig = port_info[1] + if len(port_info) > 2: + if isinstance(port_info[2], dict): + port_info = compound_t(port_info[0], + port_info[1], + **port_info[2]) + + else: + dep_port_info = deprecated_t(*port_info) + port_info = \ + compound_t(**dep_port_info._asdict()) + else: + port_info = compound_t(*port_info) + + # convert simple ports to compound ones + kwargs = port_info._asdict() + port_name = kwargs.pop('name') + port_sig = kwargs.pop('signature') + if is_input and isinstance(port_info, simple_t): + kwargs['labels'] = [kwargs.pop('label')] + kwargs['defaults'] = [kwargs.pop('default')] + kwargs['values'] = [kwargs.pop('values')] + kwargs['entry_types'] = [kwargs.pop('entry_type')] + elif isinstance(port_info, compound_t): + # have compound port + port_items = kwargs.pop('items') + if port_items is not None: + sig_items = [] + labels = [] + defaults = [] + values = [] + entry_types = [] + for item in port_info.items: + if not isinstance(item.signature, + basestring): + d = self.get_descriptor(item.signature) + sig_items.append(create_port_spec_item_string( + d.package, d.name, d.namespace)) + else: + sig_items.append(item.signature) + labels.append(item.label) + defaults.append(item.default) + values.append(item.values) + entry_types.append(item.entry_type) + kwargs['signature'] = ','.join(sig_items) + if is_input: + kwargs['labels'] = labels + kwargs['defaults'] = defaults + kwargs['values'] = values + kwargs['entry_types'] = entry_types + + return port_name, port_sig, kwargs + + def decode_input_port(self, port_info): + return self.decode_port( + port_info, + InputPort, CompoundInputPort, DeprecatedInputPort, + True) + + def decode_output_port(self, port_info): + return self.decode_port( + port_info, + OutputPort, CompoundOutputPort, OutputPort, + False) + def auto_add_ports(self, module): """auto_add_ports(module or (module, kwargs)): add input/output ports to registry. Don't call this directly - it is meant to be used by the packagemanager, when inspecting the package contents.""" - create_psi_string = \ - vistrails.core.modules.utils.create_port_spec_item_string - for (port_key, adder_f, simple_t, compound_t, deprecated_t, is_input) \ - in [('_input_ports', self.add_input_port, InputPort, - CompoundInputPort, DeprecatedInputPort, True), - ('_output_ports', self.add_output_port, OutputPort, - CompoundOutputPort, OutputPort, False)]: - if port_key in module.__dict__: - for port_info in module.__dict__[port_key]: - added = False - port_name = None - port_sig = None - try: - if not isinstance(port_info, simple_t) and \ - not isinstance(port_info, compound_t): - port_name = port_info[0] - port_sig = port_info[1] - if len(port_info) > 2: - if isinstance(port_info[2], dict): - port_info = compound_t(port_info[0], - port_info[1], - **port_info[2]) - - else: - dep_port_info = deprecated_t(*port_info) - port_info = \ - compound_t(**dep_port_info._asdict()) - else: - port_info = compound_t(*port_info) - - # convert simple ports to compound ones - kwargs = port_info._asdict() - port_name = kwargs.pop('name') - port_sig = kwargs.pop('signature') - if is_input and isinstance(port_info, simple_t): - kwargs['labels'] = [kwargs.pop('label')] - kwargs['defaults'] = [kwargs.pop('default')] - kwargs['values'] = [kwargs.pop('values')] - kwargs['entry_types'] = [kwargs.pop('entry_type')] - elif isinstance(port_info, compound_t): - # have compound port - port_items = kwargs.pop('items') - if port_items is not None: - sig_items = [] - labels = [] - defaults = [] - values = [] - entry_types = [] - for item in port_info.items: - if not isinstance(item.signature, - basestring): - d = self.get_descriptor(item.signature) - sig_items.append(create_psi_string( - d.package, d.name, d.namespace)) - else: - sig_items.append(item.signature) - labels.append(item.label) - defaults.append(item.default) - values.append(item.values) - entry_types.append(item.entry_type) - kwargs['signature'] = ','.join(sig_items) - if is_input: - kwargs['labels'] = labels - kwargs['defaults'] = defaults - kwargs['values'] = values - kwargs['entry_types'] = entry_types - - # add the port - adder_f(module, port_name, port_sig, **kwargs) - added = True - except Exception, e: - debug.critical('Failed to add port "%s" to ' - 'module "%s"' % (port_name, - module.__name__), - e) - raise - + if '_input_ports' in module.__dict__: + for port_info in module._input_ports: + try: + name, sig, kwargs = self.decode_input_port(port_info) + self.add_input_port(module, name, sig, **kwargs) + except Exception, e: + debug.unexpected_exception(e) + debug.critical('Failed to add input port "%s" to module ' + '"%s"' % (name, module.__name__), + e) + raise + + if '_output_ports' in module.__dict__: + for port_info in module._output_ports: + try: + name, sig, kwargs = self.decode_output_port(port_info) + self.add_output_port(module, name, sig, **kwargs) + except Exception, e: + debug.unexpected_exception(e) + debug.critical('Failed to add output port "%s" to module ' + '"%s"' % (name, module.__name__), + e) + raise + def auto_add_module(self, module): """auto_add_module(module or (module, kwargs)): add module to registry. Don't call this directly - it is From ecb89f0c1ad1a3fa4a8aa83d6388edfc222aa030 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 16:40:56 -0400 Subject: [PATCH 050/194] Adds Constant#__metaclass__ to add 'value' i/oport --- vistrails/core/modules/basic_modules.py | 60 ++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 2c5a734a8..633a69fad 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -41,7 +41,7 @@ Converter, NotCacheable, ModuleError from vistrails.core.modules.config import ConstantWidgetConfig, \ QueryWidgetConfig, ParamExpWidgetConfig, ModuleSettings, IPort, OPort, \ - CIPort, COPort + CIPort import vistrails.core.system from vistrails.core.utils import InstanceObject from vistrails.core import debug @@ -74,6 +74,38 @@ query_config_path = "vistrails.gui.modules.query_configuration" paramexp_config_path = "vistrails.gui.modules.paramexplore" +def get_port_name(port): + if hasattr(port, 'name'): + return port.name + else: + return port[0] + +class meta_add_value_ports(type): + def __new__(cls, name, bases, dct): + """This metaclass adds the 'value' input and output ports. + """ + mod = type.__new__(cls, name, bases, dct) + + if '_input_ports' in mod.__dict__: + input_ports = mod._input_ports + if not any(get_port_name(port_info) == 'value' + for port_info in input_ports): + mod._input_ports = [('value', mod)] + mod._input_ports.extend(input_ports) + else: + mod._input_ports = [('value', mod)] + + if '_output_ports' in mod.__dict__: + output_ports = mod._output_ports + if not any(get_port_name(port_info) == 'value' + for port_info in output_ports): + mod._output_ports = [('value', mod)] + mod._output_ports.extend(output_ports) + else: + mod._output_ports = [('value', mod)] + + return mod + class Constant(Module): """Base class for all Modules that represent a constant value of some type. @@ -111,6 +143,8 @@ class Constant(Module): _settings = ModuleSettings(abstract=True) _output_ports = [OPort("value_as_string", "String")] + __metaclass__ = meta_add_value_ports + def compute(self): """Constant.compute() only checks validity (and presence) of input value.""" @@ -1787,3 +1821,27 @@ def test_format_27(self): _0=('String', 'hello'), _1=('String', 'dear'), _2=('String', 'world'), _3=('Float', '1.333333333'), ponc=('String', '!')) + + +class TestConstantMetaclass(unittest.TestCase): + def test_meta(self): + """Tests the __metaclass__ for Constant. + """ + mod1_in = [('value', 'basic:String'), IPort('other', 'basic:Float')] + mod1_out = [('someport', 'basic:Integer')] + class Mod1(Constant): + _input_ports = mod1_in + _output_ports = mod1_out + self.assertEqual(Mod1._input_ports, mod1_in) + self.assertEqual(Mod1._output_ports, [('value', Mod1)] + mod1_out) + + mod2_in = [('another', 'basic:String')] + class Mod2(Mod1): + _input_ports = mod2_in + self.assertEqual(Mod2._input_ports, [('value', Mod2)] + mod2_in) + self.assertEqual(Mod2._output_ports, [('value', Mod2)]) + + class Mod3(Mod1): + _output_ports = [] + self.assertEqual(Mod3._input_ports, [('value', Mod3)]) + self.assertEqual(Mod3._output_ports, [('value', Mod3)]) From addff868900b58f050613dd67e02f483c43e5f0e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:40:05 -0400 Subject: [PATCH 051/194] Removes unused imports from analytics package --- vistrails/packages/analytics/init.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vistrails/packages/analytics/init.py b/vistrails/packages/analytics/init.py index 2a4702790..5e34ec5e1 100644 --- a/vistrails/packages/analytics/init.py +++ b/vistrails/packages/analytics/init.py @@ -32,8 +32,7 @@ ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ## ############################################################################### -from vistrails.core.modules.basic_modules import new_constant -from vistrails.core.modules.vistrails_module import Module, ModuleError, ModuleConnector +from vistrails.core.modules.vistrails_module import Module, ModuleError import vistrails.core.vistrail.vistrail import vistrails.core.log.log import vistrails.db.services.io From a6409c7c58dc60016ae05fbdc7c8eeb4ad5c9bb8 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:40:20 -0400 Subject: [PATCH 052/194] Removes unused imports from rpy package --- vistrails/packages/rpy/init.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/vistrails/packages/rpy/init.py b/vistrails/packages/rpy/init.py index 947395f59..52e6afeca 100644 --- a/vistrails/packages/rpy/init.py +++ b/vistrails/packages/rpy/init.py @@ -35,18 +35,13 @@ from ast import literal_eval import os import sys -import tempfile import urllib import rpy2.robjects as robjects -from vistrails.core.modules.basic_modules import PathObject, Constant, \ - new_constant +from vistrails.core.modules.basic_modules import PathObject, new_constant +from vistrails.core.modules.vistrails_module import Module, ModuleError +from .widgets import RSourceConfigurationWidget, RFigureConfigurationWidget -from vistrails.core.modules.vistrails_module import Module, ModuleError, \ - ModuleConnector, NotCacheable -from vistrails.core.modules.basic_modules import new_constant -import vistrails.core.modules.module_registry -from widgets import RSourceConfigurationWidget, RFigureConfigurationWidget # FIXME when rpy2 is installed on the path, we won't need this old_sys_path = sys.path From e060a37e024a353956e6006650e61b98527612d4 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:41:07 -0400 Subject: [PATCH 053/194] Removes new_constant() function from webServices --- .../webServices/enumeration_widget.py | 54 +++++++------------ 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/vistrails/packages/webServices/enumeration_widget.py b/vistrails/packages/webServices/enumeration_widget.py index 4712bd282..3213ac639 100644 --- a/vistrails/packages/webServices/enumeration_widget.py +++ b/vistrails/packages/webServices/enumeration_widget.py @@ -36,14 +36,15 @@ ############################################################################## # Enumeration Widget for Web Services from PyQt4 import QtCore, QtGui -import vistrails.core.modules -from vistrails.gui.modules.constant_configuration import ConstantWidgetMixin, \ - StandardConstantWidget -from vistrails.core.modules.basic_modules import Constant, Module -import vistrails.core.modules.module_registry + +from vistrails.core.modules.basic_modules import Constant +from vistrails.core.modules.module_registry import get_module_registry from vistrails.core.modules.vistrails_module import new_module +from vistrails.gui.modules.constant_configuration import ConstantWidgetMixin + import vistrails.packages.webServices + class EnumerationWidget(QtGui.QComboBox, ConstantWidgetMixin): enumerationlist = [] def __init__(self, param, parent=None): @@ -78,38 +79,23 @@ def contents(self): def change_state(self, state): self.update_parent() - -def initialize(namemodule,namespace,identifier, version): - enumerationConstant = new_constant(namemodule, - namespace, - identifier, - version, - EnumerationWidget) - return enumerationConstant - -def new_constant(name, namespace, identifier, - version, widget_type=StandardConstantWidget): - """new_constant(name: str, namespace: str,widget_type: QWidget type) -> Module - - new_constant dynamically creates a new Module derived from Constant - with a widget type.""" - reg = vistrails.core.modules.module_registry.get_module_registry() - - def __init__(self): - Constant.__init__(self) @staticmethod def get_widget_class(): - return widget_type + return EnumerationWidget @staticmethod - def conversion(self): return self - - m = new_module(Constant, name, {'__init__': __init__, - 'get_widget_class': get_widget_class, - 'translate_to_python': conversion}) - m.name = name - m.isEnumeration = True - reg.add_module(m,namespace=namespace,package=identifier, + def translate_to_python(self): + return self + + +def initialize(namemodule,namespace,identifier, version): + reg = get_module_registry() + + enumerationConstant = new_module(Constant, namemodule, {}) + enumerationConstant.name = namemodule + enumerationConstant.isEnumeration = True + reg.add_module(enumerationConstant, namespace=namespace, package=identifier, package_version=version) - return m + + return enumerationConstant From f7525df9122d55236c7c8e9ee7dde47bc1a30ace Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:55:07 -0400 Subject: [PATCH 054/194] Removes explicit inheritance in new_constant() --- vistrails/core/modules/basic_modules.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 633a69fad..8baeaf84f 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -210,20 +210,14 @@ def new_constant(name, py_conversion=None, default_value=None, validation=None, d["translate_to_python"] = py_conversion elif base_class == Constant: raise ValueError("Must specify translate_to_python for constant") - else: - d["translate_to_python"] = staticmethod(base_class.translate_to_python) if validation is not None: d["validate"] = validation elif base_class == Constant: raise ValueError("Must specify validation for constant") - else: - d["validate"] = staticmethod(base_class.validate) if default_value is not None: d["default_value"] = default_value elif base_class == Constant: d["default_value"] = None - else: - d["default_value"] = base_class.default_value if str_conversion is not None: d['translate_to_string'] = str_conversion From 33292c787ff0be3b85428164c5700b44901712ff Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:55:44 -0400 Subject: [PATCH 055/194] Defines constant classes without new_constant() --- vistrails/core/modules/basic_modules.py | 165 ++++++++++++++---------- 1 file changed, 98 insertions(+), 67 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 8baeaf84f..55f141df1 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -236,21 +236,6 @@ def get_widget_class(): m._output_ports = [('value', m)] return m -def bool_conv(x): - s = str(x).upper() - if s == 'TRUE': - return True - if s == 'FALSE': - return False - raise ValueError('Boolean from String in VisTrails should be either \ -"true" or "false", got "%s" instead' % x) - -def int_conv(x): - if x.startswith('0x'): - return int(x, 16) - else: - return int(x) - @staticmethod def numeric_compare(value_a, value_b, query_method): value_a = float(value_a) @@ -281,37 +266,80 @@ def string_compare(value_a, value_b, query_method): pass return False -Boolean = new_constant('Boolean' , staticmethod(bool_conv), - False, staticmethod(lambda x: isinstance(x, bool))) -Boolean._settings = ModuleSettings(constant_widget=('%s:BooleanWidget' % \ - constant_config_path)) -Float = new_constant('Float' , staticmethod(float), 0.0, - staticmethod(lambda x: isinstance(x, (int, long, float))), - query_compute=numeric_compare) -Float._settings = ModuleSettings(constant_widgets=[ - QueryWidgetConfig('%s:NumericQueryWidget' % query_config_path), - ParamExpWidgetConfig('%s:FloatExploreWidget' % paramexp_config_path)]) -Integer = new_constant('Integer' , staticmethod(int_conv), 0, - staticmethod(lambda x: isinstance(x, (int, long))), - base_class=Float, - query_compute=numeric_compare) -Integer._settings = ModuleSettings(constant_widgets=[ - QueryWidgetConfig('%s:NumericQueryWidget' % query_config_path), - ParamExpWidgetConfig('%s:IntegerExploreWidget' % paramexp_config_path)]) - -String = new_constant('String' , staticmethod(str), "", - staticmethod(lambda x: isinstance(x, str)), - query_compute=string_compare) -String._settings = ModuleSettings(configure_widget= - "vistrails.gui.modules.string_configure:TextConfigurationWidget", - constant_widgets=[ - ConstantWidgetConfig('%s:MultiLineStringWidget' % \ - constant_config_path, - widget_type='multiline'), - QueryWidgetConfig('%s:StringQueryWidget' % \ - query_config_path)]) -String._output_ports.append(OPort("value_as_string", "String", optional=True)) - +class Boolean(Constant): + _settings = ModuleSettings( + constant_widget='%s:BooleanWidget' % constant_config_path) + default_value = False + + @staticmethod + def translate_to_python(x): + s = x.upper() + if s == 'TRUE': + return True + if s == 'FALSE': + return False + raise ValueError('Boolean from String in VisTrails should be either ' + '"true" or "false", got "%s" instead' % x) + + @staticmethod + def validate(x): + return isinstance(x, bool) + +class Float(Constant): + _settings = ModuleSettings(constant_widgets=[ + QueryWidgetConfig('%s:NumericQueryWidget' % query_config_path), + ParamExpWidgetConfig('%s:FloatExploreWidget' % paramexp_config_path)]) + default_value = 0.0 + + @staticmethod + def translate_to_python(x): + return float(x) + + @staticmethod + def validate(x): + return isinstance(x, (int, long, float)) + + query_compute = numeric_compare + +class Integer(Float): + _settings = ModuleSettings(constant_widgets=[ + QueryWidgetConfig('%s:NumericQueryWidget' % query_config_path), + ParamExpWidgetConfig('%s:IntegerExploreWidget' % paramexp_config_path)]) + default_value = 0 + + @staticmethod + def translate_to_python(x): + if x.startswith('0x'): + return int(x, 16) + else: + return int(x) + + @staticmethod + def validate(x): + return isinstance(x, (int, long)) + + query_compute = numeric_compare + +class String(Constant): + _settings = ModuleSettings( + configure_widget="vistrails.gui.modules.string_configure:TextConfigurationWidget", + constant_widgets=[ + ConstantWidgetConfig('%s:MultiLineStringWidget' % constant_config_path, + widget_type='multiline'), + QueryWidgetConfig('%s:StringQueryWidget' % query_config_path)]) + _output_ports = [OPort("value_as_string", "String", optional=True)] + default_value = "" + + @staticmethod + def translate_to_python(x): + return str(x) + + @staticmethod + def validate(x): + return isinstance(x, str) + + query_compute = string_compare + ############################################################################## class PathObject(object): @@ -900,28 +928,31 @@ def compute(self): ############################################################################## # Dictionary -def dict_conv(v): - v_dict = literal_eval(v) - return v_dict +class Dictionary(Constant): + default_value = {} + _input_ports = [CIPort("addPair", "Module, Module"), + IPort("addPairs", "List")] -def dict_compute(self): - d = {} - if self.has_input('value'): - Constant.compute(self) - d.update(self.outputPorts['value']) - if self.has_input('addPair'): - pairs_list = self.get_input_list('addPair') - d.update(pairs_list) - if self.has_input('addPairs'): - d.update(self.get_input('addPairs')) - - self.set_output("value", d) - -Dictionary = new_constant('Dictionary', staticmethod(dict_conv), - {}, staticmethod(lambda x: isinstance(x, dict)), - compute=dict_compute) -Dictionary._input_ports.extend([CIPort("addPair", "Module, Module"), - IPort("addPairs", "List")]) + @staticmethod + def translate_to_python(v): + return literal_eval(v) + + @staticmethod + def validate(x): + return isinstance(x, dict) + + def compute(self): + d = {} + if self.has_input('value'): + Constant.compute(self) + d.update(self.outputPorts['value']) + if self.has_input('addPair'): + pairs_list = self.get_input_list('addPair') + d.update(pairs_list) + if self.has_input('addPairs'): + d.update(self.get_input('addPairs')) + + self.set_output("value", d) ############################################################################## From 402c6d2d34c52b0ee7844c14701a8c9362e20d7b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 14:56:42 -0400 Subject: [PATCH 056/194] Asserts that String#translate_to_python() gets str --- vistrails/core/modules/basic_modules.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 55f141df1..dbff7cbed 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -332,7 +332,8 @@ class String(Constant): @staticmethod def translate_to_python(x): - return str(x) + assert isinstance(x, str) + return x @staticmethod def validate(x): From f6f93327e23bf5cc351518d96000afd8d2cfbe69 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 15:00:16 -0400 Subject: [PATCH 057/194] Moves query_compute methods in classes --- vistrails/core/modules/basic_modules.py | 62 ++++++++++++------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index dbff7cbed..38af6d50a 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -236,36 +236,6 @@ def get_widget_class(): m._output_ports = [('value', m)] return m -@staticmethod -def numeric_compare(value_a, value_b, query_method): - value_a = float(value_a) - value_b = float(value_b) - if query_method == '==' or query_method is None: - return (value_a == value_b) - elif query_method == '<': - return (value_a < value_b) - elif query_method == '>': - return (value_a > value_b) - elif query_method == '<=': - return (value_a <= value_b) - elif query_method == '>=': - return (value_a >= value_b) - -@staticmethod -def string_compare(value_a, value_b, query_method): - if query_method == '*[]*' or query_method is None: - return (value_b in value_a) - elif query_method == '==': - return (value_a == value_b) - elif query_method == '=~': - try: - m = re.match(value_b, value_a) - if m is not None: - return (m.end() ==len(value_a)) - except re.error: - pass - return False - class Boolean(Constant): _settings = ModuleSettings( constant_widget='%s:BooleanWidget' % constant_config_path) @@ -299,7 +269,20 @@ def translate_to_python(x): def validate(x): return isinstance(x, (int, long, float)) - query_compute = numeric_compare + @staticmethod + def query_compute(value_a, value_b, query_method): + value_a = float(value_a) + value_b = float(value_b) + if query_method == '==' or query_method is None: + return (value_a == value_b) + elif query_method == '<': + return (value_a < value_b) + elif query_method == '>': + return (value_a > value_b) + elif query_method == '<=': + return (value_a <= value_b) + elif query_method == '>=': + return (value_a >= value_b) class Integer(Float): _settings = ModuleSettings(constant_widgets=[ @@ -318,7 +301,7 @@ def translate_to_python(x): def validate(x): return isinstance(x, (int, long)) - query_compute = numeric_compare + #query_compute = Float.query_compute # FIXME : needed? class String(Constant): _settings = ModuleSettings( @@ -339,7 +322,20 @@ def translate_to_python(x): def validate(x): return isinstance(x, str) - query_compute = string_compare + @staticmethod + def query_compute(value_a, value_b, query_method): + if query_method == '*[]*' or query_method is None: + return (value_b in value_a) + elif query_method == '==': + return (value_a == value_b) + elif query_method == '=~': + try: + m = re.match(value_b, value_a) + if m is not None: + return (m.end() ==len(value_a)) + except re.error: + pass + return False ############################################################################## From 23250710c29cf1c4c04990f758c7de722c8186cc Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 25 Sep 2014 18:18:46 -0400 Subject: [PATCH 058/194] TransferFunctionConstant without new_constant() --- vistrails/packages/vtk/tf_widget.py | 37 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index f1993dda3..19d00cd8e 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -36,11 +36,12 @@ ############################################################################## # Transfer Function Widget for VTK from PyQt4 import QtCore, QtGui -from vistrails.gui.modules.constant_configuration import ConstantWidgetMixin -from vistrails.core.modules.basic_modules import new_constant, init_constant, Module +from vistrails.core.modules.vistrails_module import Module +from vistrails.core.modules.basic_modules import Constant from vistrails.core.modules.module_registry import get_module_registry from vistrails.core.system import get_elementtree_library from vistrails.core.utils.color import ColorByName +from vistrails.gui.modules.constant_configuration import ConstantWidgetMixin import vtk import math import pickle @@ -694,21 +695,31 @@ def compute(self): self.set_output('vtkPicewiseFunction', of_module) self.set_output('vtkColorTransferFunction', cf_module) -string_conversion = staticmethod(lambda x: x.serialize()) -conversion = staticmethod(lambda x: TransferFunction.parse(x)) -validation = staticmethod(lambda x: isinstance(x, TransferFunction)) -TransferFunctionConstant = new_constant('TransferFunction', - conversion, - default_tf, - validation, - TransferFunctionWidget) -TransferFunctionConstant.translate_to_string = string_conversion +class TransferFunctionConstant(Constant): + default_value = default_tf + + @staticmethod + def translate_to_python(x): + return TransferFunction.parse(x) + + @staticmethod + def translate_to_string(x): + return x.serialize() + + @staticmethod + def validate(x): + return isinstance(x, TransferFunction) + + @staticmethod + def get_widget_class(): + return TransferFunctionWidget ############################################################################## def initialize(): - init_constant(TransferFunctionConstant) - + reg = get_module_registry() + reg.add_module(TransferFunctionConstant, name='TransferFunction') + ############################################################################## class TestTransferFunction(unittest.TestCase): def test_serialization(self): From 5ee3e5637f10b6a7abf5c27169c7bf42b2138e2f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 26 Sep 2014 13:46:49 -0400 Subject: [PATCH 059/194] Removes mentions of __std*__ --- vistrails/gui/shell.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index d7f0a0bfb..b22f71937 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -349,6 +349,8 @@ def __init__(self, locals=None, parent=None): else: self.eofKey = None + self.old_streams = None + # flag for knowing when selecting text self.selectMode = False self.interpreter = None @@ -792,9 +794,9 @@ def hide(self): """ #recovering the state - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.stdin = sys.__stdin__ + if self.old_streams is not None: + sys.stdout, sys.stderr, sys.stdin = self.old_streams + self.old_streams = None def show(self): """show() -> None @@ -803,9 +805,11 @@ def show(self): """ # capture all interactive input/output - sys.stdout = self - sys.stderr = self - sys.stdin = self + if self.old_streams is None: + self.old_streams = sys.stdout, sys.stderr, sys.stdin + sys.stdout = self + sys.stderr = self + sys.stdin = self self.setFocus() def saveSession(self, fileName): @@ -855,6 +859,7 @@ class IPythonDialog(RichIPythonWidget, QVistrailsPaletteInterface): VisTrails environment""" def __init__(self, parent=None): RichIPythonWidget.__init__(self, parent) + self.old_streams = None self.running_workflow = False self.kernel_manager = km self.kernel_client = kernel_client @@ -888,9 +893,9 @@ def hide(self): """ #recovering the state - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - sys.stdin = sys.__stdin__ + if self.old_streams is not None: + sys.stdout, sys.stderr, sys.stdin = self.old_streams + self.old_streams = None RichIPythonWidget.hide(self) def show(self): @@ -900,9 +905,11 @@ def show(self): """ # capture all interactive input/output - sys.stdout = self - sys.stderr = self - sys.stdin = self + if self.old_streams is None: + self.old_streams = sys.stdout, sys.stderr, sys.stdin + sys.stdout = self + sys.stderr = self + sys.stdin = self RichIPythonWidget.show(self) def showEvent(self, e): From 48d7c3607145a2978af22999c33e8f12b1b03f3b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 26 Sep 2014 13:48:05 -0400 Subject: [PATCH 060/194] Makes stdout/stderr unbuffered for the test suite --- vistrails/tests/runtestsuite.py | 105 +++++++++++++++++++------------- 1 file changed, 62 insertions(+), 43 deletions(-) diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py index f13b96210..01f5ad67a 100755 --- a/vistrails/tests/runtestsuite.py +++ b/vistrails/tests/runtestsuite.py @@ -51,8 +51,6 @@ import os import sys import traceback -import os.path -import optparse from optparse import OptionParser import platform import re @@ -90,6 +88,62 @@ def clean(self): "tempdir, cleaning up\n" % (nb_dirs, nb_files)) self.rmtree(self.test_temp_dir, ignore_errors=True) +# Parse the command-line +usage = "Usage: %prog [options] [module1 module2 ...]" +parser = OptionParser(usage=usage) +parser.add_option("-V", "--verbose", action="store", type="int", + default=0, dest="verbose", + help="set verboseness level(0--2, default=0, " + "higher means more verbose)") +parser.add_option("-e", "--examples", action="store_true", + default=False, + help="run vistrails examples") +parser.add_option("-i", "--images", action="store_true", + default=False, + help="perform image comparisons") +parser.add_option("--installbundles", action='store_true', + default=False, + help=("Attempt to install missing Python packages " + "automatically")) +parser.add_option("-S", "--startup", action="store", type="str", default=None, + dest="dotVistrails", + help="Set startup file (default is temporary directory)") +parser.add_option('-L', '--locale', action='store', type='str', default='', + dest='locale', + help="set locale to this string") +parser.add_option('-D', '--debug', action='store_true', + default=False, + help="start interactive debugger on unexpected error") +parser.add_option('--no-unbuffered', action='store_false', dest='unbuffered', + default=True, + help="Don't make output stream unbuffered") + +(options, test_modules) = parser.parse_args() +# remove empty strings +test_modules = filter(len, test_modules) +verbose = options.verbose +locale.setlocale(locale.LC_ALL, options.locale or '') +test_examples = options.examples +test_images = options.images +installbundles = options.installbundles +dotVistrails = options.dotVistrails +debug_mode = options.debug + +# Makes stdout unbuffered, so python -u is not needed +class Unbuffered(object): + def __init__(self, stream): + self.stream = stream + def write(self, data): + self.stream.write(data) + self.stream.flush() + def __getattr__(self, attr): + return getattr(self.stream, attr) + +if options.unbuffered: + sys.stdout = Unbuffered(sys.stdout) + sys.stderr = Unbuffered(sys.stderr) + +# Use PyQt API v2 def setNewPyQtAPI(): try: import sip @@ -159,47 +213,12 @@ def sub_print(s, overline=False): ############################################################################### -usage = "Usage: %prog [options] [module1 module2 ...]" -parser = OptionParser(usage=usage) -parser.add_option("-V", "--verbose", action="store", type="int", - default=0, dest="verbose", - help="set verboseness level(0--2, default=0, " - "higher means more verbose)") -parser.add_option("-e", "--examples", action="store_true", - default=False, - help="run vistrails examples") -parser.add_option("-i", "--images", action="store_true", - default=False, - help="perform image comparisons") -parser.add_option("--installbundles", action='store_true', - default=False, - help=("Attempt to install missing Python packages " - "automatically")) -parser.add_option("-S", "--startup", action="store", type="str", default=None, - dest="dotVistrails", - help="Set startup file (default is temporary directory)") -parser.add_option('-L', '--locale', action='store', type='str', default='', - dest='locale', - help="set locale to this string") -parser.add_option('-D', '--debug', action='store_true', - default=False, - help="start interactive debugger on unexpected error") - -(options, args) = parser.parse_args() -# remove empty strings -args = filter(len, args) -verbose = options.verbose -locale.setlocale(locale.LC_ALL, options.locale or '') -test_examples = options.examples -test_images = options.images -installbundles = options.installbundles -dotVistrails = options.dotVistrails -debug_mode = options.debug -test_modules = None -if len(args) > 0: - test_modules = args -elif os.path.exists(EXAMPLES_PATH): - test_images = True +if len(test_modules) > 0: + test_modules = test_modules +else: + test_modules = None + if os.path.exists(EXAMPLES_PATH): + test_images = True def module_filter(name): if test_modules is None: From 3f0281632be6f147fc90cb01dc6a8393debee64c Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 10:30:28 -0400 Subject: [PATCH 061/194] Fix abstraction vistrail reference Moved out of try block because we shouldn't run into MissingPackage when reading a vistrail. --- vistrails/core/modules/abstraction.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vistrails/core/modules/abstraction.py b/vistrails/core/modules/abstraction.py index 53e61dd11..a1a157b40 100644 --- a/vistrails/core/modules/abstraction.py +++ b/vistrails/core/modules/abstraction.py @@ -145,8 +145,9 @@ def package_dependencies(): for abstraction in os.listdir(abstraction_dir): if p.match(abstraction): abs_fname = os.path.join(abstraction_dir, abstraction) + # moved out of try because shouldn't run into MissingPackage here + vistrail = read_vistrail(abs_fname) try: - vistrail = read_vistrail(abs_fname) dependencies = get_abstraction_dependencies(vistrail) except vistrails.core.modules.module_registry.MissingPackage, e: dependencies = {e._identifier: set()} @@ -164,7 +165,7 @@ def package_dependencies(): all_packages.update(p for p in dependencies.iterkeys() if p != identifier) my_vistrails[abstraction[:-4]] = \ - (vistrail, abs_fname, inter_depends) # FIXME vistrail might not be set + (vistrail, abs_fname, inter_depends) else: debug.critical(("Subworkflow '%s' is missing packages it " + "depends on") % abstraction) From c46ef1fb90ddc672a0576de6db757422398c518c Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 10:33:26 -0400 Subject: [PATCH 062/194] Fix change_connection by conn -> old_conn Not sure this code path is ever hit currently since we have factored everything to add/delete, but keeping in just in case --- vistrails/core/vistrail/pipeline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index 0e6f12ab7..fbd34119c 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -446,7 +446,7 @@ def change_connection(self, old_id, c, *args): old_conn.id) if self.graph.out_degree(old_conn.sourceId) < 1: self.modules[old_conn.sourceId].connected_output_ports.discard( - conn.source.name) # FIXME : conn is c? old_conn? + old_conn.source.name) if self.graph.in_degree(old_conn.destinationId) < 1: connected_input_ports = \ self.modules[old_conn.destinationId].connected_input_ports From 9fc2cb03a1342f29f6f8f870c083819015a56ac2 Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 10:35:49 -0400 Subject: [PATCH 063/194] Get missing options in outupt_config code OutputModeConfigurationWidget.set_combo_value needs to get options from the field before using them. --- vistrails/gui/modules/output_configuration.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index 14113d704..d774fd8ca 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -384,7 +384,11 @@ def call_field_changed(val): return combo def set_combo_value(self, combo, config_val): - if "allowed_values" in options: # FIXME : options unset here + options = {} + if field.widget_options is not None: + options = field.widget_options + + if "allowed_values" in options: if "remap" in options: remap = options["remap"] cur_text = remap[config_val] From 5b3752c84f7d67dd60f75ed249512ffe9df0bfbc Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 10:44:50 -0400 Subject: [PATCH 064/194] Fix missing output type for brokenbarh plot We need output_type to be specified to be able to set properties. Probably should encode this as logic in the generator code in the future. Also, regenerate the plot python code and the diff --- vistrails/packages/matplotlib/mpl_plots.xml | 2 +- vistrails/packages/matplotlib/mpl_plots_diff.xml | 3 +++ vistrails/packages/matplotlib/plots.py | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/vistrails/packages/matplotlib/mpl_plots.xml b/vistrails/packages/matplotlib/mpl_plots.xml index 884b3624f..60af6c474 100644 --- a/vistrails/packages/matplotlib/mpl_plots.xml +++ b/vistrails/packages/matplotlib/mpl_plots.xml @@ -415,7 +415,7 @@ Additional kwargs: hold = [True|False] overrides default hold state - + Plot horizontal bars. Call signature: diff --git a/vistrails/packages/matplotlib/mpl_plots_diff.xml b/vistrails/packages/matplotlib/mpl_plots_diff.xml index 55a8dd333..19a14895d 100644 --- a/vistrails/packages/matplotlib/mpl_plots_diff.xml +++ b/vistrails/packages/matplotlib/mpl_plots_diff.xml @@ -534,6 +534,9 @@ Additional kwargs: hold = [True|False] overrides default hold state + + object + (ymin, ywidth) diff --git a/vistrails/packages/matplotlib/plots.py b/vistrails/packages/matplotlib/plots.py index d7a243948..8a715bc8e 100644 --- a/vistrails/packages/matplotlib/plots.py +++ b/vistrails/packages/matplotlib/plots.py @@ -885,10 +885,10 @@ def compute(self): args, kwargs)) def plot_figure(self, figure, args, kwargs): - matplotlib.pyplot.broken_barh(*args, **kwargs) + brokenBarHCollection = matplotlib.pyplot.broken_barh(*args, **kwargs) if self.has_input('brokenBarHCollectionProperties'): properties = self.get_input('brokenBarHCollectionProperties') - if brokenBarHCollection is not None: # FIXME : this is not set + if brokenBarHCollection is not None: properties.update_props(brokenBarHCollection) class MplBoxplot(MplPlot): From 554267290d0afd0678b3c12508d74b23647e509b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 26 Sep 2014 17:52:33 -0400 Subject: [PATCH 065/194] Sorts configuration documentations --- vistrails/core/configuration.py | 326 ++++++++++++++++---------------- 1 file changed, 163 insertions(+), 163 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 8fb441a36..926479e99 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -58,71 +58,67 @@ _simple_documentation = """ autoConnect: Automatically connect dragged in modules autoSave: Automatically save backup vistrails every two minutes -dbDefault: Save vistrails in a database by default cache: Cache previous results so they may be used in future computations -stopOnError: Stop all workflow execution immediately after first error -executionLog: Track execution provenance when running workflows -errorLog: Write errors to a log file -parameters: List of parameters to use when running workflow -parameterExploration: Run parameter exploration instead of workflow -host: The hostname for the database to load the vistrail from -port: The port for the database to load the vistrail from +dataDir: Default data directory db: The name for the database to load the vistrail from -user: The username for the database to the load vistrail from +dbDefault: Save vistrails in a database by default defaultFileType: Default file type/extension for vistrails (.vt or .xml) +dotVistrails: User configuration directory enablePackagesSilently: Automatically enable packages when needed +errorLog: Write errors to a log file +executionLog: Track execution provenance when running workflows +fileDir: Default vistrail directory +handlerDontAsk: Do not ask about extension handling at startup +host: The hostname for the database to load the vistrail from installBundles: Install missing Python dependencies installBundlesWithPip: Use pip to install missing Python dependencies -upgrades: Attempt to automatically upgrade old workflows -showConnectionErrors: Show error when input value doesn't match type during execution -showVariantErrors: Show error when variant input value doesn't match type during execution -showDebugPopups: Always bring debug messages to the front -showScrollbars: Show scrollbars on the version tree and workflow canvases -shell.fontFace: Console Font -shell.fontSize: Console Font Size +jobAutorun: Run jobs automatically when they finish +jobCheckInterval: How often to check for jobs (in seconds) +jobList: List running jobs +jobRun: Continue running specified job by id +logDir: Log files directory maxRecentVistrails: Number of recent vistrails maximizeWindows: VisTrails windows should be maximized +migrateTags: Move tags to upgraded versions multiHeads: Use multiple screens for VisTrails windows +multithread: Server will start a thread for each request +packageDir: System packages directory +parameterExploration: Run parameter exploration instead of workflow +parameters: List of parameters to use when running workflow +port: The port for the database to load the vistrail from +repositoryHTTPURL: Remote package repository URL +repositoryLocalPath: Local package repository directory +rpcConfig: Config file for server connection options +rpcInstances: Number of other instances that vistrails should start +rpcLogFile: Log file for XML RPC server +rpcPort: Port where this xml rpc server will work +rpcServer: Hostname or ip address where this xml rpc server will work +shell.fontFace: Console Font +shell.fontSize: Console Font Size +showConnectionErrors: Show error when input value doesn't match type during execution +showDebugPopups: Always bring debug messages to the front +showScrollbars: Show scrollbars on the version tree and workflow canvases showSplash: Show VisTrails splash screen during startup -migrateTags: Move tags to upgraded versions -upgradeModuleFailPrompt: Alert when a subworkflow upgrade fails -thumbs.autoSave: Save thumbnails of visual results -thumbs.mouseHover: Show thumbnails when mouse is hovering above a version -thumbs.tagsOnly: Store thumbnails only for tagged versions -thumbs.cacheDir: Thumbnail cache directory -thumbs.cacheSize: Thumbnail cache size (MB) +showVariantErrors: Show error when variant input value doesn't match type during execution singleInstance: Do not allow more than one instance of VisTrails to run at once staticRegistry: XML registry file -dotVistrails: User configuration directory +stopOnError: Stop all workflow execution immediately after first error subworkflowsDir: Local subworkflows directory -dataDir: Default data directory -packageDir: System packages directory -userPackageDir: Local packages directory -logDir: Log files directory -fileDir: Default vistrail directory temporaryDir: Temporary files directory +thumbs.autoSave: Save thumbnails of visual results +thumbs.cacheDir: Thumbnail cache directory +thumbs.cacheSize: Thumbnail cache size (MB) +thumbs.mouseHover: Show thumbnails when mouse is hovering above a version +thumbs.tagsOnly: Store thumbnails only for tagged versions +upgradeModuleFailPrompt: Alert when a subworkflow upgrade fails +upgrades: Attempt to automatically upgrade old workflows +user: The username for the database to the load vistrail from +userPackageDir: Local packages directory webRepositoryURL: Web repository URL webRepositoryUser: Web repository username -repositoryLocalPath: Local package repository directory -repositoryHTTPURL: Remote package repository URL -handlerDontAsk: Do not ask about extension handling at startup -rpcServer: Hostname or ip address where this xml rpc server will work -rpcPort: Port where this xml rpc server will work -rpcLogFile: Log file for XML RPC server -rpcInstances: Number of other instances that vistrails should start -multithread: Server will start a thread for each request -rpcConfig: Config file for server connection options -jobCheckInterval: How often to check for jobs (in seconds) -jobAutorun: Run jobs automatically when they finish -jobRun: Continue running specified job by id -jobList: List running jobs """ _documentation = """ -subworkflowsDir: Path - - The location where a user's local subworkflows are stored. - autoConnect: Boolean Try to automatically connect a newly dragged in module to the rest @@ -132,14 +128,32 @@ Automatically save vistrails to allow recovery from crashes, etc. +batch: Boolean + + Run vistrails in batch mode instead of interactive mode + +cache: Boolean + + Cache previous results so they may be used in future computations + dataDir: Path The location that VisTrails uses as a default directory for data. +db: String + + The name for the database to load the vistrail from + dbDefault: Boolean Use a database as the default storage location for vistrails entities. +debugLevel: Integer + + How much information VisTrails should alert the user about (0: + Critical errors only, 1: Critical errors and warnings, 2: Critical + errors, warnings, and log messages). + defaultFileType: String Defaults to .vt but could be .xml. @@ -153,41 +167,19 @@ The location to look for VisTrails user configurations and storage. Defaults to ~/.vistrails. -host: URL - - The hostname for the database to load the vistrail from - -port: Integer - - The port for the database to load the vistrail from - -db: String - - The name for the database to load the vistrail from - -user: String - - The username for the database to load the vistrail from - enablePackagesSilently: Boolean Do not prompt the user to enable packages, just do so automatically -showConnectionErrors: Boolean - - Alert the user if the value along a connection doesn't match - connection types. - -showVariantErrors: Boolean - - Alert the user if the value along a connection coming from a - Variant output matches the input port. - execute: Boolean Execute any specified workflows +executionLog: Boolean + + Track execution provenance when running workflows + fileDir: Path The location that VisTrails uses as a default directory for @@ -197,6 +189,10 @@ Draw spreadsheet cells at a fixed size (for testing). +host: URL + + The hostname for the database to load the vistrail from + installBundles: Boolean Automatically try to install missing Python dependencies @@ -206,9 +202,25 @@ Whether to try to use pip to install Python dependencies or use distribution support. -batch: Boolean +isInServerMode: Boolean - Run vistrails in batch mode instead of interactive mode + Indicates whether VisTrails is being run as a server. + +jobAutorun: Boolean + + Run jobs automatically when they finish + +jobCheckInterval: Integer: + + How often to check for jobs (in seconds, default=600) + +jobList: Boolean + + List running jobs + +jobRun: String + + Continue running specified job by id (use jobList to get) logDir: Path @@ -218,14 +230,14 @@ *Deprecated* -maxMemory: Integer - - *Deprecated* - maximizeWindows: Boolean Whether the VisTrails windows should take up the entire screen space +maxMemory: Integer + + *Deprecated* + maxRecentVistrails: Integer How many recently opened vistrails should be stored for "Open @@ -244,23 +256,41 @@ Whether or not to use multiple screens for VisTrails windows. -executionLog: Boolean +multithread: Boolean - Track execution provenance when running workflows + Server will start a thread for each request + +OLDupgradeDelay: Boolean + If True, will only persist the upgrade when a user makes a + modification to or executes the workflow. Otherwise, the upgrade + will be automatically added to the version tree when a user views + an upgraded workflow. + +outputDefaultSettings: ConfigurationObject + + One or more comma-separated key=value parameters + +outputSettings: ConfigurationObject + + One or more comma-separated key=value parameters packageDir: Path The directory to look for VisTrails core packages (use userPackageDir for user-defined packages) +parameterExploration: Boolean + + Open and execute parameter exploration specified by the + version argument after the .vt file + parameters: String List of parameters to use when running workflow -parameterExploration: Boolean +port: Integer - Open and execute parameter exploration specified by the - version argument after the .vt file + The port for the database to load the vistrail from pythonPrompt: Boolean @@ -270,14 +300,14 @@ Storage for recent vistrails. Users should not edit. -repositoryLocalPath: Path - - Path used to locate packages available to be installed - repositoryHTTPURL: URL URL used to locate packages available to be installed +repositoryLocalPath: Path + + Path used to locate packages available to be installed + reviewMode: Boolean *Deprecated* Used to interactively export a pipeline @@ -286,6 +316,26 @@ Directory that contains the VisTrails source code. +rpcConfig: String + + Config file for server connection options + +rpcInstances: Integer + + Number of other instances that vistrails should start + +rpcLogFile: String + + Log file for XML RPC server + +rpcPort: Integer + + Port where this xml rpc server will work + +rpcServer: URL + + Hostname or ip address where this xml rpc server will work + runningJobsList: String Storage for recent vistrails. Users should not edit @@ -302,6 +352,11 @@ The font size used for the VisTrails console +showConnectionErrors: Boolean + + Alert the user if the value along a connection doesn't match + connection types. + showDebugPopups: Boolean Always show the debug popups or only if there is a modal widget. @@ -323,6 +378,11 @@ Whether the VisTrails main window should be hidden +showVariantErrors: Boolean + + Alert the user if the value along a connection coming from a + Variant output matches the input port. + singleInstance: Boolean Whether or not VisTrails should only allow one instance to be @@ -348,6 +408,10 @@ Whether or not VisTrails stops executing the rest of the workflow if it encounters an error in one module. +subworkflowsDir: Path + + The location where a user's local subworkflows are stored. + temporaryDir: Path The directory to use for temporary files generated by VisTrails @@ -378,56 +442,40 @@ If True, only stores thumbnails for tagged versions. Otherwise, stores thumbnails for all versions. -upgrades: Boolean - - Whether to upgrade old workflows so they work with newer packages - upgradeDelay: Boolean Persist upgrade only after other changes -OLDupgradeDelay: Boolean - If True, will only persist the upgrade when a user makes a - modification to or executes the workflow. Otherwise, the upgrade - will be automatically added to the version tree when a user views - an upgraded workflow. +upgrades: Boolean + + Whether to upgrade old workflows so they work with newer packages upgradeModuleFailPrompt: Boolean Whether to alert the user when an upgrade may fail when upgrading a subworkflow. -cache: Boolean - - Cache previous results so they may be used in future computations - -userPackageDir: Boolean +useMacBrushedMetalStyle: Boolean - The location for user-installed packages (defaults to ~/.vistrails/userpacakges) + Whether should use a brushed metal interface (MacOS X only) -debugLevel: Integer +user: String - How much information VisTrails should alert the user about (0: - Critical errors only, 1: Critical errors and warnings, 2: Critical - errors, warnings, and log messages). + The username for the database to load the vistrail from -webRepositoryUser: String +userPackageDir: Boolean - The default username for logging into a VisTrails web repository - like crowdLabs + The location for user-installed packages (defaults to ~/.vistrails/userpacakges) webRepositoryURL: URL The URL of the web repository that should be attached to VisTrails (e.g. www.crowdlabs.org) -isInServerMode: Boolean - - Indicates whether VisTrails is being run as a server. - -useMacBrushedMetalStyle: Boolean +webRepositoryUser: String - Whether should use a brushed metal interface (MacOS X only) + The default username for logging into a VisTrails web repository + like crowdLabs withVersionTree: Boolean @@ -437,54 +485,6 @@ Output the workflow graph as an image -outputSettings: ConfigurationObject - - One or more comma-separated key=value parameters - -outputDefaultSettings: ConfigurationObject - - One or more comma-separated key=value parameters - -rpcServer: URL - - Hostname or ip address where this xml rpc server will work - -rpcPort: Integer - - Port where this xml rpc server will work - -rpcLogFile: String - - Log file for XML RPC server - -rpcInstances: Integer - - Number of other instances that vistrails should start - -multithread: Boolean - - Server will start a thread for each request - -rpcConfig: String - - Config file for server connection options - -jobCheckInterval: Integer: - - How often to check for jobs (in seconds, default=600) - -jobAutorun: Boolean - - Run jobs automatically when they finish - -jobRun: String - - Continue running specified job by id (use jobList to get) - -jobList: Boolean - - List running jobs - """ class ConfigType(object): From bdb87a3fa7c67f6e214ab5a99c22e248c4edbd98 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 26 Sep 2014 18:05:23 -0400 Subject: [PATCH 066/194] Adds missing simple documentations --- vistrails/core/configuration.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 926479e99..43421378e 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -58,20 +58,26 @@ _simple_documentation = """ autoConnect: Automatically connect dragged in modules autoSave: Automatically save backup vistrails every two minutes +batch: Run in batch mode instead of interactive mode cache: Cache previous results so they may be used in future computations dataDir: Default data directory db: The name for the database to load the vistrail from dbDefault: Save vistrails in a database by default +debugLevel: How much information should VisTrails log defaultFileType: Default file type/extension for vistrails (.vt or .xml) +detachHistoryView: Show the version tree in a separate window dotVistrails: User configuration directory enablePackagesSilently: Automatically enable packages when needed errorLog: Write errors to a log file +execute: Execute any specified workflows executionLog: Track execution provenance when running workflows fileDir: Default vistrail directory +fixedSpreadsheetCells: Draw spreadsheet cells at a fixed size handlerDontAsk: Do not ask about extension handling at startup host: The hostname for the database to load the vistrail from installBundles: Install missing Python dependencies installBundlesWithPip: Use pip to install missing Python dependencies +isInServerMode: Indicates whether VisTrails is being run as a server jobAutorun: Run jobs automatically when they finish jobCheckInterval: How often to check for jobs (in seconds) jobList: List running jobs @@ -88,6 +94,7 @@ port: The port for the database to load the vistrail from repositoryHTTPURL: Remote package repository URL repositoryLocalPath: Local package repository directory +rootDirectory: Directory that contains the VisTrails source code rpcConfig: Config file for server connection options rpcInstances: Number of other instances that vistrails should start rpcLogFile: Log file for XML RPC server @@ -99,8 +106,12 @@ showDebugPopups: Always bring debug messages to the front showScrollbars: Show scrollbars on the version tree and workflow canvases showSplash: Show VisTrails splash screen during startup +showSpreadsheetOnly: Hides the VisTrails main window showVariantErrors: Show error when variant input value doesn't match type during execution +showWindow: Show the main window singleInstance: Do not allow more than one instance of VisTrails to run at once +spreadsheetDumpCells: Defines the location for generated cells +spreadsheetDumpPDF: Whether the spreadsheet should dump images in PDF format staticRegistry: XML registry file stopOnError: Stop all workflow execution immediately after first error subworkflowsDir: Local subworkflows directory @@ -110,12 +121,16 @@ thumbs.cacheSize: Thumbnail cache size (MB) thumbs.mouseHover: Show thumbnails when mouse is hovering above a version thumbs.tagsOnly: Store thumbnails only for tagged versions +upgradeDelay: Persist upgrade only after other changes upgradeModuleFailPrompt: Alert when a subworkflow upgrade fails upgrades: Attempt to automatically upgrade old workflows +useMacBrushedMetalStyle: Use a brushed metal interface (MacOS X only) user: The username for the database to the load vistrail from userPackageDir: Local packages directory webRepositoryURL: Web repository URL webRepositoryUser: Web repository username +withVersionTree: Output the version tree as an image +withWorkflow: Output the workflow graph as an image """ _documentation = """ From 253fa351167706cc506fcd75ae396cf2b204dc22 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 26 Sep 2014 18:08:17 -0400 Subject: [PATCH 067/194] Adds to the complete documentations --- vistrails/core/configuration.py | 132 +++++++++++++++++--------------- 1 file changed, 72 insertions(+), 60 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 43421378e..ce8ebfe8e 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -145,11 +145,11 @@ batch: Boolean - Run vistrails in batch mode instead of interactive mode + Run vistrails in batch mode instead of interactive mode. cache: Boolean - Cache previous results so they may be used in future computations + Cache previous results so they may be used in future computations. dataDir: Path @@ -157,7 +157,7 @@ db: String - The name for the database to load the vistrail from + The name for the database to load the vistrail from. dbDefault: Boolean @@ -175,25 +175,29 @@ detachHistoryView: Boolean - Show the version tree in a separate window + Show the version tree in a separate window. dotVistrails: Path The location to look for VisTrails user configurations and - storage. Defaults to ~/.vistrails. + storage. Defaults to ~/.vistrails. enablePackagesSilently: Boolean Do not prompt the user to enable packages, just do so - automatically + automatically. + +errorLog: Boolean + + Write errors to a log file. execute: Boolean - Execute any specified workflows + Execute any specified workflows. executionLog: Boolean - Track execution provenance when running workflows + Track execution provenance when running workflows. fileDir: Path @@ -204,13 +208,17 @@ Draw spreadsheet cells at a fixed size (for testing). +handlerDontAsk: Boolean + + Do not ask about extension handling at startup (Linux only). + host: URL - The hostname for the database to load the vistrail from + The hostname for the database to load the vistrail from. installBundles: Boolean - Automatically try to install missing Python dependencies + Automatically try to install missing Python dependencies. installBundlesWithPip: Boolean @@ -223,19 +231,19 @@ jobAutorun: Boolean - Run jobs automatically when they finish + Run jobs automatically when they finish. jobCheckInterval: Integer: - How often to check for jobs (in seconds, default=600) + How often to check for jobs (in seconds, default=600). jobList: Boolean - List running jobs + List running jobs. jobRun: String - Continue running specified job by id (use jobList to get) + Continue running specified job by id (use jobList to get). logDir: Path @@ -247,7 +255,7 @@ maximizeWindows: Boolean - Whether the VisTrails windows should take up the entire screen space + Whether the VisTrails windows should take up the entire screen space. maxMemory: Integer @@ -273,39 +281,39 @@ multithread: Boolean - Server will start a thread for each request + Server will start a thread for each request. OLDupgradeDelay: Boolean If True, will only persist the upgrade when a user makes a - modification to or executes the workflow. Otherwise, the upgrade + modification to or executes the workflow. Otherwise, the upgrade will be automatically added to the version tree when a user views an upgraded workflow. outputDefaultSettings: ConfigurationObject - One or more comma-separated key=value parameters + One or more comma-separated key=value parameters. outputSettings: ConfigurationObject - One or more comma-separated key=value parameters + One or more comma-separated key=value parameters. packageDir: Path The directory to look for VisTrails core packages (use - userPackageDir for user-defined packages) + userPackageDir for user-defined packages). parameterExploration: Boolean Open and execute parameter exploration specified by the - version argument after the .vt file + version argument after the .vt file. parameters: String - List of parameters to use when running workflow + List of parameters to use when running workflow. port: Integer - The port for the database to load the vistrail from + The port for the database to load the vistrail from. pythonPrompt: Boolean @@ -313,19 +321,19 @@ recentVistrailList: String - Storage for recent vistrails. Users should not edit. + Storage for recent vistrails. Users should not edit. repositoryHTTPURL: URL - URL used to locate packages available to be installed + URL used to locate packages available to be installed. repositoryLocalPath: Path - Path used to locate packages available to be installed + Path used to locate packages available to be installed. reviewMode: Boolean - *Deprecated* Used to interactively export a pipeline + *Deprecated* Used to interactively export a pipeline. rootDirectory: Path @@ -333,39 +341,39 @@ rpcConfig: String - Config file for server connection options + Config file for server connection options. rpcInstances: Integer - Number of other instances that vistrails should start + Number of other instances that vistrails should start. rpcLogFile: String - Log file for XML RPC server + Log file for XML RPC server. rpcPort: Integer - Port where this xml rpc server will work + Port where this xml rpc server will work. rpcServer: URL - Hostname or ip address where this xml rpc server will work + Hostname or ip address where this xml rpc server will work. runningJobsList: String - Storage for recent vistrails. Users should not edit + Storage for recent vistrails; users should not edit. shell: ConfigurationObject - Settings for the appearance of the VisTrails console + Settings for the appearance of the VisTrails console. shell.fontFace: String - The font to be used for the VisTrails console + The font to be used for the VisTrails console. shell.fontSize: Integer - The font size used for the VisTrails console + The font size used for the VisTrails console. showConnectionErrors: Boolean @@ -382,8 +390,8 @@ showScrollbars: Boolean - Whether VisTrails should show scrollbars on the version tree and - workflow canvases. + Whether VisTrails should show scrollbars on the version tree and workflow + canvases. showSplash: Boolean @@ -391,17 +399,21 @@ showSpreadsheetOnly: Boolean - Whether the VisTrails main window should be hidden + Whether the VisTrails main window should be hidden. showVariantErrors: Boolean Alert the user if the value along a connection coming from a - Variant output matches the input port. + Variant output doesn't match the input port. + +showWindow: Boolean + + Show the main VisTrails window. singleInstance: Boolean Whether or not VisTrails should only allow one instance to be - running + running. spreadsheetDumpCells: Path @@ -410,13 +422,12 @@ spreadsheetDumpPDF: Boolean - Whether the spreadsheet should dump images in PDF format + Whether the spreadsheet should dump images in PDF format. staticRegistry: Path If specified, VisTrails uses an XML file defining the VisTrails - module registry to load modules instead of from the packages - directly + module registry to load modules instead of from the packages directly. stopOnError: Boolean @@ -429,41 +440,41 @@ temporaryDir: Path - The directory to use for temporary files generated by VisTrails + The directory to use for temporary files generated by VisTrails. thumbs: ConfiguationObject - Settings for generating and saving thumbnail images + Settings for generating and saving thumbnail images. thumbs.autoSave: Boolean - Whether to save thumbnails of results when executing VisTrails + Whether to save thumbnails of results when executing VisTrails. thumbs.cacheDir: Path - The directory to be used to cache thumbnails + The directory to be used to cache thumbnails. thumbs.cacheSize: Integer - The size (in MB) of the thumbnail cache + The size (in MB) of the thumbnail cache. thumbs.mouseHover: Boolean Whether to show thumbnails when hovering over a version in the - version tree + version tree. thumbs.tagsOnly: Boolean - If True, only stores thumbnails for tagged versions. Otherwise, + If True, only stores thumbnails for tagged versions. Otherwise, stores thumbnails for all versions. upgradeDelay: Boolean - Persist upgrade only after other changes + Persist upgrade only after other changes. upgrades: Boolean - Whether to upgrade old workflows so they work with newer packages + Whether to upgrade old workflows so they work with newer packages. upgradeModuleFailPrompt: Boolean @@ -472,33 +483,34 @@ useMacBrushedMetalStyle: Boolean - Whether should use a brushed metal interface (MacOS X only) + Whether should use a brushed metal interface (MacOS X only). user: String - The username for the database to load the vistrail from + The username for the database to load the vistrail from. userPackageDir: Boolean - The location for user-installed packages (defaults to ~/.vistrails/userpacakges) + The location for user-installed packages (defaults to + ~/.vistrails/userpackages). webRepositoryURL: URL The URL of the web repository that should be attached to VisTrails - (e.g. www.crowdlabs.org) + (e.g. www.crowdlabs.org). webRepositoryUser: String The default username for logging into a VisTrails web repository - like crowdLabs + like crowdLabs. withVersionTree: Boolean - Output the version tree as an image + Output the version tree as an image. withWorkflow: Boolean - Output the workflow graph as an image + Output the workflow graph as an image. """ From d1e519651b8438e8f8698fbf03cc5452390b8d48 Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 11:03:37 -0400 Subject: [PATCH 068/194] Comment out ImageOutput registration and add fixme Issue is that we really want an Image type that might permit in-memory images to be used here as well so comment this out for now. --- .../packages/spreadsheet/widgets/imageviewer/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py index 790320ea3..0f88403c8 100644 --- a/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py +++ b/vistrails/packages/spreadsheet/widgets/imageviewer/__init__.py @@ -36,7 +36,6 @@ # ImageViewer plugin for VisTrails Spreadsheet ################################################################################ from imageviewer import ImageViewerCell, ImageFileToSpreadsheet -from vistrails.core.modules.output_modules import ImageFileOutput # FIXME : This is missing ################################################################################ @@ -57,5 +56,8 @@ def registerWidget(reg, basicModules, basicWidgets): reg.add_module(ImageViewerCell) reg.add_input_port(ImageViewerCell, "Location", basicWidgets.CellLocation) reg.add_input_port(ImageViewerCell, "File", basicModules.File) - - ImageFileOutput.register_output_mode(ImageFileToSpreadsheet) + + # FIXME we need an ImageOutput module defined for this, but this + # probably requires an Image type as well... + # + # ImageOutput.register_output_mode(ImageFileToSpreadsheet) From 6e1d9635358130575fc71d4c664fd58e6ba334f4 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 11:09:41 -0400 Subject: [PATCH 069/194] Don't alter path in runtestsuite.py if not needed --- vistrails/tests/runtestsuite.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py index 01f5ad67a..729bd2dda 100755 --- a/vistrails/tests/runtestsuite.py +++ b/vistrails/tests/runtestsuite.py @@ -57,11 +57,12 @@ import shutil import tempfile -# Makes sure we can import modules as if we were running VisTrails -# from the root directory -_this_dir = os.path.dirname(os.path.realpath(__file__)) -root_directory = os.path.realpath(os.path.join(_this_dir, '..')) -sys.path.insert(0, os.path.realpath(os.path.join(root_directory, '..'))) +if 'vistrails' not in sys.modules: + # Makes sure we can import modules as if we were running VisTrails + # from the root directory + _this_dir = os.path.dirname(os.path.realpath(__file__)) + _root_directory = os.path.realpath(os.path.join(_this_dir, '..')) + sys.path.insert(0, os.path.realpath(os.path.join(_root_directory, '..'))) # Use a different temporary directory test_temp_dir = tempfile.mkdtemp(prefix='vt_testsuite_') @@ -172,6 +173,9 @@ def setNewPyQtAPI(): # after vistrails import unittest + +root_directory = os.path.realpath(vistrails_root_directory()) + ############################################################################### # Testing Examples From b50ecfe6739dc57af3e1ff4695597ed83ec38546 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 11:23:44 -0400 Subject: [PATCH 070/194] Marks new unset variable --- vistrails/core/modules/abstraction.py | 1 - vistrails/gui/modules/output_configuration.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/vistrails/core/modules/abstraction.py b/vistrails/core/modules/abstraction.py index a1a157b40..a0038b3e3 100644 --- a/vistrails/core/modules/abstraction.py +++ b/vistrails/core/modules/abstraction.py @@ -145,7 +145,6 @@ def package_dependencies(): for abstraction in os.listdir(abstraction_dir): if p.match(abstraction): abs_fname = os.path.join(abstraction_dir, abstraction) - # moved out of try because shouldn't run into MissingPackage here vistrail = read_vistrail(abs_fname) try: dependencies = get_abstraction_dependencies(vistrail) diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index d774fd8ca..5b0297557 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -385,7 +385,7 @@ def call_field_changed(val): def set_combo_value(self, combo, config_val): options = {} - if field.widget_options is not None: + if field.widget_options is not None: # 'field' unset here options = field.widget_options if "allowed_values" in options: From ba5ee0098eb2785bbbf92ea3eca6e184115b6137 Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 11:29:35 -0400 Subject: [PATCH 071/194] Fix the output_config fix field is not usually passed to set_*_value calls, and is needed for set_combo_value so we just pass it through. --- vistrails/gui/modules/output_configuration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index 5b0297557..bba786a76 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -254,7 +254,7 @@ def set_value(self, widget, field, val): widget_type = "lineedit" if widget_type == "combo": - self.set_combo_value(widget, val) + self.set_combo_value(widget, val, field) elif widget_type == "lineedit": self.set_line_edit_value(widget, val) elif widget_type == "pathedit": @@ -373,7 +373,7 @@ def add_combo(self, layout, field, config_key, config_desc, config_val): entries = values for entry in entries: combo.addItem(entry) - self.set_combo_value(combo, config_val) + self.set_combo_value(combo, config_val, field) layout.addWidget(combo, row, 1) def call_field_changed(val): @@ -383,7 +383,7 @@ def call_field_changed(val): combo.currentIndexChanged[unicode].connect(call_field_changed) return combo - def set_combo_value(self, combo, config_val): + def set_combo_value(self, combo, config_val, field): options = {} if field.widget_options is not None: # 'field' unset here options = field.widget_options From c31cc4a8d0a2fa45b6c978e4a408db3e71d13406 Mon Sep 17 00:00:00 2001 From: David Koop Date: Mon, 29 Sep 2014 11:34:45 -0400 Subject: [PATCH 072/194] Remove fixme comment --- vistrails/gui/modules/output_configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index bba786a76..25c8dda81 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -385,7 +385,7 @@ def call_field_changed(val): def set_combo_value(self, combo, config_val, field): options = {} - if field.widget_options is not None: # 'field' unset here + if field.widget_options is not None: options = field.widget_options if "allowed_values" in options: From 6a2c09cdd5ae942417d8e2b0fecdfa92d187a2f0 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 11:43:04 -0400 Subject: [PATCH 073/194] Removes unused local --- vistrails/gui/modules/output_configuration.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index 25c8dda81..ff32f8d1e 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -233,7 +233,6 @@ def add_field(self, layout, field, mode_config, mode_type, indent=0): self.field_widgets[config_key] = widget def reset_field(self, widget, field, mode_config, mode_type): - config_key = (mode_type, field.name) if mode_config is not None and field.name in mode_config: config_val = mode_config[field.name] else: From 53986f9f43f9a7edfcf804789ecb4a531633b28b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 12:28:01 -0400 Subject: [PATCH 074/194] get_shell_dialog() now returns None on missing dep --- vistrails/gui/shell.py | 23 +++++++++++++---------- vistrails/gui/vistrails_window.py | 2 ++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index 1a0c32273..595d5d11d 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -52,16 +52,19 @@ ################################################################################ def get_shell_dialog(): - deps = {'pip': 'ipython>=1.0', - 'linux-ubuntu': 'ipython-qtconsole', - 'linux-debian': 'ipython-qtconsole'} - - IPython = py_import('IPython.qt.console.rich_ipython_widget', deps) - RichIPythonWidget = \ - IPython.qt.console.rich_ipython_widget.RichIPythonWidget - py_import('IPython.qt.inprocess', deps) - QtInProcessKernelManager = \ - IPython.qt.inprocess.QtInProcessKernelManager + try: + deps = {'pip': 'ipython>=1.0', + 'linux-ubuntu': 'ipython-qtconsole', + 'linux-debian': 'ipython-qtconsole'} + + IPython = py_import('IPython.qt.console.rich_ipython_widget', deps) + RichIPythonWidget = \ + IPython.qt.console.rich_ipython_widget.RichIPythonWidget + py_import('IPython.qt.inprocess', deps) + QtInProcessKernelManager = \ + IPython.qt.inprocess.QtInProcessKernelManager + except ImportError: + return None km = QtInProcessKernelManager() km.start_kernel() diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 80451acf8..16883e130 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1119,6 +1119,8 @@ def init_palettes(self): notifications = visible p_klass, visible = p_klass #print "generating instance", p_klass + if p_klass is None: + continue palette = p_klass.instance() #print 'palette:', palette self.palettes.append(palette) From f12fc853a8219da15d12666ea8f397f65065cc1b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 12:28:45 -0400 Subject: [PATCH 075/194] Don't rebuild IPythonDialog on each call --- vistrails/gui/shell.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/vistrails/gui/shell.py b/vistrails/gui/shell.py index 595d5d11d..8b0490636 100644 --- a/vistrails/gui/shell.py +++ b/vistrails/gui/shell.py @@ -51,7 +51,14 @@ ################################################################################ +_shell_dialog = None + def get_shell_dialog(): + global _shell_dialog + + if _shell_dialog is not None: + return _shell_dialog + try: deps = {'pip': 'ipython>=1.0', 'linux-ubuntu': 'ipython-qtconsole', @@ -176,4 +183,5 @@ def eventFilter(self, obj, event): self.running_workflow = False return RichIPythonWidget.eventFilter(self, obj, event) + _shell_dialog = IPythonDialog return IPythonDialog From 00d915256066a1b3cedfd008775883a81b244e5d Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 13:15:21 -0400 Subject: [PATCH 076/194] Correctly handle MissingRequirement from packages Bug introduced by fdc56463 --- vistrails/core/packagemanager.py | 15 ++++++++++----- vistrails/gui/preferences.py | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index 3c08b86de..9784e9f9b 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -580,6 +580,11 @@ def initialize_packages(self, prefix_dictionary={}, # the reference in the package list self._startup.set_package_to_disabled(package.codepath) failed.append(package) + except MissingRequirement, e: + debug.critical("Package is missing a " + "requirement: %s" % ( + package.codepath, e.requirement), + e) except Package.InitializationFailed, e: debug.critical("Initialization of package " "failed and will be disabled" % @@ -658,8 +663,9 @@ def initialize_packages(self, prefix_dictionary={}, except MissingRequirement, e: if report_missing_dependencies: debug.critical("Package is missing a " - "requirement and will be disabled" % - pkg.codepath, str(e)) + "requirement: %s" % ( + pkg.codepath, e.requirement), + e) self.late_disable_package(pkg.codepath) except Package.InitializationFailed, e: debug.critical("Initialization of package " @@ -741,9 +747,8 @@ def identifier_is_available(self, identifier): if (hasattr(pkg._module, "can_handle_identifier") and pkg._module.can_handle_identifier(identifier)): return pkg - except pkg.LoadFailed: - pass - except pkg.InitializationFailed: + except (pkg.LoadFailed, pkg.InitializationFailed, + MissingRequirement): pass except Exception, e: pass diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py index 465b04d26..6f36976fc 100644 --- a/vistrails/gui/preferences.py +++ b/vistrails/gui/preferences.py @@ -37,6 +37,7 @@ from vistrails.core.packagemanager import get_package_manager from vistrails.core.modules.module_registry import get_module_registry from vistrails.core.modules.package import Package +from vistrails.core.requirements import MissingRequirement from vistrails.core.system import get_vistrails_basic_pkg_id from vistrails.core.utils import InvalidPipeline from vistrails.core.utils.uxml import (named_elements, @@ -319,7 +320,7 @@ def enable_current_package(self): palette.setUpdatesEnabled(False) try: pm.late_enable_package(codepath) - except Package.InitializationFailed, e: + except (Package.InitializationFailed, MissingRequirement), e: debug.critical("Initialization of package '%s' failed" % codepath, e) From e74f1087b0c746fd45f4abebcb95ac6ff6d41c4b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 13:38:34 -0400 Subject: [PATCH 077/194] Removes explicit query_compute() inheritance --- vistrails/core/modules/basic_modules.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 38af6d50a..ef78bbc00 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -301,8 +301,6 @@ def translate_to_python(x): def validate(x): return isinstance(x, (int, long)) - #query_compute = Float.query_compute # FIXME : needed? - class String(Constant): _settings = ModuleSettings( configure_widget="vistrails.gui.modules.string_configure:TextConfigurationWidget", From b59df7984bd4ec8df9623fb4ef4b2d9e8e383110 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 29 Sep 2014 20:28:50 +0200 Subject: [PATCH 078/194] Fixes warnings in application_server.py --- vistrails/gui/application_server.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 0c613daf0..3ba7a2952 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -342,6 +342,7 @@ def get_server_packages(self, codepath=None, status=None): "Not all vistrail instances are free, please try again."], 1] proxies.append(self.proxies_queue.get()) for proxy in proxies: + result, s = 'Please contact the server admin', 0 try: if codepath and status is not None: result, s = proxy.get_server_packages(codepath, status) @@ -357,7 +358,7 @@ def get_server_packages(self, codepath=None, status=None): self.server_logger.error(err_msg) finally: self.proxies_queue.put(proxy) - if s == 0: # FIXME : s might not be defined here + if s == 0: messages.append('An error occurred: %s' % result) else: messages.append(result[1]) @@ -708,15 +709,15 @@ def executeMedley(self, xml_medley, extra_info=None): self.server_logger.info(xml_medley) xml_string = xml_medley.replace('\\"','"') root = ElementTree.fromstring(xml_string) + medley = None try: medley = MedleySimpleGUI.from_xml(root) + self.server_logger.debug("%s medley: %s"%(medley._type, medley._name)) except Exception: #even if this error occurred there's still a chance of # recovering from it... (the server can find cached images) self.server_logger.error("couldn't instantiate medley") - # FIXME : there's no "recovering", this line will raise NameError - self.server_logger.debug("%s medley: %s"%(medley._type, medley._name)) result = "" subdir = hashlib.sha224(xml_string).hexdigest() path_to_images = \ @@ -744,6 +745,7 @@ def executeMedley(self, xml_medley, extra_info=None): if not extra_info.has_key('pathDumpCells'): extra_info['pathDumpCells'] = path_to_images + ok = False if not self.path_exists_and_not_empty(extra_info['pathDumpCells']): if not os.path.exists(extra_info['pathDumpCells']): os.mkdir(extra_info['pathDumpCells']) @@ -848,7 +850,7 @@ def executeMedley(self, xml_medley, extra_info=None): ok = False result += str(errors[i]) - self.server_logger.info("success? %s" % ok) # FIXME : ok might not be defined + self.server_logger.info("success? %s" % ok) elif medley._type == 'visit': cur_dir = os.getcwd() From c744091d8ef5cae61a0d6909e4d6341e7c35af65 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 29 Sep 2014 15:41:57 -0400 Subject: [PATCH 079/194] Fixes debug.warning() usage --- vistrails/core/modules/basic_modules.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 2c5a734a8..cdce3e518 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -483,11 +483,11 @@ def compute(self): try: vistrails.core.system.link_or_copy(input_file.name, filename) except OSError, e: - msg = "Could not publish file '%s' \n on '%s': %s" % \ - (full_path, filename, e) + msg = "Could not publish file '%s' \n on '%s':" % ( + full_path, filename) # I am not sure whether we should raise an error # I will just print a warning for now (Emanuele) - debug.warning("%s" % msg) + debug.warning("%s" % msg, e) class DirectorySink(NotCacheable, Module): """DirectorySink takes a directory and writes it to a From b799f50078abf1ebd7e0abea4d217a5bac545dec Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 11:55:26 -0400 Subject: [PATCH 080/194] Don't leave None palette classes in palette_layout --- vistrails/gui/vistrails_window.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 16883e130..259a3072d 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1089,10 +1089,11 @@ def init_palettes(self): ('descriptor_changed', 'update_descriptor'))), ((QModuleIteration, True), (('controller_changed', 'set_controller'), - ('module_changed', 'update_module'))), + ('module_changed', 'update_module')))] + + [] if not get_shell_dialog() else [ ((get_shell_dialog(), True), - (('controller_changed', 'set_controller'),)), - ((QDebugger, True), + (('controller_changed', 'set_controller'),))] + + [((QDebugger, True), (('controller_changed', 'set_controller'),)), (DebugView, True), (QJobView, True), @@ -1119,8 +1120,6 @@ def init_palettes(self): notifications = visible p_klass, visible = p_klass #print "generating instance", p_klass - if p_klass is None: - continue palette = p_klass.instance() #print 'palette:', palette self.palettes.append(palette) From 9a108784e93f3775253453363f73239ebbd21e9e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 14:06:06 -0400 Subject: [PATCH 081/194] Don't reflow version message --- vistrails/core/configuration.py | 16 +++++++++++++++- vistrails/core/system/__init__.py | 18 +++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index b1b20976f..9646a4491 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -852,6 +852,20 @@ def __call__(self, parser, namespace, values, option_string=None): nested_cls = type(nested_name, (cls,), {"__call__": __call__}) return nested_cls +class RawVersionAction(argparse.Action): + """Variant of the default _VersionAction that doesn't reflow. + """ + def __init__(self, option_strings, version, + dest=argparse.SUPPRESS, default=argparse.SUPPRESS, + help="show program's version and exit"): + argparse.Action.__init__(self, option_strings=option_strings, + dest=dest, default=default, nargs=0, + help=help) + self.version = version + + def __call__(self, parser, namespace, values, option_string=None): + parser.exit(message=self.version) + def build_command_line_parser(d, parser=None, prefix="", **parser_args): global _usage_args @@ -874,7 +888,7 @@ def camel_to_dashes(s): parser.add_argument('vistrails', metavar='vistrail', type=str, nargs='*', help="Vistrail to open") _usage_args.add('vistrails') - parser.add_argument('--version', action='version', + parser.add_argument('--version', action=RawVersionAction, version=system.about_string()) diff --git a/vistrails/core/system/__init__.py b/vistrails/core/system/__init__.py index b6d472f9f..facdc4c18 100644 --- a/vistrails/core/system/__init__.py +++ b/vistrails/core/system/__init__.py @@ -389,15 +389,15 @@ def about_string(): names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" \ -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \ -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \ -ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, \ -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, \ -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \ -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY \ -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING \ -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, \ +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.""" % (vistrails_version(), vistrails_revision()) From 9c9d04ab1c6f7aa516b9af52dee29eeed42779ac Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 14:16:15 -0400 Subject: [PATCH 082/194] Fixes bad indentation --- vistrails/core/collection/__init__.py | 2 +- vistrails/core/console_mode.py | 26 +- vistrails/core/data_structures/graph.py | 710 ++++++++++----------- vistrails/core/layout/workflow_layout.py | 2 +- vistrails/core/vistrail/module_function.py | 2 +- vistrails/gui/application_server.py | 16 +- vistrails/gui/collection/vis_log.py | 2 +- vistrails/gui/mashups/mashup_app.py | 2 +- vistrails/gui/vistrails_window.py | 4 +- 9 files changed, 383 insertions(+), 383 deletions(-) diff --git a/vistrails/core/collection/__init__.py b/vistrails/core/collection/__init__.py index 06fb38b7f..669be9524 100644 --- a/vistrails/core/collection/__init__.py +++ b/vistrails/core/collection/__init__.py @@ -326,7 +326,7 @@ def urlExists(self, url): """ Check if entity with this url exist """ locator = BaseLocator.from_url(url) if locator.is_valid(): - return True + return True return False def updateVistrail(self, url, vistrail=None): diff --git a/vistrails/core/console_mode.py b/vistrails/core/console_mode.py index e891d60e0..4c53da353 100644 --- a/vistrails/core/console_mode.py +++ b/vistrails/core/console_mode.py @@ -234,19 +234,19 @@ def get_vt_graph(vt_list, tree_info, pdf=False): controller = GUIVistrailController(v, locator, abstractions, thumbnails, mashups) if tree_info is not None: - from vistrails.gui.version_view import QVersionTreeView - version_view = QVersionTreeView() - version_view.scene().setupScene(controller) - if pdf: - base_fname = "graph_%s.pdf" % locator.short_filename - filename = os.path.join(tree_info, base_fname) - version_view.scene().saveToPDF(filename) - else: - base_fname = "graph_%s.png" % locator.short_filename - filename = os.path.join(tree_info, base_fname) - version_view.scene().saveToPNG(filename) - del version_view - result.append((True, "")) + from vistrails.gui.version_view import QVersionTreeView + version_view = QVersionTreeView() + version_view.scene().setupScene(controller) + if pdf: + base_fname = "graph_%s.pdf" % locator.short_filename + filename = os.path.join(tree_info, base_fname) + version_view.scene().saveToPDF(filename) + else: + base_fname = "graph_%s.png" % locator.short_filename + filename = os.path.join(tree_info, base_fname) + version_view.scene().saveToPNG(filename) + del version_view + result.append((True, "")) except Exception, e: result.append((False, debug.format_exception(e))) else: diff --git a/vistrails/core/data_structures/graph.py b/vistrails/core/data_structures/graph.py index e207b7466..7313ea171 100644 --- a/vistrails/core/data_structures/graph.py +++ b/vistrails/core/data_structures/graph.py @@ -731,362 +731,362 @@ def __ne__(self, other): class TestGraph(unittest.TestCase): - """ Class to test Graph + """ Class to test Graph - It tests vertex addition, the out_degree of a sink and in_degree of a - source consistencies. + It tests vertex addition, the out_degree of a sink and in_degree of a + source consistencies. - """ - - def make_complete(self, v): - """returns a complete graph with v verts.""" - g = Graph() - for x in xrange(v): - g.add_vertex(x) - for f in xrange(v): - for t in xrange(f+1, v): - g.add_edge(f, t, f * v + t) - return g - - def make_linear(self, v, bw=False): - """returns a linear graph with v verts. if bw=True, add - backward links.""" - g = Graph() - for x in xrange(v): - g.add_vertex(x) - for x,y in izip(xrange(v-1), xrange(1, v)): - g.add_edge(x, y, x) - if bw: - g.add_edge(y, x, x + v) - return g - - def get_default_graph(self): - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - g.add_vertex(2) - g.add_vertex(3) - g.add_vertex(4) - g.add_edge(0,1,0) - g.add_edge(1,2,1) - g.add_edge(0,3,2) - g.add_edge(3,2,3) - g.add_edge(2,4,4) - return g - - def test1(self): - """Test adding edges and vertices""" - g = Graph() - g.add_vertex('0') - g.add_vertex('1') - g.add_vertex('2') - g.add_vertex('3') - g.add_edge('0', '1', 0) - g.add_edge('1', '2', 1) - g.add_edge('2', '3', 2) - parent = g.bfs('0') - self.assertEquals(parent['3'], '2') - self.assertEquals(parent['2'], '1') - self.assertEquals(parent['1'], '0') - - def test2(self): - """Test bread-first-search""" - g = self.get_default_graph() - p = g.bfs(0) - k = p.keys() - k.sort() - self.assertEquals(k, [1, 2, 3, 4]) - inv = g.inverse() - p_inv = inv.bfs(4) - k2 = p_inv.keys() - k2.sort() - self.assertEquals(k2, [0, 1, 2, 3]) - - def test3(self): - """Test sink and source degree consistency""" - g = Graph() - for i in xrange(100): - g.add_vertex(i) - for i in xrange(1000): - v1 = random.randint(0,99) - v2 = random.randint(0,99) - g.add_edge(v1, v2, i) - sinkResult = [None for i in g.sinks() if g.out_degree(i) == 0] - sourceResult = [None for i in g.sources() if g.in_degree(i) == 0] - if len(sinkResult) <> len(g.sinks()): - assert False - if len(sourceResult) <> len(g.sources()): - assert False - - def test_remove_vertices(self): - g = self.make_linear(5) - g.delete_vertex(1) - g.delete_vertex(2) - - def test_DFS(self): - """Test DFS on graph.""" - g = self.get_default_graph() - g.dfs() - - def test_topological_sort(self): - """Test toposort on graph.""" - g = self.get_default_graph() - g.vertices_topological_sort() - - g = self.make_linear(10) - r = g.vertices_topological_sort() - assert r == [0,1,2,3,4,5,6,7,8,9] - - g = Graph() - g.add_vertex('a') - g.add_vertex('b') - g.add_vertex('c') - g.add_edge('a', 'b') - g.add_edge('b', 'c') - assert g.vertices_topological_sort() == ['a', 'b', 'c'] - - def test_limited_DFS(self): - """Test DFS on graph using a limited set of starting vertices.""" - g = self.get_default_graph() - g.dfs(vertex_set=[1]) - g.dfs(vertex_set=[1,3]) - g.dfs(vertex_set=[1,2]) - - def test_limited_topological_sort(self): - """Test toposort on graph using a limited set of starting vertices.""" - g = self.get_default_graph() - g.vertices_topological_sort(vertex_set=[1]) - g.vertices_topological_sort(vertex_set=[1,3]) - g.vertices_topological_sort(vertex_set=[1,2]) - - def test_print_empty_graph(self): - """Test print on empty graph""" - g = Graph() - g.__str__() - - def test_delete(self): - """Tests consistency of data structure after deletion.""" - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - g.add_vertex(2) - g.add_edge(0, 1, 0) - g.add_edge(1, 2, 1) - g.delete_vertex(2) - self.assertEquals(g.adjacency_list[1], []) - - def test_raising_DFS(self): - """Tests if DFS with cycle-checking will raise exceptions.""" - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - g.add_vertex(2) - g.add_edge(0, 1) - g.add_edge(1, 2) - g.add_edge(2, 0) - with self.assertRaises(Graph.GraphContainsCycles): - g.dfs(raise_if_cyclic=True) - - def test_call_inverse(self): - """Test if calling inverse methods work.""" - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - g.add_vertex(2) - g.add_edge(0, 1) - g.add_edge(1, 2) - g.add_edge(2, 0) - g2 = g.inverse() - g3 = g.inverse_immutable() - - def test_subgraph(self): - """Test subgraph routines.""" - g = self.make_complete(5) - sub = g.subgraph([0,1]) - assert 0 in sub.vertices - assert 1 in sub.vertices - assert (1,1) in sub.adjacency_list[0] - assert (0,1) in sub.inverse_adjacency_list[1] - - g = self.make_linear(3) - sub = g.subgraph([0, 2]) - assert 0 in sub.vertices - assert 2 in sub.vertices - assert sub.adjacency_list[0] == [] - assert sub.adjacency_list[2] == [] - - def test_connections_to_subgraph(self): - """Test connections_to_subgraph.""" - g = self.make_linear(5) - sub = g.subgraph([3]) - assert len(g.connections_to_subgraph(sub)) == 1 - g = self.make_linear(5, True) - sub = g.subgraph([3]) - assert len(g.connections_to_subgraph(sub)) == 2 - - def test_connections_from_subgraph(self): - """Test connections_from_subgraph.""" - g = self.make_linear(5) - sub = g.subgraph([3]) - assert len(g.connections_from_subgraph(sub)) == 1 - g = self.make_linear(5, True) - sub = g.subgraph([3]) - assert len(g.connections_from_subgraph(sub)) == 2 - - def test_topologically_contractible(self): - """Test topologically_contractible.""" - g = self.make_linear(5) - sub = g.subgraph([1, 2]) - assert g.topologically_contractible(sub) - sub = g.subgraph([1, 3]) - assert not g.topologically_contractible(sub) - - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - g.add_vertex(2) - g.add_vertex(3) - g.add_edge(0, 1) - g.add_edge(2, 3) - for i in xrange(1, 16): - s = [] - for j in xrange(4): - if i & (1 << j): s.append(j) - assert g.topologically_contractible(g.subgraph(s)) - - def test_iter_vertices(self): - g = self.get_default_graph() - l = list(g.iter_vertices()) - l.sort() - assert l == [0,1,2,3,4] - - def test_iter_edges(self): - g = self.get_default_graph() - l = [v for v in g.iter_all_edges()] - l.sort() - assert l == [(0,1,0), (0,3,2), (1, 2, 1), (2, 4, 4), (3, 2, 3)] - - def test_iter_edges_empty(self): - """Test iterators on empty parts of the graph.""" - g = Graph() - for a in g.iter_vertices(): - assert False - g.add_vertex(0) - for a in g.iter_edges_from(0): - assert False - for a in g.iter_edges_to(0): - assert False - for a in g.iter_all_edges(): - assert False - - def test_get_edge_none(self): - g = Graph() - g.add_vertex(0) - g.add_vertex(1) - assert g.get_edge(0, 1) == None - - def test_dfs_before(self): - g = self.make_linear(10) - inc = [] - dec = [] - def before(id): inc.append(id) - def after(id): dec.append(id) - g.dfs(enter_vertex=before, - leave_vertex=after) - assert inc == [0,1,2,3,4,5,6,7,8,9] - assert inc == list(reversed(dec)) - assert all(a < b for a, b in izip(inc[:-1], inc[1:])) - assert all(a > b for a, b in izip(dec[:-1], dec[1:])) - - def test_parent_source(self): - g = self.make_linear(10) - self.assertRaises(g.VertexHasNoParentError, - lambda: g.parent(0)) - for i in xrange(1, 10): - assert g.parent(i) == i-1 - - def test_rename_vertex(self): - g = self.make_linear(10) - self.assertRaises(g.RenameVertexError, - lambda: g.rename_vertex(0, 1)) - assert g.get_edge(0, 1) is not None - assert g.get_edge(0, 11) is None - g.rename_vertex(1, 11) - assert g.get_edge(0, 1) is None - assert g.get_edge(0, 11) is not None - g.rename_vertex(11, 1) - assert g.get_edge(0, 1) is not None - assert g.get_edge(0, 11) is None - - def test_delete_get_edge(self): - g = self.make_linear(10) - self.assertRaises(GraphException, lambda: g.delete_edge(7, 9)) - assert g.has_edge(7, 8) - g.delete_edge(7, 8) - assert not g.has_edge(7, 8) - - def test_bfs(self): - g = self.make_linear(5) - lst = g.bfs(0).items() - lst.sort() - assert lst == [(1, 0), (2, 1), (3, 2), (4, 3)] - lst = g.bfs(2).items() - lst.sort() - assert lst == [(3, 2), (4, 3)] - - def test_undirected(self): - g = self.make_linear(5).undirected_immutable() - lst = g.bfs(0).items() - lst.sort() - assert lst == [(1, 0), (2, 1), (3, 2), (4, 3)] - lst = g.bfs(2).items() - lst.sort() - assert lst == [(0, 1), (1, 2), (3, 2), (4, 3)] - - def test_closest_vertex(self): - g = self.make_linear(10) - g.delete_edge(7, 8) - g = g.undirected_immutable() - self.assertRaises(GraphException, lambda: g.closest_vertex(1, [9])) - assert g.closest_vertex(3, [2, 6, 7]) == 2 - assert g.closest_vertex(3, [2, 3, 6, 7]) == 3 - # Test using dictionary as target_list - - d1 = {2:True, 6:True, 7:False} - d2 = {2:True, 6:True, 7:False, 3:False} - d3 = {9:True} - self.assertRaises(GraphException, lambda: g.closest_vertex(1, d3)) - assert g.closest_vertex(3, d1) == 2 - assert g.closest_vertex(3, d2) == 3 - - def test_copy_not_share(self): - g = self.make_linear(10) - g2 = copy.copy(g) - for v in g.vertices: - assert id(g.adjacency_list[v]) <> id(g2.adjacency_list[v]) - assert id(g.inverse_adjacency_list[v]) <> id(g2.inverse_adjacency_list[v]) - - def test_copy_works(self): - g = self.make_linear(10) - g2 = copy.copy(g) - for v in g.vertices: - assert v in g2.vertices - assert g2.adjacency_list[v] == g.adjacency_list[v] - assert g2.inverse_adjacency_list[v] == g.inverse_adjacency_list[v] - - def test_equals(self): - g = self.make_linear(5) - assert copy.copy(g) == g - g2 = copy.copy(g) - g2.add_vertex(10) - assert g2 <> g - - def test_map_vertices(self): - g = self.make_linear(5) - m = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} - assert g == Graph.map_vertices(g, m) - m = {0: 5, 1: 6, 2: 7, 3: 8, 4: 9} - assert g <> Graph.map_vertices(g, m) - + """ + + def make_complete(self, v): + """returns a complete graph with v verts.""" + g = Graph() + for x in xrange(v): + g.add_vertex(x) + for f in xrange(v): + for t in xrange(f+1, v): + g.add_edge(f, t, f * v + t) + return g + + def make_linear(self, v, bw=False): + """returns a linear graph with v verts. if bw=True, add + backward links.""" + g = Graph() + for x in xrange(v): + g.add_vertex(x) + for x,y in izip(xrange(v-1), xrange(1, v)): + g.add_edge(x, y, x) + if bw: + g.add_edge(y, x, x + v) + return g + + def get_default_graph(self): + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + g.add_vertex(2) + g.add_vertex(3) + g.add_vertex(4) + g.add_edge(0,1,0) + g.add_edge(1,2,1) + g.add_edge(0,3,2) + g.add_edge(3,2,3) + g.add_edge(2,4,4) + return g + + def test1(self): + """Test adding edges and vertices""" + g = Graph() + g.add_vertex('0') + g.add_vertex('1') + g.add_vertex('2') + g.add_vertex('3') + g.add_edge('0', '1', 0) + g.add_edge('1', '2', 1) + g.add_edge('2', '3', 2) + parent = g.bfs('0') + self.assertEquals(parent['3'], '2') + self.assertEquals(parent['2'], '1') + self.assertEquals(parent['1'], '0') + + def test2(self): + """Test bread-first-search""" + g = self.get_default_graph() + p = g.bfs(0) + k = p.keys() + k.sort() + self.assertEquals(k, [1, 2, 3, 4]) + inv = g.inverse() + p_inv = inv.bfs(4) + k2 = p_inv.keys() + k2.sort() + self.assertEquals(k2, [0, 1, 2, 3]) + + def test3(self): + """Test sink and source degree consistency""" + g = Graph() + for i in xrange(100): + g.add_vertex(i) + for i in xrange(1000): + v1 = random.randint(0,99) + v2 = random.randint(0,99) + g.add_edge(v1, v2, i) + sinkResult = [None for i in g.sinks() if g.out_degree(i) == 0] + sourceResult = [None for i in g.sources() if g.in_degree(i) == 0] + if len(sinkResult) <> len(g.sinks()): + assert False + if len(sourceResult) <> len(g.sources()): + assert False + + def test_remove_vertices(self): + g = self.make_linear(5) + g.delete_vertex(1) + g.delete_vertex(2) + + def test_DFS(self): + """Test DFS on graph.""" + g = self.get_default_graph() + g.dfs() + + def test_topological_sort(self): + """Test toposort on graph.""" + g = self.get_default_graph() + g.vertices_topological_sort() + + g = self.make_linear(10) + r = g.vertices_topological_sort() + assert r == [0,1,2,3,4,5,6,7,8,9] + + g = Graph() + g.add_vertex('a') + g.add_vertex('b') + g.add_vertex('c') + g.add_edge('a', 'b') + g.add_edge('b', 'c') + assert g.vertices_topological_sort() == ['a', 'b', 'c'] + + def test_limited_DFS(self): + """Test DFS on graph using a limited set of starting vertices.""" + g = self.get_default_graph() + g.dfs(vertex_set=[1]) + g.dfs(vertex_set=[1,3]) + g.dfs(vertex_set=[1,2]) + + def test_limited_topological_sort(self): + """Test toposort on graph using a limited set of starting vertices.""" + g = self.get_default_graph() + g.vertices_topological_sort(vertex_set=[1]) + g.vertices_topological_sort(vertex_set=[1,3]) + g.vertices_topological_sort(vertex_set=[1,2]) + + def test_print_empty_graph(self): + """Test print on empty graph""" + g = Graph() + g.__str__() + + def test_delete(self): + """Tests consistency of data structure after deletion.""" + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + g.add_vertex(2) + g.add_edge(0, 1, 0) + g.add_edge(1, 2, 1) + g.delete_vertex(2) + self.assertEquals(g.adjacency_list[1], []) + + def test_raising_DFS(self): + """Tests if DFS with cycle-checking will raise exceptions.""" + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + g.add_vertex(2) + g.add_edge(0, 1) + g.add_edge(1, 2) + g.add_edge(2, 0) + with self.assertRaises(Graph.GraphContainsCycles): + g.dfs(raise_if_cyclic=True) + + def test_call_inverse(self): + """Test if calling inverse methods work.""" + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + g.add_vertex(2) + g.add_edge(0, 1) + g.add_edge(1, 2) + g.add_edge(2, 0) + g2 = g.inverse() + g3 = g.inverse_immutable() + + def test_subgraph(self): + """Test subgraph routines.""" + g = self.make_complete(5) + sub = g.subgraph([0,1]) + assert 0 in sub.vertices + assert 1 in sub.vertices + assert (1,1) in sub.adjacency_list[0] + assert (0,1) in sub.inverse_adjacency_list[1] + + g = self.make_linear(3) + sub = g.subgraph([0, 2]) + assert 0 in sub.vertices + assert 2 in sub.vertices + assert sub.adjacency_list[0] == [] + assert sub.adjacency_list[2] == [] + + def test_connections_to_subgraph(self): + """Test connections_to_subgraph.""" + g = self.make_linear(5) + sub = g.subgraph([3]) + assert len(g.connections_to_subgraph(sub)) == 1 + g = self.make_linear(5, True) + sub = g.subgraph([3]) + assert len(g.connections_to_subgraph(sub)) == 2 + + def test_connections_from_subgraph(self): + """Test connections_from_subgraph.""" + g = self.make_linear(5) + sub = g.subgraph([3]) + assert len(g.connections_from_subgraph(sub)) == 1 + g = self.make_linear(5, True) + sub = g.subgraph([3]) + assert len(g.connections_from_subgraph(sub)) == 2 + + def test_topologically_contractible(self): + """Test topologically_contractible.""" + g = self.make_linear(5) + sub = g.subgraph([1, 2]) + assert g.topologically_contractible(sub) + sub = g.subgraph([1, 3]) + assert not g.topologically_contractible(sub) + + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + g.add_vertex(2) + g.add_vertex(3) + g.add_edge(0, 1) + g.add_edge(2, 3) + for i in xrange(1, 16): + s = [] + for j in xrange(4): + if i & (1 << j): s.append(j) + assert g.topologically_contractible(g.subgraph(s)) + + def test_iter_vertices(self): + g = self.get_default_graph() + l = list(g.iter_vertices()) + l.sort() + assert l == [0,1,2,3,4] + + def test_iter_edges(self): + g = self.get_default_graph() + l = [v for v in g.iter_all_edges()] + l.sort() + assert l == [(0,1,0), (0,3,2), (1, 2, 1), (2, 4, 4), (3, 2, 3)] + + def test_iter_edges_empty(self): + """Test iterators on empty parts of the graph.""" + g = Graph() + for a in g.iter_vertices(): + assert False + g.add_vertex(0) + for a in g.iter_edges_from(0): + assert False + for a in g.iter_edges_to(0): + assert False + for a in g.iter_all_edges(): + assert False + + def test_get_edge_none(self): + g = Graph() + g.add_vertex(0) + g.add_vertex(1) + assert g.get_edge(0, 1) == None + + def test_dfs_before(self): + g = self.make_linear(10) + inc = [] + dec = [] + def before(id): inc.append(id) + def after(id): dec.append(id) + g.dfs(enter_vertex=before, + leave_vertex=after) + assert inc == [0,1,2,3,4,5,6,7,8,9] + assert inc == list(reversed(dec)) + assert all(a < b for a, b in izip(inc[:-1], inc[1:])) + assert all(a > b for a, b in izip(dec[:-1], dec[1:])) + + def test_parent_source(self): + g = self.make_linear(10) + self.assertRaises(g.VertexHasNoParentError, + lambda: g.parent(0)) + for i in xrange(1, 10): + assert g.parent(i) == i-1 + + def test_rename_vertex(self): + g = self.make_linear(10) + self.assertRaises(g.RenameVertexError, + lambda: g.rename_vertex(0, 1)) + assert g.get_edge(0, 1) is not None + assert g.get_edge(0, 11) is None + g.rename_vertex(1, 11) + assert g.get_edge(0, 1) is None + assert g.get_edge(0, 11) is not None + g.rename_vertex(11, 1) + assert g.get_edge(0, 1) is not None + assert g.get_edge(0, 11) is None + + def test_delete_get_edge(self): + g = self.make_linear(10) + self.assertRaises(GraphException, lambda: g.delete_edge(7, 9)) + assert g.has_edge(7, 8) + g.delete_edge(7, 8) + assert not g.has_edge(7, 8) + + def test_bfs(self): + g = self.make_linear(5) + lst = g.bfs(0).items() + lst.sort() + assert lst == [(1, 0), (2, 1), (3, 2), (4, 3)] + lst = g.bfs(2).items() + lst.sort() + assert lst == [(3, 2), (4, 3)] + + def test_undirected(self): + g = self.make_linear(5).undirected_immutable() + lst = g.bfs(0).items() + lst.sort() + assert lst == [(1, 0), (2, 1), (3, 2), (4, 3)] + lst = g.bfs(2).items() + lst.sort() + assert lst == [(0, 1), (1, 2), (3, 2), (4, 3)] + + def test_closest_vertex(self): + g = self.make_linear(10) + g.delete_edge(7, 8) + g = g.undirected_immutable() + self.assertRaises(GraphException, lambda: g.closest_vertex(1, [9])) + assert g.closest_vertex(3, [2, 6, 7]) == 2 + assert g.closest_vertex(3, [2, 3, 6, 7]) == 3 + # Test using dictionary as target_list + + d1 = {2:True, 6:True, 7:False} + d2 = {2:True, 6:True, 7:False, 3:False} + d3 = {9:True} + self.assertRaises(GraphException, lambda: g.closest_vertex(1, d3)) + assert g.closest_vertex(3, d1) == 2 + assert g.closest_vertex(3, d2) == 3 + + def test_copy_not_share(self): + g = self.make_linear(10) + g2 = copy.copy(g) + for v in g.vertices: + assert id(g.adjacency_list[v]) <> id(g2.adjacency_list[v]) + assert id(g.inverse_adjacency_list[v]) <> id(g2.inverse_adjacency_list[v]) + + def test_copy_works(self): + g = self.make_linear(10) + g2 = copy.copy(g) + for v in g.vertices: + assert v in g2.vertices + assert g2.adjacency_list[v] == g.adjacency_list[v] + assert g2.inverse_adjacency_list[v] == g.inverse_adjacency_list[v] + + def test_equals(self): + g = self.make_linear(5) + assert copy.copy(g) == g + g2 = copy.copy(g) + g2.add_vertex(10) + assert g2 <> g + + def test_map_vertices(self): + g = self.make_linear(5) + m = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} + assert g == Graph.map_vertices(g, m) + m = {0: 5, 1: 6, 2: 7, 3: 8, 4: 9} + assert g <> Graph.map_vertices(g, m) + if __name__ == '__main__': unittest.main() diff --git a/vistrails/core/layout/workflow_layout.py b/vistrails/core/layout/workflow_layout.py index 3b4e7e7ca..36d21e865 100644 --- a/vistrails/core/layout/workflow_layout.py +++ b/vistrails/core/layout/workflow_layout.py @@ -348,7 +348,7 @@ def addModule(self, module, layer_number): # print "layers",self.layers if layer_number >= num_layers: - self.layers.extend([Layer(i) for i in xrange(num_layers,layer_number+1)]) + self.layers.extend([Layer(i) for i in xrange(num_layers,layer_number+1)]) layer = self.layers[layer_number] layer.addModule(module) diff --git a/vistrails/core/vistrail/module_function.py b/vistrails/core/vistrail/module_function.py index 1a516fd25..4c6c23650 100644 --- a/vistrails/core/vistrail/module_function.py +++ b/vistrails/core/vistrail/module_function.py @@ -140,7 +140,7 @@ def serialize(self, doc, element): child.setAttribute('name',self.name) child.setAttribute('returnType',self.type) for p in self.params: - p.serialize(doc,child) + p.serialize(doc,child) element.appendChild(child) def get_spec(self, port_type): diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 3ba7a2952..19b23a529 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -934,14 +934,14 @@ def run_from_db(self, host, port, db_name, vt_id, path_to_figures, self.server_logger.info("returning %s" % result) return result except xmlrpclib.ProtocolError, err: - err_msg = ("A protocol error occurred\n" - "URL: %s\n" - "HTTP/HTTPS headers: %s\n" - "Error code: %d\n" - "Error message: %s\n") % (err.url, err.headers, - err.errcode, err.errmsg) - self.server_logger.error(err_msg) - return (str(err), 0) + err_msg = ("A protocol error occurred\n" + "URL: %s\n" + "HTTP/HTTPS headers: %s\n" + "Error code: %d\n" + "Error message: %s\n") % (err.url, err.headers, + err.errcode, err.errmsg) + self.server_logger.error(err_msg) + return (str(err), 0) except Exception, e: self.server_logger.error(str(e)) return (str(e), 0) diff --git a/vistrails/gui/collection/vis_log.py b/vistrails/gui/collection/vis_log.py index 0ed0f89f5..bea40791b 100644 --- a/vistrails/gui/collection/vis_log.py +++ b/vistrails/gui/collection/vis_log.py @@ -477,7 +477,7 @@ def moduleSelected(self, id, selectedItems): item = self.scene().selectedItems()[0] self.notify_app(self.parentItem, item.execution) elif self.execution != self.parentItem.execution: - self.notify_app(self.parentItem, self.parentItem.execution) + self.notify_app(self.parentItem, self.parentItem.execution) def set_exec_by_id(self, exec_id): if not self.log: diff --git a/vistrails/gui/mashups/mashup_app.py b/vistrails/gui/mashups/mashup_app.py index 26cd2cf56..89e97884e 100644 --- a/vistrails/gui/mashups/mashup_app.py +++ b/vistrails/gui/mashups/mashup_app.py @@ -435,7 +435,7 @@ def auto_update_changed(self, state): cell.hide() def loop_int_changed(self, state): - self.loopButton.setEnabled(False) + self.loopButton.setEnabled(False) def saveAll(self): for w in self.widgets: diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 259a3072d..dba1037ac 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -2693,8 +2693,8 @@ def addPalette(self, palette): def closeDockedPalettes(self): for p in self.palettes: if (p.toolWindow().isVisible() and - not p.toolWindow().isFloating()): - p.toolWindow().close() + not p.toolWindow().isFloating()): + p.toolWindow().close() def closeEvent(self, event): if not QtCore.QCoreApplication.closingDown(): From 62fefa1029a70d7858e2a7000b271f40104b176b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 14:18:26 -0400 Subject: [PATCH 083/194] Removes unused imports from interpreter.noncached --- vistrails/core/interpreter/noncached.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/vistrails/core/interpreter/noncached.py b/vistrails/core/interpreter/noncached.py index 2666b7df4..06c015cb1 100644 --- a/vistrails/core/interpreter/noncached.py +++ b/vistrails/core/interpreter/noncached.py @@ -32,19 +32,11 @@ ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ## ############################################################################### -from vistrails.core import modules -from vistrails.core.common import * -from vistrails.core.data_structures.bijectivedict import Bidict -from vistrails.core.modules.vistrails_module import ModuleConnector, ModuleError -from vistrails.core.utils import DummyView -import copy import vistrails.core.interpreter.base import vistrails.core.interpreter.utils import vistrails.core.vistrail.pipeline import atexit -# from core.modules.module_utils import FilePool - ################################################################################ class Interpreter(vistrails.core.interpreter.cached.CachedInterpreter): From 843c4294c7f19bb4f59991ae6472de4dc75ef90e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 14:36:08 -0400 Subject: [PATCH 084/194] Removes useless 'global' statements --- vistrails/core/application.py | 1 - vistrails/core/configuration.py | 6 ------ vistrails/core/modules/basic_modules.py | 1 - vistrails/core/modules/config.py | 2 -- vistrails/core/modules/module_registry.py | 2 -- vistrails/core/packagemanager.py | 1 - vistrails/gui/application_server.py | 4 ---- vistrails/gui/qt.py | 5 +---- vistrails/gui/theme.py | 2 -- vistrails/gui/vistrails_window.py | 6 ------ 10 files changed, 1 insertion(+), 29 deletions(-) diff --git a/vistrails/core/application.py b/vistrails/core/application.py index aeec4a53a..681fbe670 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -68,7 +68,6 @@ def finalize_vistrails(app): vistrails.core.interpreter.cached.CachedInterpreter.cleanup() def get_vistrails_application(): - global VistrailsApplication if VistrailsApplication is not None: return VistrailsApplication() return None diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 49ba0fecc..823e56d0f 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -784,8 +784,6 @@ def default(): return retval def parse_documentation(): - global _docs - line_iter = iter(_documentation.splitlines()) line_iter.next() for line in line_iter: @@ -800,8 +798,6 @@ def parse_documentation(): _docs[arg_path] = (arg_type, ' '.join(doc_lines)) def parse_simple_docs(): - global _simple_docs - line_iter = iter(_simple_documentation.splitlines()) line = line_iter.next() for line in line_iter: @@ -890,8 +886,6 @@ def __call__(self, parser, namespace, values, option_string=None): return nested_cls def build_command_line_parser(d, parser=None, prefix="", **parser_args): - global _usage_args - # if k is not a command-line-option, skip # if k is show/hide, add --show-, --hide- options # if k is an on/off, add --option, --no-option flags diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index cdce3e518..eff356ff5 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -1258,7 +1258,6 @@ def initialize(*args, **kwargs): # initialize the sub_module modules, too import vistrails.core.modules.sub_module import vistrails.core.modules.output_modules - global _modules _modules.extend(vistrails.core.modules.sub_module._modules) _modules.extend(vistrails.core.modules.output_modules._modules) diff --git a/vistrails/core/modules/config.py b/vistrails/core/modules/config.py index 47d6e5a61..3d2471519 100644 --- a/vistrails/core/modules/config.py +++ b/vistrails/core/modules/config.py @@ -427,8 +427,6 @@ class and should not be used by any other module. """ def parse_documentation(): - global _docs - line_iter = iter(_documentation.splitlines()) line_iter.next() for line in line_iter: diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index ec7d7e8ef..4e4facf83 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -2126,13 +2126,11 @@ def expand_port_spec_string(self, p_string, cur_package=None, # get_descriptor = registry.get_descriptor def get_module_registry(): - global registry if not registry: raise VistrailsInternalError("Registry not constructed yet.") return registry def module_registry_loaded(): - global registry return registry is not None ############################################################################## diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index 9784e9f9b..7259bdfc9 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -868,7 +868,6 @@ def all_reverse_dependencies(self, identifier, dep_graph=None): return self.get_all_dependencies(identifier, True, dep_graph) def get_package_manager(): - global _package_manager if not _package_manager: raise VistrailsInternalError("package manager not constructed yet.") return _package_manager diff --git a/vistrails/gui/application_server.py b/vistrails/gui/application_server.py index 19b23a529..0ae56b24c 100644 --- a/vistrails/gui/application_server.py +++ b/vistrails/gui/application_server.py @@ -87,8 +87,6 @@ class StoppableXMLRPCServer(SimpleXMLRPCServer): """This class allows a server to be stopped by a external request""" #accessList contains the list of ip addresses and hostnames that can send #request to this server. Change this according to your server - global accessList - allow_reuse_address = True def __init__(self, addr, logger): self.logger = logger @@ -2255,7 +2253,6 @@ def init(self, optionsDict=None, args=[]): return True def start_other_instances(self, number): - global virtual_display, script_file self.others = [] host = self.temp_configuration.check('rpcServer') port = self.temp_configuration.check('rpcPort') @@ -2363,7 +2360,6 @@ def start_server(optionsDict=None, args=[]): def stop_server(): """Stop and finalize the application singleton.""" - global VistrailsServer VistrailsServer.save_configuration() VistrailsServer.destroy() VistrailsServer.deleteLater() diff --git a/vistrails/gui/qt.py b/vistrails/gui/qt.py index 70b7a64b1..35199d0b7 100644 --- a/vistrails/gui/qt.py +++ b/vistrails/gui/qt.py @@ -114,11 +114,9 @@ def askForQObjectCreation(): create QObjects. """ - global okToCreateQObjects if not okToCreateQObjects: raise QApplicationNotYetCreated() -global _appHolder _appHolder = None def createBogusQtGuiApp(argv=["bogus"]): @@ -138,8 +136,7 @@ def __init__(self): return _appHolder def destroyBogusQtApp(): - global _appHolder - del _appHolder + _appHolder = None def qt_version(): return [int(i) diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py index 6e015c2dc..76bc2dec9 100644 --- a/vistrails/gui/theme.py +++ b/vistrails/gui/theme.py @@ -735,8 +735,6 @@ def initializeCurrentTheme(): Assign the current theme to the default theme """ - global CurrentTheme - CurrentTheme.setTheme(get_current_theme()) global CurrentTheme diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index dba1037ac..01cf49d62 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -158,8 +158,6 @@ def process_list(self, action_list, parent, qactions, qmenus): callback) def init_action_list(self): - global _app - self._actions = [("file", "&File", [("export", "Export", [('savePDF', "PDF...", @@ -377,7 +375,6 @@ def __init__(self, view=None, parent=None, f=QtCore.Qt.WindowFlags()): self.setWindowTitle('%s - VisTrails' % self.view.get_name()) def close_vistrail(self): - global _app return _app.close_vistrail(self.view) def closeEvent(self, event): @@ -456,7 +453,6 @@ def set_name(self): self.set_title('(empty)') def build_packages_menu_from_main_app(self): - global _app if len(self._package_menu_items) == 0: self.qmenus['packages'].menuAction().setEnabled(True) @@ -473,7 +469,6 @@ def build_packages_menu_from_main_app(self): pkg_menu.addAction(action) def init_action_list(self): - global _app # This keeps track of the menu items for each package self._package_menu_items = {} @@ -831,7 +826,6 @@ def create_actions(self): Construct all menu/toolbar actions for window. """ - global _app # format of each item in the list is: # item: reference, title, options From 756f8e14204ab19ba0f87884ddbdcba91848bac9 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 30 Sep 2014 14:47:09 -0400 Subject: [PATCH 085/194] Fixes unassigned expressions --- vistrails/core/collection/__init__.py | 3 ++- vistrails/core/utils/color.py | 4 ++-- vistrails/gui/collection/workspace.py | 15 ++++++++++++--- vistrails/gui/controlflow_assist.py | 3 ++- vistrails/gui/pipeline_view_select.py | 8 ++++++-- vistrails/gui/vistrail_controller.py | 3 ++- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/vistrails/core/collection/__init__.py b/vistrails/core/collection/__init__.py index 669be9524..c7835f0e9 100644 --- a/vistrails/core/collection/__init__.py +++ b/vistrails/core/collection/__init__.py @@ -84,7 +84,8 @@ def __init__(self, database=None): self.conn = sqlite3.connect(self.database) try: cur = self.conn.cursor() - [cur.execute(s) for s in schema] + for s in schema: + cur.execute(s) self.conn.commit() except Exception, e: debug.critical("Could not create vistrail index schema", e) diff --git a/vistrails/core/utils/color.py b/vistrails/core/utils/color.py index 0b20b3049..d33542a4b 100644 --- a/vistrails/core/utils/color.py +++ b/vistrails/core/utils/color.py @@ -415,9 +415,9 @@ def test_alpha_channel(self): self.assertEquals(ColorByName.get_no_alpha('red'), [1.0, 0.0, 0.0]) self.assertEquals(ColorByName.get('not exist'), - [0.0, 0.0, 0.0, 1.0]), + [0.0, 0.0, 0.0, 1.0]) self.assertEquals(ColorByName.get_no_alpha('another not exist'), - [0.0, 0.0, 0.0]), + [0.0, 0.0, 0.0]) class TestColorConversion(unittest.TestCase): diff --git a/vistrails/gui/collection/workspace.py b/vistrails/gui/collection/workspace.py index 038549119..76a8ed064 100644 --- a/vistrails/gui/collection/workspace.py +++ b/vistrails/gui/collection/workspace.py @@ -1185,7 +1185,10 @@ def state_changed(self, view): item.pe_to_item[pe_entity.url] = childItem item.paramExplorationsItem.setHidden(not len(item.pe_to_item)) - self.make_tree(item) if self.isTreeView else self.make_list(item) + if self.isTreeView: + self.make_tree(item) + else: + self.make_list(item) def execution_updated(self): """ Add new executions to workflow """ @@ -1289,7 +1292,10 @@ def add_vt_window(self, vistrail_window): item.mashupsItem.setHidden(not item.mashupsItem.childCount()) item.paramExplorationsItem.setHidden( not item.paramExplorationsItem.childCount()) - self.make_tree(item) if self.isTreeView else self.make_list(item) + if self.isTreeView: + self.make_tree(item) + else: + self.make_list(item) self.item_changed(item, None) self.updateHideExecutions() @@ -1320,7 +1326,10 @@ def remove_vt_window(self, vistrail_window): if entity and not self.collection.is_temp_entity(entity) and \ not vistrail_window.is_abstraction: item = QVistrailEntityItem(entity) - self.make_tree(item) if self.isTreeView else self.make_list(item) + if self.isTreeView: + self.make_tree(item) + else: + self.make_list(item) self.closedFilesItem.addChild(item) item.setText(0, entity.name) self.updateHideExecutions() diff --git a/vistrails/gui/controlflow_assist.py b/vistrails/gui/controlflow_assist.py index 05d9ee81c..f8c1e7b68 100644 --- a/vistrails/gui/controlflow_assist.py +++ b/vistrails/gui/controlflow_assist.py @@ -159,7 +159,8 @@ def createControlFlow(self, input_ports_info, output_ports_info): # Create and connect InputPort for each of the inputs to force it to exist on group offset = {} - [offset.__setitem__(module, halfwidth+65) for module, portspec, connections, halfwidth in input_ports_info] + for module, portspec, connections, halfwidth in input_ports_info: + offset.__setitem__(module, halfwidth+65) for input_module, input_portspec, input_connections, halfwidth in input_ports_info: # Remove function calls to selected input ports try: diff --git a/vistrails/gui/pipeline_view_select.py b/vistrails/gui/pipeline_view_select.py index eceb7cea1..a21343bb5 100644 --- a/vistrails/gui/pipeline_view_select.py +++ b/vistrails/gui/pipeline_view_select.py @@ -66,8 +66,12 @@ def __init__(self, parent, scene, single_output=False, include_module_ids=[]): if include_module_ids: # Remove modules not in the include list and associated connections sel_modules, sel_connections = scene_copy.get_selected_item_ids() - [scene_copy.remove_module(m_id) for m_id in sel_modules if m_id not in include_module_ids] - [scene_copy.remove_connection(c_id) for c_id in sel_connections if c_id not in scene_copy.get_selected_item_ids()[1]] + for m_id in sel_modules: + if m_id not in include_module_ids: + scene_copy.remove_module(m_id) + for c_id in sel_connections: + if c_id not in scene_copy.get_selected_item_ids()[1]: + scene_copy.remove_connection(c_id) # Hide configure button on modules for item in scene_copy.selectedItems(): if isinstance(item, QGraphicsModuleItem): diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index bf41c9d0d..bff16a813 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -1303,7 +1303,8 @@ def write_init(save_dir, found_attrs, found_lists, attrs, lists): if abstraction.is_abstraction() and \ abstraction.package == abstraction_pkg: abstractions.append(abstraction) - [abstractions.extend(v) for v in self.find_abstractions(abstraction.vistrail).itervalues()] + for v in self.find_abstractions(abstraction.vistrail).itervalues(): + abstractions.extend(v) pkg_subworkflows = [] pkg_dependencies = set() for abstraction in abstractions: From 0171f96a6df07e6afd4ce2ee4d8ac6ceccb38454 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 25 Jul 2014 23:36:10 +0200 Subject: [PATCH 086/194] Show function values as tooltip when holding Ctrl gui/pipeline_view.py: - QGraphicsModuleItem.__init__: call setAcceptHoverEvents New attribute function_overview - QGraphicsModuleItem.updateFunctionPorts: Create a html tooltip showing function values - QGraphicsModuleItem.hoverEnterEvent: *new Show function_overview as tooltip Note that this overwrites errorTrace tooltips --- vistrails/gui/pipeline_view.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 0e4a29bdc..a77d7a0f4 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1037,6 +1037,7 @@ def __init__(self, parent=None, scene=None): else: self.setFlags(QtGui.QGraphicsItem.ItemIsSelectable | QtGui.QGraphicsItem.ItemIsMovable) + self.setAcceptHoverEvents(True) self.setZValue(0) self.labelFont = CurrentTheme.MODULE_FONT self.labelFontMetric = CurrentTheme.MODULE_FONT_METRIC @@ -1069,6 +1070,7 @@ def __init__(self, parent=None, scene=None): self.progressBrush = CurrentTheme.SUCCESS_MODULE_BRUSH self.connectionItems = {} self._cur_function_names = set() + self.function_overview = 'No functions set' self.handlePositionChanges = True def moduleHasChanged(self, core_module): @@ -1165,6 +1167,24 @@ def update_function_ports(self, core_module=None): if item is not None: item.connect() + if core_module.functions: + function_overview = [] + for f in core_module.functions: + if len(f.params)>1: + params = ', '.join([p.strValue for p in f.params]) + elif len(f.params)>0: + params = f.params[0].strValue + else: + params = '' + if len(params)>100: + params = params[:97] + '...' + function_template = "%s(%s)" + function_overview.append(function_template % (f.name, params)) + template = '%s' + self.function_overview = template % '
'.join(function_overview) + else: + self.function_overview = 'No functions set' + self.module = core_module def setProgress(self, progress): @@ -1762,6 +1782,13 @@ def mouseReleaseEvent(self, event): if not self.controller.changed and self.controller.has_move_actions(): self.controller.set_changed(True) + def hoverEnterEvent(self, event): + if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier: + QtGui.QToolTip.hideText() + QtGui.QToolTip.showText(event.screenPos(), self.function_overview) + self.setToolTip(self.function_overview) + return QtGui.QGraphicsItem.hoverEnterEvent(self, event) + def itemChange(self, change, value): """ itemChange(change: GraphicsItemChange, value: value) -> value Capture move event to also move the connections. Also unselect any From 5e83501385740f40e843947733effcb34b98eec8 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 29 Jul 2014 00:17:31 +0200 Subject: [PATCH 087/194] Replaced functions tooltip with QGraphicsText Using QGraphicsText is more consistent and faster to hover We may also want an option to show functions for all modules simultaneously e.g. to ge a full provenance pdf gui/pipeline_view.py --- vistrails/gui/pipeline_view.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index a77d7a0f4..40f0c7ebb 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1071,6 +1071,7 @@ def __init__(self, parent=None, scene=None): self.connectionItems = {} self._cur_function_names = set() self.function_overview = 'No functions set' + self.function_widget = None self.handlePositionChanges = True def moduleHasChanged(self, core_module): @@ -1180,7 +1181,7 @@ def update_function_ports(self, core_module=None): params = params[:97] + '...' function_template = "%s(%s)" function_overview.append(function_template % (f.name, params)) - template = '%s' + template = '

%s

' self.function_overview = template % '
'.join(function_overview) else: self.function_overview = 'No functions set' @@ -1784,11 +1785,23 @@ def mouseReleaseEvent(self, event): def hoverEnterEvent(self, event): if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier: - QtGui.QToolTip.hideText() - QtGui.QToolTip.showText(event.screenPos(), self.function_overview) - self.setToolTip(self.function_overview) + if self.function_widget: + self.scene().removeItem(self.function_widget) + self.function_widget = QtGui.QGraphicsTextItem() + pos = self.abstRect.bottomLeft()+self.pos() + self.function_widget.setPos(pos) + self.function_widget.setAcceptHoverEvents(False) + self.scene().addItem(self.function_widget) + self.function_widget.setHtml(self.function_overview) + self.function_widget.setZValue(1000000) return QtGui.QGraphicsItem.hoverEnterEvent(self, event) + def hoverLeaveEvent(self, event): + if self.function_widget: + self.scene().removeItem(self.function_widget) + self.function_widget = None + return QtGui.QGraphicsItem.hoverLeaveEvent(self, event) + def itemChange(self, change, value): """ itemChange(change: GraphicsItemChange, value: value) -> value Capture move event to also move the connections. Also unselect any From 4113f7a8aee9ec8eac85d9c454b006869d22c207 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 31 Jul 2014 19:21:36 +0200 Subject: [PATCH 088/194] Edit constant values on module in pipeline Added ability to use the edit widget for constant modules directly on the module in the pipeline view. TODO * Improve layout * Create graphicsitem versions of constant edit widgets * Improve wrapping of graphicsitem widgets * Allow showing edit widgets on select parameters on non-constant modules * Fix dot error on uninitialized transferfunction gui/pipeline_view.py: - setupModule: Add edit widget on module if it is a constant module. GraphicsModule now handle its own key presses and focus. vtk transferfunction is added as an GraphicsWidget. Others are added using QGraphicsProxy, and may look pixelated. packages/vtk/tf_widget.py: Moved logic from scene to graphicswidget so that it can be added the pipelinescene directly. --- vistrails/gui/pipeline_view.py | 109 ++++++++++++++-- vistrails/packages/vtk/tf_widget.py | 186 +++++++++++++++------------- 2 files changed, 202 insertions(+), 93 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 40f0c7ebb..89208f8b6 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -67,6 +67,8 @@ QGraphicsItemInterface) from vistrails.gui.module_info import QModuleInfo from vistrails.gui.module_palette import QModuleTreeWidget +from vistrails.gui.modules.utils import get_widget_class +from vistrails.gui.ports_pane import Parameter from vistrails.gui.theme import CurrentTheme from vistrails.gui.utils import getBuilderWindow from vistrails.gui.variable_dropbox import QDragVariableLabel @@ -1038,6 +1040,7 @@ def __init__(self, parent=None, scene=None): self.setFlags(QtGui.QGraphicsItem.ItemIsSelectable | QtGui.QGraphicsItem.ItemIsMovable) self.setAcceptHoverEvents(True) + self.setFlag(self.ItemIsFocusable) self.setZValue(0) self.labelFont = CurrentTheme.MODULE_FONT self.labelFontMetric = CurrentTheme.MODULE_FONT_METRIC @@ -1051,6 +1054,7 @@ def __init__(self, parent=None, scene=None): self.labelRect = QtCore.QRectF() self.descRect = QtCore.QRectF() self.abstRect = QtCore.QRectF() + self.editRect = QtCore.QRectF() self.id = -1 self.label = '' self.description = '' @@ -1072,6 +1076,8 @@ def __init__(self, parent=None, scene=None): self._cur_function_names = set() self.function_overview = 'No functions set' self.function_widget = None + self.value_edit = None + self.edit_rect = QtCore.QRectF(0.0, 0.0, 0.0, 0.0) self.handlePositionChanges = True def moduleHasChanged(self, core_module): @@ -1187,6 +1193,10 @@ def update_function_ports(self, core_module=None): self.function_overview = 'No functions set' self.module = core_module + if self.value_edit: + for f in self.module.functions: + if f.name == 'value': + self.value_edit.setContents(f.parameters[0].strValue) def setProgress(self, progress): self.progress = progress @@ -1206,18 +1216,25 @@ def computeBoundingRect(self): else: descRect = QtCore.QRectF(0, 0, 0, 0) + edit_width = int(self.edit_rect.width()) + 4 + if edit_width: + labelRect = labelRect.united( + QtCore.QRect(0, 0, + int(edit_width) - + CurrentTheme.MODULE_LABEL_MARGIN[0]*2, 0)) + labelRect.translate(-labelRect.center().x(), -labelRect.center().y()) self.paddedRect = QtCore.QRectF( labelRect.adjusted(-CurrentTheme.MODULE_LABEL_MARGIN[0], -CurrentTheme.MODULE_LABEL_MARGIN[1] - -descRect.height()/2, + -descRect.height()/2-self.edit_rect.height()/2, CurrentTheme.MODULE_LABEL_MARGIN[2], CurrentTheme.MODULE_LABEL_MARGIN[3] - +descRect.height()/2)) + +descRect.height()/2+self.edit_rect.height()/2)) self.labelRect = QtCore.QRectF( self.paddedRect.left(), - -(labelRect.height()+descRect.height())/2, + -(labelRect.height()+descRect.height()+self.edit_rect.height())/2, self.paddedRect.width(), labelRect.height()) self.descRect = QtCore.QRectF( @@ -1225,6 +1242,11 @@ def computeBoundingRect(self): self.labelRect.bottom(), self.paddedRect.width(), descRect.height()) + self.editRect = QtCore.QRectF( + self.paddedRect.left()+2, + self.descRect.bottom(), + self.paddedRect.width(), + self.edit_rect.height()) self.abstRect = QtCore.QRectF( self.paddedRect.left(), -self.labelRect.top()-CurrentTheme.MODULE_PORT_MARGIN[3], @@ -1416,7 +1438,7 @@ def adjustWidthToMin(self, minWidth): diff = minWidth - self.paddedRect.width() + 1 self.paddedRect.adjust(-diff/2, 0, diff/2, 0) - def setupModule(self, module): + def setupModule(self, module, read_only=False): """ setupModule(module: Module) -> None Set up the item to reflect the info in 'module' @@ -1432,6 +1454,48 @@ def setupModule(self, module): else: self.label = module.label self.description = '' + + if module.is_valid and not read_only and get_module_registry( + ).is_constant_module(self.module.module_descriptor.module): + desc = self.module.module_descriptor + Widget = get_widget_class(desc) + self.edit_widget = Widget + param = Parameter(desc) + for function in self.module.functions: + if function.name == 'value': + param = function.parameters[0] + if hasattr(Widget, 'GraphicsItem'): + self.value_edit = Widget.GraphicsItem(param, self) + # resize to 150 + rect = self.value_edit.boundingRect() + self.value_edit.setZValue(self.zValue()+0.2) + bg = QtGui.QGraphicsRectItem(rect, self.value_edit) + # TODO COLOR + bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) + bg.setZValue(-1) + scale = max(rect.width(), rect.height()) + transform = self.value_edit.transform() + # transfer function needs to be inverted right now + transform.scale(150.0/scale,-150.0/scale) + transform.translate(0, -rect.height()) + self.value_edit.setTransform(transform) + rect.setSize(rect.size()*150.0/scale) + rect.setHeight(rect.height()+5) + self.edit_rect = rect + else: + self.value_edit = Widget(param) + self.value_edit.setMaximumSize(150, 150) + proxy = QtGui.QGraphicsProxyWidget(self) + proxy.setWidget(self.value_edit) + rect = proxy.boundingRect() + rect.moveTo(0.0,0.0) + rect.setHeight(rect.height()+5) + self.edit_rect = rect + self.value_edit.connect(self.value_edit, + QtCore.SIGNAL('contentsChanged'), + self.value_changed) + + self.setToolTip(self.description) self.computeBoundingRect() self.setPos(module.center.x, -module.center.y) @@ -1538,9 +1602,25 @@ def setupModule(self, module): error = e self.update_function_ports() + + if self.value_edit: + if hasattr(self.edit_widget, 'GraphicsItem'): + self.value_edit.setPos(self.editRect.topLeft()) + else: + proxy.setPos(self.editRect.topLeft()) + else: self.setInvalid(True) - + + def value_changed(self, values): + widget, value = values + controller = self.scene().controller + controller.update_function(self.module, 'value', [value]) + self.update_function_ports(controller.current_pipeline.modules[self.module.id]) + if self.isSelected(): + from vistrails.gui.vistrails_window import _app + _app.notify('module_changed', self.module) + def create_shape_from_fringe(self, fringe): left_fringe, right_fringe = fringe if left_fringe[0] != (0.0, 0.0): @@ -1778,6 +1858,19 @@ def dependingConnectionItemsWithDir(self): else: yield (item, True) + def keyPressEvent(self, event): + """ keyPressEvent(event: QKeyEvent) -> None + Capture 'Del', 'Backspace' for deleting modules. + Ctrl+C, Ctrl+V, Ctrl+A for copy, paste and select all + + """ + if (self.scene().controller and + event.key() in [QtCore.Qt.Key_Backspace, QtCore.Qt.Key_Delete]): + if not self.scene().read_only_mode: + self.scene().delete_selected_items() + else: + QtGui.QGraphicsItem.keyPressEvent(self, event) + def mouseReleaseEvent(self, event): super(QGraphicsModuleItem, self).mouseReleaseEvent(event) if not self.controller.changed and self.controller.has_move_actions(): @@ -2626,7 +2719,7 @@ def add_tmp_module(self, desc): namespace=desc.namespace, ) module.is_valid = True - self.tmp_module_item.setupModule(module) + self.tmp_module_item.setupModule(module, True) self.addItem(self.tmp_module_item) self.tmp_module_item.hide() self.tmp_module_item.update() @@ -2763,8 +2856,8 @@ def keyPressEvent(self, event): Capture 'Del', 'Backspace' for deleting modules. Ctrl+C, Ctrl+V, Ctrl+A for copy, paste and select all - """ - if (self.controller and + """ + if (not self.focusItem() and self.controller and event.key() in [QtCore.Qt.Key_Backspace, QtCore.Qt.Key_Delete]): if not self.read_only_mode: self.delete_selected_items() diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index f1993dda3..028ac1178 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -175,7 +175,7 @@ def serialize(self, node=None): return ElementTree.tostring(node) - @staticmethod + @staticmethod def parse(strNode): """parse(strNode: str) -> TransferFunction Parses a string representing a TransferFunction and returns a @@ -261,7 +261,7 @@ def keyPressEvent(self, event): def refresh(self): dx = self._fsx * 0.025 / self._sx - dy = self._fsy * 0.025/ self._sy + dy = self._fsy * 0.025 / self._sy # this is the setup self.setBrush(QtGui.QBrush(self._color)) self.setRect(-dx, @@ -303,8 +303,8 @@ def itemChange(self, change, value): self._left_line.refresh() if self._right_line: self._right_line.refresh() - if self.scene(): - self.scene()._tf_poly.setup() + if self.parentItem(): + self.parentItem()._tf_poly.setup() self.setToolTip("Double-click to change color\n" "Right-click to remove point\n" "Scalar: %.5f, Opacity: %.5f" % (self._scalar, @@ -316,15 +316,15 @@ def remove_self(self): if not self._left_line or not self._right_line: # Ignore, self is a corner node that can't be removed return - + # Removes the right line and self, re-ties data structure self._left_line._point_right = self._right_line._point_right self._left_line._point_right._left_line = self._left_line - + # be friends with garbage collector self._right_line._point_left = None self._right_line._point_right = None - self.scene()._tf_poly.setup() + self.parentItem()._tf_poly.setup() self.scene().removeItem(self._right_line) self.scene().removeItem(self) self._left_line.refresh() @@ -339,8 +339,10 @@ def mouseDoubleClickEvent(self, event): if self._right_line: self._right_line.refresh() self.refresh() - self.scene()._tf_poly.setup() - QtGui.QGraphicsEllipseItem.mouseDoubleClickEvent(self, event) + # sometimes the graphicsitem gets recreated, and we need to abort + if self.parentItem(): + self.parentItem()._tf_poly.setup() + QtGui.QGraphicsEllipseItem.mouseDoubleClickEvent(self, event) def mousePressEvent(self, event): if event.button() == QtCore.Qt.RightButton: @@ -348,18 +350,18 @@ def mousePressEvent(self, event): self.remove_self() else: QtGui.QGraphicsEllipseItem.mousePressEvent(self, event) - + def paint(self, painter, option, widget=None): """ paint(painter: QPainter, option: QStyleOptionGraphicsItem, widget: QWidget) -> None Peform painting of the point without the ugly default dashed-line black square - + """ painter.setBrush(self.brush()) painter.setPen(self.pen()) painter.drawEllipse(self.rect()) - + def add_self_to_transfer_function(self, tf): tf.add_point(self._scalar, self._opacity, @@ -369,16 +371,15 @@ def add_self_to_transfer_function(self, tf): class TransferFunctionPolygon(QtGui.QGraphicsPolygonItem): - def __init__(self): - QtGui.QGraphicsPolygonItem.__init__(self) + def __init__(self, scene, parent=None): + QtGui.QGraphicsPolygonItem.__init__(self, parent, scene) def setup(self): # This inspects the scene, finds the left-most point, and # then builds the polygon traversing the linked list structure - if not self.scene(): + pt = self.parentItem().get_leftmost_point() + if not pt: return - pt = self.scene().get_leftmost_point() - first_pt = pt self.setZValue(1.25) g = QtGui.QLinearGradient() g.setStart(0.0, 0.5) @@ -468,7 +469,7 @@ def refresh(self): self.setup(self._sx, self._sy) def mouseDoubleClickEvent(self, event): - p = event.scenePos() + p = event.pos() c_left = self._point_left._color c_right = self._point_right._color u = ((p.x() - self._point_left._point.x()) / @@ -476,12 +477,12 @@ def mouseDoubleClickEvent(self, event): new_c = (u * c_right.redF() + (1-u) * c_left.redF(), u * c_right.greenF() + (1-u) * c_left.greenF(), u * c_right.blueF() + (1-u) * c_left.blueF()) - new_point = TransferFunctionPoint(p.x()/ self._fsx, p.y()/self._fsy, new_c) - new_line = TransferFunctionLine(new_point, self._point_right) + new_point = TransferFunctionPoint(p.x()/ self._fsx, p.y()/self._fsy, new_c, self.parentItem()) + self.parentItem()._tf_items.append(new_point) + new_line = TransferFunctionLine(new_point, self._point_right, self.parentItem()) + self.parentItem()._tf_items.append(new_line) new_point._left_line = self self._point_right = new_point - self.scene().addItem(new_line) - self.scene().addItem(new_point) new_line.update_scale(self._point_left._sx, self._point_left._sy) new_point.update_scale(self._point_left._sx, @@ -493,21 +494,25 @@ def mousePressEvent(self, event): # This needs to be here, otherwise mouseDoubleClickEvent does # not get called. event.accept() - ############################################################################## # Scene, view, widget -class TransferFunctionScene(QtGui.QGraphicsScene): +class QGraphicsTransferFunction(QtGui.QGraphicsWidget, ConstantWidgetMixin): - def __init__(self, tf, parent=None): - QtGui.QGraphicsScene.__init__(self, parent) + def __init__(self, param, parent=None): + QtGui.QGraphicsWidget.__init__(self, parent) + ConstantWidgetMixin.__init__(self, param.strValue) + self.setAcceptHoverEvents(True) + if not param.strValue: + self._tf = copy.copy(default_tf) + else: + self._tf = TransferFunction.parse(param.strValue) self._tf_items = [] - poly = TransferFunctionPolygon() + poly = TransferFunctionPolygon(self.scene(), self) poly.setup() self._tf_poly = poly - self.addItem(poly) - self.create_tf_items(tf) + self.create_tf_items(self._tf) self._tf_poly.setup() #current scale self._sx = 1.0 @@ -519,54 +524,45 @@ def __init__(self, tf, parent=None): QtCore.QPointF(GLOBAL_SCALE, 0.0), QtCore.QPointF(GLOBAL_SCALE, GLOBAL_SCALE), QtCore.QPointF(0.0, GLOBAL_SCALE)] - outline = QtGui.QPolygonF(ps) - self.addPolygon(outline, pen) + polygon = QtGui.QGraphicsPolygonItem(QtGui.QPolygonF(ps), self) + polygon.setPen(pen) for i in xrange(51): u = GLOBAL_SCALE * float(i) / 50.0 - self.addLine(QtCore.QLineF(u, 0.0, u, GLOBAL_SCALE), pen) - self.addLine(QtCore.QLineF(0.0, u, GLOBAL_SCALE, u), pen) + + line = QtGui.QGraphicsLineItem(QtCore.QLineF(u, 0.0, u, GLOBAL_SCALE), self) + line.setPen(pen) + line = QtGui.QGraphicsLineItem(QtCore.QLineF(0.0, u, GLOBAL_SCALE, u), self) + line.setPen(pen) + + self.setGeometry(self.boundingRect()) + + def boundingRect(self): + return QtCore.QRectF(0.0, 0.0, GLOBAL_SCALE, GLOBAL_SCALE) def reset_transfer_function(self, tf): self.create_tf_items(tf) self.update_scale(self._sx, self._sy) self._tf_poly.setup() - def removeItem(self, item): - if item in self._tf_items: - self._tf_items.remove(item) - QtGui.QGraphicsScene.removeItem(self, item) - - def addItem(self, item): - # Ugly, but hey - if isinstance(item, TransferFunctionLine) or \ - isinstance(item, TransferFunctionPoint): - self._tf_items.append(item) - QtGui.QGraphicsScene.addItem(self, item) - def create_tf_items(self, tf): items = copy.copy(self._tf_items) for item in items: - self.removeItem(item) + self.scene().removeItem(item) self._tf_items = [] if len(tf._pts) == 0: - pt_left = TransferFunctionPoint(0.0, 0.0, (0.0, 0.0, 0.0)) - pt_right = TransferFunctionPoint(1.0, 0.0, (0.0, 0.0, 0.0)) - line = TransferFunctionLine(pt_left, pt_right) - - self.addItem(pt_left) - self.addItem(pt_right) - self.addItem(line) - + pt_left = TransferFunctionPoint(0.0, 0.0, (0.0, 0.0, 0.0), self) + self._tf_items.append(pt_left) + pt_right = TransferFunctionPoint(1.0, 0.0, (0.0, 0.0, 0.0), self) + self._tf_items.append(pt_right) + self._tf_items.append(TransferFunctionLine(pt_left, pt_right, self)) else: - pts = [TransferFunctionPoint(*pt) + pts = [TransferFunctionPoint(*pt, parent=self) for pt in tf._pts] - lines = [TransferFunctionLine(pt_l, pt_r) - for (pt_l, pt_r) in zip(pts[:-1], pts[1:])] - for pt in pts: - self.addItem(pt) - for line in lines: - self.addItem(line) + self._tf_items.extend(pts) + lns = [TransferFunctionLine(pt_l, pt_r, self) + for (pt_l, pt_r) in zip(pts[:-1], pts[1:])] + self._tf_items.extend(lns) def add_knot(self, scalar, opacity): pass @@ -584,8 +580,7 @@ def get_leftmost_point(self): if hasattr(item, '_left_line') and not item._left_line: pt = item break - assert pt - return pt + return pt def get_transfer_function(self): result = TransferFunction() @@ -598,6 +593,29 @@ def get_transfer_function(self): break return result + def contents(self): + return self.get_transfer_function().serialize() + + def setContents(self, strValue, silent=True): + if not strValue: + self._tf = copy.copy(default_tf) + else: + self._tf = TransferFunction.parse(strValue) + self.reset_transfer_function(self._tf) + if not silent: + self.update_parent() + + def hoverLeaveEvent(self, event): + self.update_parent() + QtGui.QGraphicsWidget.hoverLeaveEvent(self, event) + +class TransferFunctionScene(QtGui.QGraphicsScene): + + def __init__(self, param, parent=None): + QtGui.QGraphicsScene.__init__(self, parent) + self.tf = QGraphicsTransferFunction(param) + self.addItem(self.tf) + class TransferFunctionView(QtGui.QGraphicsView): def __init__(self, parent=None): QtGui.QGraphicsView.__init__(self, parent) @@ -609,7 +627,7 @@ def resizeEvent(self, event): self.resetMatrix() self.setMatrix(QtGui.QMatrix(event.size().width() / (GLOBAL_SCALE *10.0/9) , 0, 0, -event.size().height() / (GLOBAL_SCALE*10.0/9), 0, 0)) - self.scene().update_scale(event.size().width()/(2000.0/9), event.size().height()/(2000.0/9)) + self.scene().tf.update_scale(event.size().width()/(2000.0/9), event.size().height()/(2000.0/9)) def focusOutEvent(self, event): self.parent().update_parent() @@ -618,17 +636,15 @@ def focusOutEvent(self, event): default_tf = TransferFunction() default_tf.add_point(0.0, 0.0, (0.0, 0.0, 0.0)) default_tf.add_point(1.0, 0.0, (0.0, 0.0, 0.0)) - + class TransferFunctionWidget(QtGui.QWidget, ConstantWidgetMixin): + GraphicsItem = QGraphicsTransferFunction + def __init__(self, param, parent=None): QtGui.QWidget.__init__(self, parent) - ConstantWidgetMixin.__init__(self, param.strValue) - if not param.strValue: - self._tf = copy.copy(default_tf) - else: - self._tf = TransferFunction.parse(param.strValue) - self._scene = TransferFunctionScene(self._tf, self) + self._scene = TransferFunctionScene(param, self) + self._scene.tf.update_parent = self.update_parent layout = QtGui.QVBoxLayout() self.setLayout(layout) self._view = TransferFunctionView(self) @@ -648,17 +664,17 @@ def __init__(self, param, parent=None): layout.addWidget(caption) def contents(self): - return self._scene.get_transfer_function().serialize() - + return self._scene.tf.contents() + def setContents(self, strValue, silent=True): - if not strValue: - self._tf = copy.copy(default_tf) - else: - self._tf = TransferFunction.parse(strValue) - self._scene.reset_transfer_function(self._tf) - if not silent: - self.update_parent() - + self._scene.tf.setContents(strValue, silent) + + def set_last_contents(self, contents): + self._scene.tf._last_contents = contents + def get_last_contents(self): + return self._scene.tf._last_contents + _last_contents = property(get_last_contents, set_last_contents) + ############################################################################## # Helper module to adjust range @@ -679,18 +695,18 @@ def compute(self): (new_tf._min_range, new_tf._max_range) = output.GetScalarRange() else: (new_tf._min_range, new_tf._max_range) = self.get_input('Range') - + self.set_output('TransferFunction', new_tf) (of,cf) = new_tf.get_vtk_transfer_functions() - + of_module = reg.get_descriptor_by_name(vtk_pkg_identifier, 'vtkPiecewiseFunction').module() of_module.vtkInstance = of - + cf_module = reg.get_descriptor_by_name(vtk_pkg_identifier, 'vtkColorTransferFunction').module() cf_module.vtkInstance = cf - + self.set_output('vtkPicewiseFunction', of_module) self.set_output('vtkColorTransferFunction', cf_module) From c48a9c37477e0a9673dae140772b5cfb1a3dc55d Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 12 Aug 2014 22:39:46 +0200 Subject: [PATCH 089/194] Added buttons to toggle visibility of type and port visibility icon gui/module_info.py: Added portVisibility and typeVisibility buttons gui/ports_pane.py: Use portVisibility and typeVisibility options --- vistrails/gui/module_info.py | 51 +++++++++++++++++++++++++++++++++++- vistrails/gui/ports_pane.py | 19 +++++++++----- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index 8be9ecb6e..cf9f29114 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -34,7 +34,7 @@ ############################################################################### from PyQt4 import QtCore, QtGui -from vistrails.core.system import systemType +from vistrails.core.system import systemType, vistrails_root_directory from vistrails.core.utils import versions_increasing from vistrails.gui.common_widgets import QDockPushButton from vistrails.gui.module_annotation import QModuleAnnotationTable @@ -42,15 +42,61 @@ from vistrails.gui.version_prop import QVersionProp from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface +import os + class QModuleInfo(QtGui.QWidget, QVistrailsPaletteInterface): def __init__(self, parent=None, flags=QtCore.Qt.Widget): QtGui.QWidget.__init__(self, parent, flags) + self.portsVisible = True + self.typesVisible = True self.build_widget() self.controller = None self.module = None self.pipeline_view = None # pipeline_view self.read_only = False self.is_updating = False + self.addButtonsToToolbar() + + def addButtonsToToolbar(self): + # button for toggling executions + eye_open_icon = \ + QtGui.QIcon(os.path.join(vistrails_root_directory(), + 'gui/resources/images/eye.png')) + + self.portVisibilityAction = QtGui.QAction(eye_open_icon, + "Show/hide port visibility toggle buttons", + None, + triggered=self.showPortVisibility) + self.portVisibilityAction.setCheckable(True) + self.portVisibilityAction.setChecked(True) + self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, + self.portVisibilityAction) + # build a 'T' icon + pixmap = QtGui.QPixmap(48,48) + pixmap.fill(QtCore.Qt.transparent) + painter = QtGui.QPainter(pixmap) + painter.setPen(QtGui.QColor(0, 0, 0, 255)) + font = painter.font() + font.setPointSize(40) + painter.setFont(font) + painter.drawText(0, 0, 48, 48, QtCore.Qt.AlignCenter, 'T') + painter.end() + self.showTypesAction = QtGui.QAction(QtGui.QIcon(pixmap), + "Show/hide type information", + None, + triggered=self.showTypes) + self.showTypesAction.setCheckable(True) + self.showTypesAction.setChecked(True) + self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, + self.showTypesAction) + + def showPortVisibility(self, checked): + self.portsVisible = checked + self.update_module(self.module) + + def showTypes(self, checked): + self.typesVisible = checked + self.update_module(self.module) def build_widget(self): name_label = QtGui.QLabel("Name:") @@ -149,6 +195,9 @@ def set_controller(self, controller): self.update_module() def update_module(self, module=None): + for plist in self.ports_lists: + plist.typesVisible = self.typesVisible + plist.portsVisible = self.portsVisible self.module = module for ports_list in self.ports_lists: ports_list.update_module(module) diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index e757583db..fecff7149 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -142,11 +142,12 @@ class ParameterEntry(QtGui.QTreeWidgetItem): 'gui/resources/images/plus.png')) minus_icon = QtGui.QIcon(os.path.join(vistrails_root_directory(), 'gui/resources/images/minus.png')) - def __init__(self, port_spec, function=None, parent=None): + def __init__(self, port_spec, function=None, types_visible=True, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent) self.setFirstColumnSpanned(True) self.port_spec = port_spec self.function = function + self.types_visible = types_visible def build_widget(self, widget_accessor, with_alias=True): reg = get_module_registry() @@ -224,7 +225,9 @@ def add_method(): else: obj = Parameter(psi.descriptor) obj.port_spec_item = psi - if with_alias: + if not self.types_visible: + label = QtGui.QLabel('') + elif with_alias: label = AliasLabel(obj.alias, obj.type, psi.label) self.my_labels.append(label) else: @@ -368,6 +371,8 @@ def __init__(self, port_type, parent=None): self.module = None self.port_spec_items = {} self.entry_klass = ParameterEntry + self.portsVisible = True + self.typesVisible = True def setReadOnly(self, read_only): self.setEnabled(not read_only) @@ -384,6 +389,7 @@ def update_module(self, module): # this is strange but if you try to clear the widget when the focus is # in one of the items (after setting a parameter for example), # VisTrails crashes on a Mac (Emanuele) This is probably a Qt bug + self.setColumnHidden(0, not self.portsVisible) w = QtGui.QApplication.focusWidget() if self.isAncestorOf(w): w.clearFocus() @@ -420,11 +426,12 @@ def update_module(self, module): if not function.is_valid: continue port_spec, item = self.port_spec_items[function.name] - subitem = self.entry_klass(port_spec, function) + subitem = self.entry_klass(port_spec, function, + self.typesVisible) self.function_map[function.real_id] = subitem item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 0, subitem.get_widget()) + self.setItemWidget(subitem, 1, subitem.get_widget()) item.setExpanded(True) # self.setItemWidget(item, 0, item.get_visible()) @@ -502,7 +509,7 @@ def update_module(self, module): self.function_map[function.real_id] = subitem item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 0, subitem.get_widget()) + self.setItemWidget(subitem, 1, subitem.get_widget()) item.setExpanded(True) def item_clicked(self, item, col): @@ -600,7 +607,7 @@ def do_add_method(self, port_spec, item): subitem = self.entry_klass(port_spec) item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 0, subitem.get_widget()) + self.setItemWidget(subitem, 1, subitem.get_widget()) item.setExpanded(True) if len(port_spec.descriptors()) == 0: self.update_method(subitem, port_spec.name, [], []) From 22d1703d0356ee2040cffaf68ede494c04d975f0 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 13 Aug 2014 12:14:32 +0200 Subject: [PATCH 090/194] Removed leftover space when hiding parameter type gui/ports_pane.py --- vistrails/gui/ports_pane.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index fecff7149..bb0f671bd 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -225,17 +225,18 @@ def add_method(): else: obj = Parameter(psi.descriptor) obj.port_spec_item = psi - if not self.types_visible: - label = QtGui.QLabel('') - elif with_alias: - label = AliasLabel(obj.alias, obj.type, psi.label) - self.my_labels.append(label) - else: - label = QtGui.QLabel(obj.type) + + if self.types_visible: + if with_alias: + label = AliasLabel(obj.alias, obj.type, psi.label) + self.my_labels.append(label) + else: + label = QtGui.QLabel(obj.type) + layout.addWidget(label, i, 0) + layout.setAlignment(label, QtCore.Qt.AlignLeft) + param_widget = widget_class(obj, self.group_box) self.my_widgets.append(param_widget) - layout.addWidget(label, i, 0) - layout.setAlignment(label, QtCore.Qt.AlignLeft) layout.addWidget(param_widget, i, 1) layout.addItem(QtGui.QSpacerItem(0,0, QtGui.QSizePolicy.MinimumExpanding), i, 2) From fb81f43696bc2674110935808d2f891c80ae0aa2 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 14 Aug 2014 12:38:47 +0200 Subject: [PATCH 091/194] Added non-functional temporary "edits visible" button to module-info tab --- vistrails/core/vistrail/module.py | 2 + vistrails/gui/module_info.py | 40 ++++++++------ vistrails/gui/ports_pane.py | 92 +++++++++++++++++++++++-------- 3 files changed, 94 insertions(+), 40 deletions(-) diff --git a/vistrails/core/vistrail/module.py b/vistrails/core/vistrail/module.py index 81f3cd8e7..940e511bd 100644 --- a/vistrails/core/vistrail/module.py +++ b/vistrails/core/vistrail/module.py @@ -83,6 +83,7 @@ def set_defaults(self, other=None): self.portVisible = set() self.visible_input_ports = set() self.visible_output_ports = set() + self.editable_input_ports = set() self.connected_input_ports = {} self.connected_output_ports = {} self.is_valid = False @@ -96,6 +97,7 @@ def set_defaults(self, other=None): self.portVisible = copy.copy(other.portVisible) self.visible_input_ports = copy.copy(other.visible_input_ports) self.visible_output_ports = copy.copy(other.visible_output_ports) + self.editable_input_ports = copy.copy(other.editable_input_ports) self.connected_input_ports = copy.copy(other.connected_input_ports) self.connected_output_ports = \ copy.copy(other.connected_output_ports) diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index cf9f29114..40b074579 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -38,7 +38,7 @@ from vistrails.core.utils import versions_increasing from vistrails.gui.common_widgets import QDockPushButton from vistrails.gui.module_annotation import QModuleAnnotationTable -from vistrails.gui.ports_pane import PortsList +from vistrails.gui.ports_pane import PortsList, letterIcon from vistrails.gui.version_prop import QVersionProp from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface @@ -47,8 +47,9 @@ class QModuleInfo(QtGui.QWidget, QVistrailsPaletteInterface): def __init__(self, parent=None, flags=QtCore.Qt.Widget): QtGui.QWidget.__init__(self, parent, flags) - self.portsVisible = True - self.typesVisible = True + self.ports_visible = True + self.types_visible = True + self.edits_visible = False self.build_widget() self.controller = None self.module = None @@ -71,17 +72,7 @@ def addButtonsToToolbar(self): self.portVisibilityAction.setChecked(True) self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, self.portVisibilityAction) - # build a 'T' icon - pixmap = QtGui.QPixmap(48,48) - pixmap.fill(QtCore.Qt.transparent) - painter = QtGui.QPainter(pixmap) - painter.setPen(QtGui.QColor(0, 0, 0, 255)) - font = painter.font() - font.setPointSize(40) - painter.setFont(font) - painter.drawText(0, 0, 48, 48, QtCore.Qt.AlignCenter, 'T') - painter.end() - self.showTypesAction = QtGui.QAction(QtGui.QIcon(pixmap), + self.showTypesAction = QtGui.QAction(letterIcon('T'), "Show/hide type information", None, triggered=self.showTypes) @@ -89,13 +80,25 @@ def addButtonsToToolbar(self): self.showTypesAction.setChecked(True) self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, self.showTypesAction) + self.showEditsAction = QtGui.QAction(letterIcon('E'), + "Show/hide edit widget toggle buttons", + None, + triggered=self.showEdits) + self.showEditsAction.setCheckable(True) + self.showEditsAction.setChecked(False) + self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, + self.showEditsAction) def showPortVisibility(self, checked): - self.portsVisible = checked + self.ports_visible = checked self.update_module(self.module) def showTypes(self, checked): - self.typesVisible = checked + self.types_visible = checked + self.update_module(self.module) + + def showEdits(self, checked): + self.edits_visible = checked self.update_module(self.module) def build_widget(self): @@ -196,8 +199,9 @@ def set_controller(self, controller): def update_module(self, module=None): for plist in self.ports_lists: - plist.typesVisible = self.typesVisible - plist.portsVisible = self.portsVisible + plist.types_visible = self.types_visible + plist.edits_visible = self.edits_visible + plist.ports_visible = self.ports_visible self.module = module for ports_list in self.ports_lists: ports_list.update_module(module) diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index bb0f671bd..0dd7fd46c 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -48,6 +48,23 @@ from vistrails.gui.port_documentation import QPortDocumentation from vistrails.gui.theme import CurrentTheme +def letterIcon(letter, crossed=False): + """ Creates icon with a specific letter + """ + pixmap = QtGui.QPixmap(48,48) + pixmap.fill(QtCore.Qt.transparent) + painter = QtGui.QPainter(pixmap) + painter.setPen(QtGui.QColor(0, 0, 0, 255)) + font = painter.font() + font.setPointSize(40) + painter.setFont(font) + painter.drawText(0, 0, 48, 48, QtCore.Qt.AlignCenter, letter) + if crossed: + painter.drawLine(0,0,48,48) + painter.drawLine(0,48,48,0) + painter.end() + return QtGui.QIcon(pixmap) + class AliasLabel(QtGui.QLabel): """ AliasLabel is a QLabel that supports hover actions similar @@ -263,6 +280,8 @@ def get_widget(self): return self.build_widget(get_widget_class, True) class PortItem(QtGui.QTreeWidgetItem): + edit_show = letterIcon('E') + edit_hide = letterIcon('E', True) eye_open_icon = \ QtGui.QIcon(os.path.join(vistrails_root_directory(), 'gui/resources/images/eye.png')) @@ -277,7 +296,7 @@ class PortItem(QtGui.QTreeWidgetItem): 'gui/resources/images/connection.png')) def __init__(self, port_spec, is_connected, is_optional, is_visible, - parent=None): + is_editable=False, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent) # self.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled) self.setFlags(QtCore.Qt.ItemIsEnabled) @@ -286,7 +305,8 @@ def __init__(self, port_spec, is_connected, is_optional, is_visible, self.is_connected = is_connected self.is_optional = is_optional self.is_visible = is_visible - self.build_item(port_spec, is_connected, is_optional, is_visible) + self.is_editable = is_editable + self.build_item(port_spec, is_connected, is_optional, is_visible, is_editable) def visible(self): return not self.is_optional or self.is_visible @@ -298,6 +318,13 @@ def set_visible(self, visible): else: self.setIcon(0, PortItem.eye_closed_icon) + def set_editable(self, edit): + self.is_editable = edit + if edit: + self.setIcon(0, PortItem.edit_show) + else: + self.setIcon(0, PortItem.edit_hide) + def get_visible(self): return self.visible_checkbox @@ -308,21 +335,26 @@ def is_constant(self): return (self.port_spec.is_valid and get_module_registry().is_constant(self.port_spec)) - def build_item(self, port_spec, is_connected, is_optional, is_visible): + def build_item(self, port_spec, is_connected, is_optional, is_visible, is_editable): if not is_optional: - self.setIcon(0, PortItem.eye_disabled_icon) + self.setIcon(1, PortItem.eye_disabled_icon) elif is_visible: - self.setIcon(0, PortItem.eye_open_icon) + self.setIcon(1, PortItem.eye_open_icon) else: - self.setIcon(0, PortItem.eye_closed_icon) + self.setIcon(1, PortItem.eye_closed_icon) if is_connected: - self.setIcon(1, PortItem.conn_icon) - self.setText(2, port_spec.name) + self.setIcon(2, PortItem.conn_icon) + self.setText(3, port_spec.name) - # if port_spec is not a method, make it gray - if not self.is_constant(): - self.setForeground(2, + if self.is_constant(): + if is_editable: + self.setIcon(0, PortItem.edit_show) + else: + self.setIcon(0, PortItem.edit_hide) + else: + # if port_spec is not a method, make it gray + self.setForeground(3, QtGui.QBrush(QtGui.QColor.fromRgb(128,128,128))) self.visible_checkbox = QtGui.QCheckBox() @@ -361,9 +393,10 @@ class PortsList(QtGui.QTreeWidget): def __init__(self, port_type, parent=None): QtGui.QTreeWidget.__init__(self, parent) self.port_type = port_type - self.setColumnCount(3) + self.setColumnCount(4) self.setColumnWidth(0,24) self.setColumnWidth(1,24) + self.setColumnWidth(2,24) self.setRootIsDecorated(False) self.setIndentation(0) self.setHeaderHidden(True) @@ -372,8 +405,9 @@ def __init__(self, port_type, parent=None): self.module = None self.port_spec_items = {} self.entry_klass = ParameterEntry - self.portsVisible = True - self.typesVisible = True + self.ports_visible = True + self.types_visible = True + self.edits_visible = False def setReadOnly(self, read_only): self.setEnabled(not read_only) @@ -387,10 +421,11 @@ def update_module(self, module): Setup this tree widget to show functions of module """ + self.setColumnHidden(0, True) + self.setColumnHidden(1, not self.ports_visible) # this is strange but if you try to clear the widget when the focus is # in one of the items (after setting a parameter for example), # VisTrails crashes on a Mac (Emanuele) This is probably a Qt bug - self.setColumnHidden(0, not self.portsVisible) w = QtGui.QApplication.focusWidget() if self.isAncestorOf(w): w.clearFocus() @@ -402,6 +437,7 @@ def update_module(self, module): reg = get_module_registry() descriptor = module.module_descriptor if self.port_type == 'input': + self.setColumnHidden(0, not self.edits_visible) port_specs = module.destinationPorts() connected_ports = module.connected_input_ports visible_ports = module.visible_input_ports @@ -415,10 +451,11 @@ def update_module(self, module): for port_spec in sorted(port_specs, key=lambda x: x.name): connected = port_spec.name in connected_ports and \ connected_ports[port_spec.name] > 0 - item = PortItem(port_spec, + item = PortItem(port_spec, connected, port_spec.optional, - port_spec.name in visible_ports) + port_spec.name in visible_ports, + port_spec.name in module.editable_input_ports) self.addTopLevelItem(item) self.port_spec_items[port_spec.name] = (port_spec, item) @@ -428,11 +465,11 @@ def update_module(self, module): continue port_spec, item = self.port_spec_items[function.name] subitem = self.entry_klass(port_spec, function, - self.typesVisible) + self.types_visible) self.function_map[function.real_id] = subitem item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 1, subitem.get_widget()) + self.setItemWidget(subitem, 2, subitem.get_widget()) item.setExpanded(True) # self.setItemWidget(item, 0, item.get_visible()) @@ -510,7 +547,7 @@ def update_module(self, module): self.function_map[function.real_id] = subitem item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 1, subitem.get_widget()) + self.setItemWidget(subitem, 2, subitem.get_widget()) item.setExpanded(True) def item_clicked(self, item, col): @@ -519,12 +556,23 @@ def item_clicked(self, item, col): if self.port_type == 'input': visible_ports = self.module.visible_input_ports + editable_ports = self.module.editable_input_ports elif self.port_type == 'output': visible_ports = self.module.visible_output_ports else: raise TypeError("Unknown port type: '%s'" % self.port_type) if col == 0: + if item.is_constant(): + item.set_editable(not item.is_editable) + if item.is_editable: + editable_ports.add(item.port_spec.name) + else: + editable_ports.discard(item.port_spec.name) + self.controller.flush_delayed_actions() + self.controller.current_pipeline_scene.recreate_module( + self.controller.current_pipeline, self.module.id) + if col == 1: if item.is_optional: item.set_visible(not item.is_visible) if item.is_visible: @@ -534,7 +582,7 @@ def item_clicked(self, item, col): self.controller.flush_delayed_actions() self.controller.current_pipeline_scene.recreate_module( self.controller.current_pipeline, self.module.id) - if col == 2: + if col == 3: if item.isExpanded(): item.setExpanded(False) elif item.childCount() > 0: @@ -608,7 +656,7 @@ def do_add_method(self, port_spec, item): subitem = self.entry_klass(port_spec) item.addChild(subitem) subitem.setFirstColumnSpanned(True) - self.setItemWidget(subitem, 1, subitem.get_widget()) + self.setItemWidget(subitem, 2, subitem.get_widget()) item.setExpanded(True) if len(port_spec.descriptors()) == 0: self.update_method(subitem, port_spec.name, [], []) From 8866be7476b7a164a7d9a48fee17b4d54f67fbe1 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 18 Aug 2014 15:30:49 +0200 Subject: [PATCH 092/194] Show selected function widgets on module TODO: * Visibility mode is only temporary * Add labels * Improve layout * Add native GraphicsItem widgets gui/modules/constant_configuration.py: - ConstantWidgetMixin: Changed to use new-style signals, but need to add signal to classes inheriting QWidget gui/pipeline_view.py: Added widgets for showing selected functions gui/ports_pane.py: New 'E' icon for toggling visibility on module Updated contentsChanged signal: packages/vtk/tf_widget.py gui/mashups/mashups_widgets.py --- vistrails/gui/mashups/mashups_widgets.py | 3 + .../gui/modules/constant_configuration.py | 17 ++- vistrails/gui/pipeline_view.py | 125 +++++++++++++++++- vistrails/gui/ports_pane.py | 9 +- vistrails/packages/vtk/tf_widget.py | 2 +- 5 files changed, 145 insertions(+), 11 deletions(-) diff --git a/vistrails/gui/mashups/mashups_widgets.py b/vistrails/gui/mashups/mashups_widgets.py index 9f9ab279a..ba4ab3161 100644 --- a/vistrails/gui/mashups/mashups_widgets.py +++ b/vistrails/gui/mashups/mashups_widgets.py @@ -77,6 +77,7 @@ def focusOutEvent(self, event): ############################################################################### class QSliderWidget(ConstantWidgetMixin, QtGui.QSlider): + contentsChanged = QtCore.pyqtSignal(object, object) def __init__(self, param, parent=None): QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent) ConstantWidgetMixin.__init__(self, param.strValue) @@ -180,6 +181,7 @@ def focusOutEvent(self, event): ############################################################################### class QNumericStepperIntegerWidget(ConstantWidgetMixin, QtGui.QSpinBox): + contentsChanged = QtCore.pyqtSignal(object, object) def __init__(self, param, parent=None): QtGui.QSpinBox.__init__(self, parent) ConstantWidgetMixin.__init__(self, param.strValue) @@ -208,6 +210,7 @@ def change_val(self, newval): ############################################################################### class QNumericStepperFloatWidget(ConstantWidgetMixin, QtGui.QDoubleSpinBox): + contentsChanged = QtCore.pyqtSignal(object, object) def __init__(self, param, parent=None): QtGui.QDoubleSpinBox.__init__(self, parent) ConstantWidgetMixin.__init__(self, param.strValue) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 451b8d237..21a7ab456 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -59,7 +59,12 @@ def setPlaceholderTextCompat(self, value): class ConstantWidgetMixin(object): + # superclasses need to add this signal: + # contentsChanged = QtCore.pyqtSignal(object, str) + def __init__(self, contents=None): + if not hasattr(self, 'contentsChanged'): + raise Exception('ConstantWidget must define contentsChanged signal') self._last_contents = contents self.psi = None @@ -70,7 +75,7 @@ def update_parent(self): if self.parent() and hasattr(self.parent(), 'updateMethod'): self.parent().updateMethod() self._last_contents = newContents - self.emit(QtCore.SIGNAL('contentsChanged'), (self, newContents)) + self.contentsChanged.emit(self, newContents) class ConstantWidgetBase(ConstantWidgetMixin): def __init__(self, param): @@ -142,7 +147,8 @@ def setFree(self, is_free): def setNonEmpty(self, is_non_empty): pass -class StandardConstantWidget(QtGui.QLineEdit, ConstantWidgetBase): +class StandardConstantWidget(QtGui.QLineEdit,ConstantWidgetBase): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QtGui.QLineEdit.__init__(self, parent) ConstantWidgetBase.__init__(self, param) @@ -173,6 +179,7 @@ def setDefault(self, value): setPlaceholderTextCompat(self, value) class StandardConstantEnumWidget(QtGui.QComboBox, ConstantEnumWidgetBase): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QtGui.QComboBox.__init__(self, parent) ConstantEnumWidgetBase.__init__(self, param) @@ -220,6 +227,7 @@ def setDefault(self, value): # Multi-line String Widget class MultiLineStringWidget(QtGui.QTextEdit, ConstantWidgetBase): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QtGui.QTextEdit.__init__(self, parent) self.setAcceptRichText(False) @@ -253,6 +261,7 @@ class PathChooserWidget(QtGui.QWidget, ConstantWidgetMixin): selected. """ + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): """__init__(param: core.vistrail.module_param.ModuleParam, parent: QWidget) @@ -340,6 +349,7 @@ class BooleanWidget(QtGui.QCheckBox, ConstantWidgetBase): _values = ['True', 'False'] _states = [QtCore.Qt.Checked, QtCore.Qt.Unchecked] + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): """__init__(param: core.vistrail.module_param.ModuleParam, parent: QWidget) @@ -370,6 +380,7 @@ def change_state(self, state): # FIXME ColorChooserButton remains because the parameter exploration # code uses it, really should be removed at some point class ColorChooserButton(QtGui.QPushButton): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, parent=None): QtGui.QPushButton.__init__(self, parent) # self.setFrameStyle(QtGui.QFrame.Box | QtGui.QFrame.Plain) @@ -454,6 +465,7 @@ def openChooser(self): self.setColor(qcolor) class ColorWidget(QColorWidget, ConstantWidgetBase): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QColorWidget.__init__(self, parent) ConstantWidgetBase.__init__(self, param) @@ -466,6 +478,7 @@ def setContents(self, strValue, silent=True): self.setColorString(strValue, silent) class ColorEnumWidget(QColorWidget, ConstantEnumWidgetBase): + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QColorWidget.__init__(self, parent) self.setPopupMode(QtGui.QToolButton.MenuButtonPopup) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 89208f8b6..e548e1e94 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -68,7 +68,7 @@ from vistrails.gui.module_info import QModuleInfo from vistrails.gui.module_palette import QModuleTreeWidget from vistrails.gui.modules.utils import get_widget_class -from vistrails.gui.ports_pane import Parameter +from vistrails.gui.ports_pane import Parameter, Function from vistrails.gui.theme import CurrentTheme from vistrails.gui.utils import getBuilderWindow from vistrails.gui.variable_dropbox import QDragVariableLabel @@ -1076,6 +1076,8 @@ def __init__(self, parent=None, scene=None): self._cur_function_names = set() self.function_overview = 'No functions set' self.function_widget = None + self.function_widgets = [] + self.functions_widget = None self.value_edit = None self.edit_rect = QtCore.QRectF(0.0, 0.0, 0.0, 0.0) self.handlePositionChanges = True @@ -1197,6 +1199,10 @@ def update_function_ports(self, core_module=None): for f in self.module.functions: if f.name == 'value': self.value_edit.setContents(f.parameters[0].strValue) + for function_widget in self.function_widgets: + for f in self.module.functions: + if f.name == function_widget.function.name: + function_widget.setContents([p.strValue for p in f.params]) def setProgress(self, progress): self.progress = progress @@ -1494,8 +1500,14 @@ def setupModule(self, module, read_only=False): self.value_edit.connect(self.value_edit, QtCore.SIGNAL('contentsChanged'), self.value_changed) - - + + if module.is_valid and not read_only and not get_module_registry( + ).is_constant_module(self.module.module_descriptor.module) and \ + module.editable_input_ports: + self.functions_widget = QGraphicsFunctionsWidget(self.module, self) + self.functions_widget.function_changed.connect(self.function_changed) + self.function_widgets = self.functions_widget.function_widgets + self.edit_rect = self.functions_widget.boundingRect() self.setToolTip(self.description) self.computeBoundingRect() self.setPos(module.center.x, -module.center.y) @@ -1602,16 +1614,18 @@ def setupModule(self, module, read_only=False): error = e self.update_function_ports() - + if self.value_edit: if hasattr(self.edit_widget, 'GraphicsItem'): self.value_edit.setPos(self.editRect.topLeft()) else: proxy.setPos(self.editRect.topLeft()) - + if self.functions_widget: + self.functions_widget.setPos(self.editRect.topLeft()) + else: self.setInvalid(True) - + def value_changed(self, values): widget, value = values controller = self.scene().controller @@ -1621,6 +1635,17 @@ def value_changed(self, values): from vistrails.gui.vistrails_window import _app _app.notify('module_changed', self.module) + def function_changed(self, name, values): + """ Called when a function value has changed by the inline edit widget + + """ + controller = self.scene().controller + controller.update_function(self.module, name, values) + self.update_function_ports(controller.current_pipeline.modules[self.module.id]) + if self.isSelected(): + from vistrails.gui.vistrails_window import _app + _app.notify('module_changed', self.module) + def create_shape_from_fringe(self, fringe): left_fringe, right_fringe = fringe if left_fringe[0] != (0.0, 0.0): @@ -3284,6 +3309,94 @@ def set_read_only_mode(self, on): This will prevent user to add/remove modules and connections.""" self.read_only_mode = on +class QGraphicsFunctionsWidget(QtGui.QGraphicsWidget): + """ GraphicsWidget containing all editable functions + + """ + + function_changed = QtCore.pyqtSignal(str, list) + + def __init__(self, module, parent=None): + QtGui.QGraphicsWidget.__init__(self, parent) + self.function_widgets = [] + height = 0 + for port_spec in module.destinationPorts(): + if port_spec.name in module.editable_input_ports: + params = [Parameter(psi.descriptor, psi) for psi in port_spec.items] + function = Function(port_spec.name, params) + for f in module.functions: + if f.name == port_spec.name: + function = f + function_widget = QGraphicsFunctionWidget(function, self) + function_widget.setPos(0, height) + function_widget.function_changed.connect(self.function_changed) + self.function_widgets.append(function_widget) + height += function_widget.boundingRect().height() + self.bounds = QtCore.QRectF(0,0,150,height) + + def boundingRect(self): + return self.bounds + +class QGraphicsFunctionWidget(QtGui.QGraphicsWidget): + """ GraphicsWidget containing an editable function + + """ + + function_changed = QtCore.pyqtSignal(str, list) + + def __init__(self, function, parent=None): + QtGui.QGraphicsWidget.__init__(self, parent) + self.function = function + self.param_widgets = [] + self.bounds = None + width = 150 + height = 0 + for param in function.parameters: + Widget = get_widget_class(param.port_spec_item.descriptor) + if hasattr(Widget, 'GraphicsItem'): + param_widget = Widget.GraphicsItem(param, self) + # resize to 150 + rect = param_widget.boundingRect() + param_widget.setZValue(self.zValue()+0.2) + bg = QtGui.QGraphicsRectItem(rect, param_widget) + # TODO COLOR + bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) + bg.setZValue(-1) + scale = max(rect.width(), rect.height()) + transform = param_widget.transform() + # transfer function needs to be inverted right now + transform.scale(150.0/scale,-150.0/scale) + transform.translate(0, -rect.height()) + param_widget.setTransform(transform) + rect.setSize(rect.size()*150.0/scale) + param_widget.setPos(0, height) + else: + param_widget = Widget(param) + param_widget.setMaximumSize(150, 150) + proxy = QtGui.QGraphicsProxyWidget(self) + proxy.setWidget(param_widget) + rect = proxy.boundingRect() + rect.moveTo(0.0,0.0) + proxy.setPos(0, height) + rect.setHeight(rect.height()+5) + height += rect.height() + param_widget.contentsChanged.connect(self.param_changed) + self.param_widgets.append(param_widget) + + self.bounds = QtCore.QRectF(0.0, 0.0, 150.0, height) + + def param_changed(self, widget, values): + # get values from all parameters + values = [p.contents() for p in self.param_widgets] + self.function_changed.emit(self.function.name, values) + + def setContents(self, values): + for pw, value in zip(self.param_widgets, values): + pw.setContents(value) + + def boundingRect(self): + return self.bounds + class QModuleStatusEvent(QtCore.QEvent): """ QModuleStatusEvent is trying to handle thread-safe real-time diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index 0dd7fd46c..7853b41a6 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -144,15 +144,20 @@ def mousePressEvent(self, event): self.parent().updateMethod() class Parameter(object): - def __init__(self, desc): + def __init__(self, desc, psi=None): self.type = desc.name self.identifier = desc.identifier self.namespace = None if not desc.namespace else desc.namespace self.strValue = '' self.alias = '' self.queryMethod = None - self.port_spec_item = None + self.port_spec_item = psi self.param_exists = False + +class Function(object): + def __init__(self, name, params): + self.name = name + self.parameters = params class ParameterEntry(QtGui.QTreeWidgetItem): plus_icon = QtGui.QIcon(os.path.join(vistrails_root_directory(), diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index 028ac1178..246a225fe 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -499,7 +499,7 @@ def mousePressEvent(self, event): # Scene, view, widget class QGraphicsTransferFunction(QtGui.QGraphicsWidget, ConstantWidgetMixin): - + contentsChanged = QtCore.pyqtSignal(object, str) def __init__(self, param, parent=None): QtGui.QGraphicsWidget.__init__(self, parent) ConstantWidgetMixin.__init__(self, param.strValue) From 3a777458760e48526104d736a2524fd0a4d7d16c Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 18 Aug 2014 22:34:58 +0200 Subject: [PATCH 093/194] Store shown widgets in annotation * Also disabled showing empty functions core/vistrail/module.py: New property editable_input_ports that returns contents of INLINE_WIDGET_ANNOTATION as a set gui/pipeline_view.py: Fixed missing portspec in dummy functions gui/ports_pane.py: Do not show functions with length 0 --- vistrails/core/vistrail/module.py | 10 ++++++++-- vistrails/gui/pipeline_view.py | 14 ++++++++++---- vistrails/gui/ports_pane.py | 21 +++++++++++++++------ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/vistrails/core/vistrail/module.py b/vistrails/core/vistrail/module.py index 940e511bd..3d8d4ea00 100644 --- a/vistrails/core/vistrail/module.py +++ b/vistrails/core/vistrail/module.py @@ -83,7 +83,6 @@ def set_defaults(self, other=None): self.portVisible = set() self.visible_input_ports = set() self.visible_output_ports = set() - self.editable_input_ports = set() self.connected_input_ports = {} self.connected_output_ports = {} self.is_valid = False @@ -97,7 +96,6 @@ def set_defaults(self, other=None): self.portVisible = copy.copy(other.portVisible) self.visible_input_ports = copy.copy(other.visible_input_ports) self.visible_output_ports = copy.copy(other.visible_output_ports) - self.editable_input_ports = copy.copy(other.editable_input_ports) self.connected_input_ports = copy.copy(other.connected_input_ports) self.connected_output_ports = \ copy.copy(other.connected_output_ports) @@ -153,6 +151,7 @@ def convert(_module): # CONSTANTS VISTRAIL_VAR_ANNOTATION = '__vistrail_var__' + INLINE_WIDGET_ANNOTATION = '__inline_widgets__' ########################################################################## @@ -264,6 +263,13 @@ def _set_module_descriptor(self, descriptor): module_descriptor = property(_get_module_descriptor, _set_module_descriptor) + def _get_editable_input_ports(self): + if self.has_annotation_with_key(Module.INLINE_WIDGET_ANNOTATION): + return set(self.get_annotation_by_key( + Module.INLINE_WIDGET_ANNOTATION).value.split(',')) + return set() + editable_input_ports = property(_get_editable_input_ports) + def get_port_spec(self, port_name, port_type): """get_port_spec(port_name: str, port_type: str: ['input' | 'output']) -> PortSpec diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index e548e1e94..2cb57b988 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1107,6 +1107,11 @@ def module_text_has_changed(m1, m2): # elif module_functions_have_changed(self.module, core_module): # return True else: + # check for changed edit widgets + if core_module.editable_input_ports != \ + self.module.editable_input_ports: + # shape has changed so we need to recreate the module + return True # Check for changed ports # _db_name because this shows up in the profile. cip = sorted([x.key_no_id() for x in self.inputPorts]) @@ -1148,7 +1153,6 @@ def update_function_ports(self, core_module=None): added_functions = after_names - before_names deleted_functions = before_names - after_names self._cur_function_names = copy.copy(after_names) - if len(deleted_functions) > 0: for function_name in deleted_functions: try: @@ -3322,8 +3326,9 @@ def __init__(self, module, parent=None): height = 0 for port_spec in module.destinationPorts(): if port_spec.name in module.editable_input_ports: + # create default dummies params = [Parameter(psi.descriptor, psi) for psi in port_spec.items] - function = Function(port_spec.name, params) + function = Function(port_spec.name, params, port_spec) for f in module.functions: if f.name == port_spec.name: function = f @@ -3351,8 +3356,9 @@ def __init__(self, function, parent=None): self.bounds = None width = 150 height = 0 - for param in function.parameters: - Widget = get_widget_class(param.port_spec_item.descriptor) + for i in xrange(len(function.parameters)): + param = function.parameters[i] + Widget = get_widget_class(function.get_spec('input').items[i].descriptor) if hasattr(Widget, 'GraphicsItem'): param_widget = Widget.GraphicsItem(param, self) # resize to 150 diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index 7853b41a6..d199ed6d5 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -155,9 +155,14 @@ def __init__(self, desc, psi=None): self.param_exists = False class Function(object): - def __init__(self, name, params): + def __init__(self, name, params, port_spec=None): self.name = name self.parameters = params + self.port_spec = port_spec + + def get_spec(self, port_type): + return self.port_spec + class ParameterEntry(QtGui.QTreeWidgetItem): plus_icon = QtGui.QIcon(os.path.join(vistrails_root_directory(), @@ -353,10 +358,11 @@ def build_item(self, port_spec, is_connected, is_optional, is_visible, is_editab self.setText(3, port_spec.name) if self.is_constant(): - if is_editable: - self.setIcon(0, PortItem.edit_show) - else: - self.setIcon(0, PortItem.edit_hide) + if len(self.port_spec.port_spec_items)>0: + if is_editable: + self.setIcon(0, PortItem.edit_show) + else: + self.setIcon(0, PortItem.edit_hide) else: # if port_spec is not a method, make it gray self.setForeground(3, @@ -568,13 +574,16 @@ def item_clicked(self, item, col): raise TypeError("Unknown port type: '%s'" % self.port_type) if col == 0: - if item.is_constant(): + if item.is_constant() and len(item.port_spec.port_spec_items)>0: item.set_editable(not item.is_editable) if item.is_editable: editable_ports.add(item.port_spec.name) else: editable_ports.discard(item.port_spec.name) self.controller.flush_delayed_actions() + self.controller.add_annotation((self.module.INLINE_WIDGET_ANNOTATION, + ','.join(editable_ports)), + self.module.id) self.controller.current_pipeline_scene.recreate_module( self.controller.current_pipeline, self.module.id) if col == 1: From 992a337cc924023da3cd58edccf3b11c166b54c5 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 20 Aug 2014 14:07:02 +0200 Subject: [PATCH 094/194] Improved edit widget layout gui/pipeline_view.py: - computeBoundingRect: Simplified the way rects are combined The default layout should still be the same core/theme.py: New attribute MODULE_EDIT_MARGIN Fixed issue with contentsChanged in ConstantWidgetMixin subclasses, the type was wrong, (object, str) -> (tuple): gui/modules/constant_configuration.py gui/mashups/mashups_widgets.py packages/vtk/tf_widget.py Added missing contentsChanged attributes: packages/persistence/widgets.py packages/webServices/enumeration_widget.py --- vistrails/core/theme.py | 3 + vistrails/gui/mashups/mashups_widgets.py | 4 +- .../gui/modules/constant_configuration.py | 20 +- vistrails/gui/pipeline_view.py | 175 +++++++++--------- vistrails/packages/persistence/widgets.py | 1 + vistrails/packages/vtk/tf_widget.py | 2 +- .../webServices/enumeration_widget.py | 1 + 7 files changed, 109 insertions(+), 97 deletions(-) diff --git a/vistrails/core/theme.py b/vistrails/core/theme.py index 176aa562b..9674d6926 100644 --- a/vistrails/core/theme.py +++ b/vistrails/core/theme.py @@ -63,6 +63,9 @@ def __init__(self): # Padded space of Module shape into its label self.MODULE_LABEL_MARGIN = (20, 20, 20, 15) + # Padded space of Module shape into its edit widget + self.MODULE_EDIT_MARGIN = (8, 4, 8, 4) + # Margin of Module shape into its ports self.MODULE_PORT_MARGIN = (4, 4, 4, 4) diff --git a/vistrails/gui/mashups/mashups_widgets.py b/vistrails/gui/mashups/mashups_widgets.py index ba4ab3161..810f4c4ef 100644 --- a/vistrails/gui/mashups/mashups_widgets.py +++ b/vistrails/gui/mashups/mashups_widgets.py @@ -77,7 +77,7 @@ def focusOutEvent(self, event): ############################################################################### class QSliderWidget(ConstantWidgetMixin, QtGui.QSlider): - contentsChanged = QtCore.pyqtSignal(object, object) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent) ConstantWidgetMixin.__init__(self, param.strValue) @@ -210,7 +210,7 @@ def change_val(self, newval): ############################################################################### class QNumericStepperFloatWidget(ConstantWidgetMixin, QtGui.QDoubleSpinBox): - contentsChanged = QtCore.pyqtSignal(object, object) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QDoubleSpinBox.__init__(self, parent) ConstantWidgetMixin.__init__(self, param.strValue) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 21a7ab456..e7feddce8 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -60,7 +60,7 @@ def setPlaceholderTextCompat(self, value): class ConstantWidgetMixin(object): # superclasses need to add this signal: - # contentsChanged = QtCore.pyqtSignal(object, str) + # contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, contents=None): if not hasattr(self, 'contentsChanged'): @@ -75,7 +75,7 @@ def update_parent(self): if self.parent() and hasattr(self.parent(), 'updateMethod'): self.parent().updateMethod() self._last_contents = newContents - self.contentsChanged.emit(self, newContents) + self.contentsChanged.emit((self, newContents)) class ConstantWidgetBase(ConstantWidgetMixin): def __init__(self, param): @@ -148,7 +148,7 @@ def setNonEmpty(self, is_non_empty): pass class StandardConstantWidget(QtGui.QLineEdit,ConstantWidgetBase): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QLineEdit.__init__(self, parent) ConstantWidgetBase.__init__(self, param) @@ -179,7 +179,7 @@ def setDefault(self, value): setPlaceholderTextCompat(self, value) class StandardConstantEnumWidget(QtGui.QComboBox, ConstantEnumWidgetBase): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QComboBox.__init__(self, parent) ConstantEnumWidgetBase.__init__(self, param) @@ -227,7 +227,7 @@ def setDefault(self, value): # Multi-line String Widget class MultiLineStringWidget(QtGui.QTextEdit, ConstantWidgetBase): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QTextEdit.__init__(self, parent) self.setAcceptRichText(False) @@ -261,7 +261,7 @@ class PathChooserWidget(QtGui.QWidget, ConstantWidgetMixin): selected. """ - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): """__init__(param: core.vistrail.module_param.ModuleParam, parent: QWidget) @@ -349,7 +349,7 @@ class BooleanWidget(QtGui.QCheckBox, ConstantWidgetBase): _values = ['True', 'False'] _states = [QtCore.Qt.Checked, QtCore.Qt.Unchecked] - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): """__init__(param: core.vistrail.module_param.ModuleParam, parent: QWidget) @@ -380,7 +380,7 @@ def change_state(self, state): # FIXME ColorChooserButton remains because the parameter exploration # code uses it, really should be removed at some point class ColorChooserButton(QtGui.QPushButton): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, parent=None): QtGui.QPushButton.__init__(self, parent) # self.setFrameStyle(QtGui.QFrame.Box | QtGui.QFrame.Plain) @@ -465,7 +465,7 @@ def openChooser(self): self.setColor(qcolor) class ColorWidget(QColorWidget, ConstantWidgetBase): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QColorWidget.__init__(self, parent) ConstantWidgetBase.__init__(self, param) @@ -478,7 +478,7 @@ def setContents(self, strValue, silent=True): self.setColorString(strValue, silent) class ColorEnumWidget(QColorWidget, ConstantEnumWidgetBase): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QColorWidget.__init__(self, parent) self.setPopupMode(QtGui.QToolButton.MenuButtonPopup) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 2cb57b988..72f1ce114 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1213,50 +1213,54 @@ def setProgress(self, progress): def computeBoundingRect(self): """ computeBoundingRect() -> None - Adjust the module size according to the text size + Adjust the module size according to contents """ + width = 0 + height = CurrentTheme.MODULE_LABEL_MARGIN[1] + # for each rect: Add height, adjust min width, + # set pos to distance to top middle corner, to be adjusted when + # paddedRect is known labelRect = self.labelFontMetric.boundingRect(self.label) + labelRect.setHeight(labelRect.height()+1) # fix cut off bottoms + labelRect.moveTo(-labelRect.width()/2, height) + height += labelRect.height() + padding = labelRect.adjusted(-CurrentTheme.MODULE_LABEL_MARGIN[0], 0, + CurrentTheme.MODULE_LABEL_MARGIN[2], 0) + width = max(width, padding.width()) + if self.description: self.description = '(' + self.description + ')' descRect = self.descFontMetric.boundingRect(self.description) - # adjust labelRect in case descRect is wider - labelRect = labelRect.united(descRect) - descRect.adjust(0, 0, 0, CurrentTheme.MODULE_PORT_MARGIN[3]) - else: - descRect = QtCore.QRectF(0, 0, 0, 0) - - edit_width = int(self.edit_rect.width()) + 4 - if edit_width: - labelRect = labelRect.united( - QtCore.QRect(0, 0, - int(edit_width) - - CurrentTheme.MODULE_LABEL_MARGIN[0]*2, 0)) - - labelRect.translate(-labelRect.center().x(), -labelRect.center().y()) - self.paddedRect = QtCore.QRectF( - labelRect.adjusted(-CurrentTheme.MODULE_LABEL_MARGIN[0], - -CurrentTheme.MODULE_LABEL_MARGIN[1] - -descRect.height()/2-self.edit_rect.height()/2, - CurrentTheme.MODULE_LABEL_MARGIN[2], - CurrentTheme.MODULE_LABEL_MARGIN[3] - +descRect.height()/2+self.edit_rect.height()/2)) - - self.labelRect = QtCore.QRectF( - self.paddedRect.left(), - -(labelRect.height()+descRect.height()+self.edit_rect.height())/2, - self.paddedRect.width(), - labelRect.height()) - self.descRect = QtCore.QRectF( - self.paddedRect.left(), - self.labelRect.bottom(), - self.paddedRect.width(), - descRect.height()) - self.editRect = QtCore.QRectF( - self.paddedRect.left()+2, - self.descRect.bottom(), - self.paddedRect.width(), - self.edit_rect.height()) + descRect.moveTo(-descRect.width()/2, height) + height += descRect.height() + padding = descRect.adjusted(-CurrentTheme.MODULE_LABEL_MARGIN[0], 0, + CurrentTheme.MODULE_LABEL_MARGIN[2], 0) + width = max(width, padding.width()) + + if self.edit_rect.height(): + height += CurrentTheme.MODULE_EDIT_MARGIN[1] # top margin + editRect = self.edit_rect + editRect.moveTo(-editRect.width()/2, height) + height += editRect.height() + padding = editRect.adjusted(-CurrentTheme.MODULE_EDIT_MARGIN[0], 0, + CurrentTheme.MODULE_EDIT_MARGIN[2], 0) + width = max(width, padding.width()) + height += CurrentTheme.MODULE_EDIT_MARGIN[3] # bottom edit margin + + height += CurrentTheme.MODULE_LABEL_MARGIN[3] # bottom margin + + # move to final position + + self.paddedRect = QtCore.QRectF(-width/2, -height/2, width, height) + labelRect.translate(0, -height/2) + self.labelRect = labelRect + if self.description: + descRect.translate(0, -height/2) + self.descRect = descRect + if self.edit_rect.height(): + editRect.translate(0, -height/2) + self.editRect = editRect self.abstRect = QtCore.QRectF( self.paddedRect.left(), -self.labelRect.top()-CurrentTheme.MODULE_PORT_MARGIN[3], @@ -1466,44 +1470,44 @@ def setupModule(self, module, read_only=False): self.description = '' if module.is_valid and not read_only and get_module_registry( - ).is_constant_module(self.module.module_descriptor.module): - desc = self.module.module_descriptor - Widget = get_widget_class(desc) - self.edit_widget = Widget - param = Parameter(desc) - for function in self.module.functions: - if function.name == 'value': - param = function.parameters[0] - if hasattr(Widget, 'GraphicsItem'): - self.value_edit = Widget.GraphicsItem(param, self) - # resize to 150 - rect = self.value_edit.boundingRect() - self.value_edit.setZValue(self.zValue()+0.2) - bg = QtGui.QGraphicsRectItem(rect, self.value_edit) - # TODO COLOR - bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) - bg.setZValue(-1) - scale = max(rect.width(), rect.height()) - transform = self.value_edit.transform() - # transfer function needs to be inverted right now - transform.scale(150.0/scale,-150.0/scale) - transform.translate(0, -rect.height()) - self.value_edit.setTransform(transform) - rect.setSize(rect.size()*150.0/scale) - rect.setHeight(rect.height()+5) - self.edit_rect = rect - else: - self.value_edit = Widget(param) - self.value_edit.setMaximumSize(150, 150) - proxy = QtGui.QGraphicsProxyWidget(self) - proxy.setWidget(self.value_edit) - rect = proxy.boundingRect() - rect.moveTo(0.0,0.0) - rect.setHeight(rect.height()+5) - self.edit_rect = rect - self.value_edit.connect(self.value_edit, - QtCore.SIGNAL('contentsChanged'), - self.value_changed) + ).is_constant_module(self.module.module_descriptor.module): + desc = self.module.module_descriptor + Widget = get_widget_class(desc) + self.edit_widget = Widget + param = Parameter(desc) + for function in self.module.functions: + if function.name == 'value': + param = function.parameters[0] + if hasattr(Widget, 'GraphicsItem'): + self.value_edit = Widget.GraphicsItem(param, self) + # resize to 150 + rect = self.value_edit.boundingRect() + self.value_edit.setZValue(self.zValue()+0.2) + bg = QtGui.QGraphicsRectItem(rect, self.value_edit) + # TODO COLOR + bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) + bg.setZValue(-1) + scale = max(rect.width(), rect.height()) + transform = self.value_edit.transform() + # transfer function needs to be inverted right now + transform.scale(150.0/scale,-150.0/scale) + transform.translate(0, -rect.height()) + self.value_edit.setTransform(transform) + rect.setSize(rect.size()*150.0/scale) + rect.setHeight(rect.height()+4) + self.edit_rect = rect + else: + SCALE = 3.0/4 + self.value_edit = Widget(param) + self.value_edit.setMaximumSize(150.0/SCALE, 150.0/SCALE) + proxy = QtGui.QGraphicsProxyWidget(self) + proxy.setWidget(self.value_edit) + proxy.setScale(SCALE) + rect = self.value_edit.geometry() #proxy.boundingRect() + rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled + rect.moveTo(0.0,0.0) + self.edit_rect = rect + self.value_edit.contentsChanged.connect(self.value_changed) if module.is_valid and not read_only and not get_module_registry( ).is_constant_module(self.module.module_descriptor.module) and \ @@ -3354,8 +3358,9 @@ def __init__(self, function, parent=None): self.function = function self.param_widgets = [] self.bounds = None - width = 150 + width = 150.0 height = 0 + SCALE = 3.0/4 for i in xrange(len(function.parameters)): param = function.parameters[i] Widget = get_widget_class(function.get_spec('input').items[i].descriptor) @@ -3371,27 +3376,29 @@ def __init__(self, function, parent=None): scale = max(rect.width(), rect.height()) transform = param_widget.transform() # transfer function needs to be inverted right now - transform.scale(150.0/scale,-150.0/scale) + transform.scale(width/scale,-width/scale) transform.translate(0, -rect.height()) param_widget.setTransform(transform) - rect.setSize(rect.size()*150.0/scale) + rect.setSize(rect.size()*width/scale) param_widget.setPos(0, height) else: param_widget = Widget(param) - param_widget.setMaximumSize(150, 150) + param_widget.setMaximumSize(width/SCALE, width/SCALE) proxy = QtGui.QGraphicsProxyWidget(self) proxy.setWidget(param_widget) - rect = proxy.boundingRect() + proxy.setScale(SCALE) + rect = param_widget.geometry() #proxy.boundingRect() + rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled rect.moveTo(0.0,0.0) proxy.setPos(0, height) - rect.setHeight(rect.height()+5) + rect.setHeight(rect.height()) height += rect.height() param_widget.contentsChanged.connect(self.param_changed) self.param_widgets.append(param_widget) - self.bounds = QtCore.QRectF(0.0, 0.0, 150.0, height) + self.bounds = QtCore.QRectF(0.0, 0.0, width, height) - def param_changed(self, widget, values): + def param_changed(self, values): # get values from all parameters values = [p.contents() for p in self.param_widgets] self.function_changed.emit(self.function.name, values) diff --git a/vistrails/packages/persistence/widgets.py b/vistrails/packages/persistence/widgets.py index b4695b437..7d07efa97 100644 --- a/vistrails/packages/persistence/widgets.py +++ b/vistrails/packages/persistence/widgets.py @@ -985,6 +985,7 @@ def __init__(self, module, controller, parent=None, path_type=None): False, path_type) class PersistentRefInlineWidget(QtGui.QWidget, ConstantWidgetMixin): + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): self.param = param self.strValue = param.strValue diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index 246a225fe..c1c2dfcdc 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -499,7 +499,7 @@ def mousePressEvent(self, event): # Scene, view, widget class QGraphicsTransferFunction(QtGui.QGraphicsWidget, ConstantWidgetMixin): - contentsChanged = QtCore.pyqtSignal(object, str) + contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, param, parent=None): QtGui.QGraphicsWidget.__init__(self, parent) ConstantWidgetMixin.__init__(self, param.strValue) diff --git a/vistrails/packages/webServices/enumeration_widget.py b/vistrails/packages/webServices/enumeration_widget.py index 4712bd282..83639ca35 100644 --- a/vistrails/packages/webServices/enumeration_widget.py +++ b/vistrails/packages/webServices/enumeration_widget.py @@ -45,6 +45,7 @@ import vistrails.packages.webServices class EnumerationWidget(QtGui.QComboBox, ConstantWidgetMixin): + contentsChanged = QtCore.pyqtSignal(tuple) enumerationlist = [] def __init__(self, param, parent=None): """__init__(param: core.vistrail.module_param.ModuleParam, From 0a5a38498c1721da5e600cd7f8f255985c842840 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 20 Aug 2014 15:30:16 +0200 Subject: [PATCH 095/194] Added function name to module edit widgets gui/pipeline_view.py: - QGraphicsFunctionWidget: Added function name - QGraphicsFunctionWidget: Adjusted bottom margin core/theme.py: Adjusted MODULE_EDIT_MARGIN bottom gui/theme.py: Added MODULE_EDIT_FONT + _METRIC --- vistrails/core/theme.py | 2 +- vistrails/gui/pipeline_view.py | 15 ++++++++++++++- vistrails/gui/theme.py | 2 ++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/vistrails/core/theme.py b/vistrails/core/theme.py index 9674d6926..2c0e7faa8 100644 --- a/vistrails/core/theme.py +++ b/vistrails/core/theme.py @@ -64,7 +64,7 @@ def __init__(self): self.MODULE_LABEL_MARGIN = (20, 20, 20, 15) # Padded space of Module shape into its edit widget - self.MODULE_EDIT_MARGIN = (8, 4, 8, 4) + self.MODULE_EDIT_MARGIN = (8, 4, 8, 2) # Margin of Module shape into its ports self.MODULE_PORT_MARGIN = (4, 4, 4, 4) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 72f1ce114..4089203b0 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3361,6 +3361,19 @@ def __init__(self, function, parent=None): width = 150.0 height = 0 SCALE = 3.0/4 + # add name label + name = self.function.name + bounds = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect + editRect = bounds(name) + if editRect.width()>150: + while bounds(name + '...').width() > 150: + name = name[:-1] + name += '...' + + fname = QtGui.QGraphicsTextItem(name, self) + fname.setFont(CurrentTheme.MODULE_EDIT_FONT) + fname.setPos(-5, -5) + height += 10 for i in xrange(len(function.parameters)): param = function.parameters[i] Widget = get_widget_class(function.get_spec('input').items[i].descriptor) @@ -3391,7 +3404,7 @@ def __init__(self, function, parent=None): rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled rect.moveTo(0.0,0.0) proxy.setPos(0, height) - rect.setHeight(rect.height()) + rect.setHeight(rect.height()+2) # space between parameters height += rect.height() param_widget.contentsChanged.connect(self.param_changed) self.param_widgets.append(param_widget) diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py index 76bc2dec9..96fdb2b33 100644 --- a/vistrails/gui/theme.py +++ b/vistrails/gui/theme.py @@ -311,6 +311,8 @@ def __init__(self): self.MODULE_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_FONT) self.MODULE_DESC_FONT = QtGui.QFont("Arial", 12) self.MODULE_DESC_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_DESC_FONT) + self.MODULE_EDIT_FONT = QtGui.QFont("Arial", 10) + self.MODULE_EDIT_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_EDIT_FONT) # Font for version text self.VERSION_FONT = QtGui.QFont("Arial", 15, QtGui.QFont.Bold) From 4ea2b02e1b11da2f4e8b5f455ca28486ef9bef40 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 20 Aug 2014 15:38:39 +0200 Subject: [PATCH 096/194] Fixed hiding module edit widgets in read-only mode gui/pipeline_view.py: setupModule needs to be called with the read_only flag set --- vistrails/gui/pipeline_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 4089203b0..7c2f8a9dd 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -2109,7 +2109,7 @@ def addModule(self, module, moduleBrush=None): matched = self.controller.search.matchModule(*moduleQuery) moduleItem.setGhosted(not matched) moduleItem.controller = self.controller - moduleItem.setupModule(module) + moduleItem.setupModule(module, self.read_only_mode) moduleItem.setBreakpoint(module.is_breakpoint) if moduleBrush: moduleItem.set_custom_brush(moduleBrush) From 831aec119f39b777826d1b53f1c9e7bb82512ec4 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 21 Aug 2014 16:51:33 +0200 Subject: [PATCH 097/194] Fixed error adding transfer function to edit widget Transfer function widget try to access scene before it is initialized because of update_function_ports being called gui/pipeline_view.py: - create_tf_items: Skip if scene not initialized and items to delete exist packages/vtk/tf_widget.py: - setupModule: call update_function_ports last --- vistrails/gui/pipeline_view.py | 3 ++- vistrails/packages/vtk/tf_widget.py | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 7c2f8a9dd..2740dfb58 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1621,7 +1621,6 @@ def setupModule(self, module, read_only=False): except ModuleRegistryException, e: error = e - self.update_function_ports() if self.value_edit: if hasattr(self.edit_widget, 'GraphicsItem'): @@ -1631,6 +1630,8 @@ def setupModule(self, module, read_only=False): if self.functions_widget: self.functions_widget.setPos(self.editRect.topLeft()) + self.update_function_ports() + else: self.setInvalid(True) diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index c1c2dfcdc..162b7c74e 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -371,8 +371,8 @@ def add_self_to_transfer_function(self, tf): class TransferFunctionPolygon(QtGui.QGraphicsPolygonItem): - def __init__(self, scene, parent=None): - QtGui.QGraphicsPolygonItem.__init__(self, parent, scene) + def __init__(self, parent=None): + QtGui.QGraphicsPolygonItem.__init__(self, parent) def setup(self): # This inspects the scene, finds the left-most point, and @@ -509,7 +509,7 @@ def __init__(self, param, parent=None): else: self._tf = TransferFunction.parse(param.strValue) self._tf_items = [] - poly = TransferFunctionPolygon(self.scene(), self) + poly = TransferFunctionPolygon(self) poly.setup() self._tf_poly = poly self.create_tf_items(self._tf) @@ -546,6 +546,8 @@ def reset_transfer_function(self, tf): self._tf_poly.setup() def create_tf_items(self, tf): + if self._tf_items and not self.scene(): # not added to scene yet + return items = copy.copy(self._tf_items) for item in items: self.scene().removeItem(item) From 4b7fb9411fa2dad911e2c1d6651914b62ba2d1e4 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 21 Aug 2014 19:01:35 +0200 Subject: [PATCH 098/194] Added missing contentsChanged signal in packages/vtk/tf_widget.py --- vistrails/packages/vtk/tf_widget.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index 162b7c74e..414f43e44 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -640,6 +640,7 @@ def focusOutEvent(self, event): default_tf.add_point(1.0, 0.0, (0.0, 0.0, 0.0)) class TransferFunctionWidget(QtGui.QWidget, ConstantWidgetMixin): + contentsChanged = QtCore.pyqtSignal(tuple) GraphicsItem = QGraphicsTransferFunction From 48d71681e6ab4d7a00acc2704e6b420b42860a49 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 21 Aug 2014 19:03:03 +0200 Subject: [PATCH 099/194] Added tooltip to module edit widget funtion name gui/pipeline_view.py: - QGraphicsFunctionWidget: Show parameter types as tooltip for name label --- vistrails/gui/pipeline_view.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 2740dfb58..ea5555d07 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -55,6 +55,8 @@ from vistrails.core.system import get_vistrails_basic_pkg_id from vistrails.core.vistrail.location import Location from vistrails.core.vistrail.module import Module +from vistrails.core.vistrail.module_function import ModuleFunction +from vistrails.core.vistrail.module_param import ModuleParam from vistrails.core.vistrail.port import PortEndPoint from vistrails.core.vistrail.port_spec import PortSpec from vistrails.core.interpreter.base import AbortExecution @@ -68,7 +70,7 @@ from vistrails.gui.module_info import QModuleInfo from vistrails.gui.module_palette import QModuleTreeWidget from vistrails.gui.modules.utils import get_widget_class -from vistrails.gui.ports_pane import Parameter, Function +from vistrails.gui.ports_pane import Parameter from vistrails.gui.theme import CurrentTheme from vistrails.gui.utils import getBuilderWindow from vistrails.gui.variable_dropbox import QDragVariableLabel @@ -3332,8 +3334,15 @@ def __init__(self, module, parent=None): for port_spec in module.destinationPorts(): if port_spec.name in module.editable_input_ports: # create default dummies - params = [Parameter(psi.descriptor, psi) for psi in port_spec.items] - function = Function(port_spec.name, params, port_spec) + params = [] + for psi in port_spec.items: + param = ModuleParam(type=psi.descriptor.name, + identifier=psi.descriptor.identifier, + namespace=psi.descriptor.namespace) + param.port_spec_item = psi + params.append(param) + function = ModuleFunction(name=port_spec.name, + parameters=params) for f in module.functions: if f.name == port_spec.name: function = f @@ -3374,9 +3383,23 @@ def __init__(self, function, parent=None): fname = QtGui.QGraphicsTextItem(name, self) fname.setFont(CurrentTheme.MODULE_EDIT_FONT) fname.setPos(-5, -5) + + names = [] + sigstring = function.sigstring + for sig in sigstring[1:-1].split(','): + k = sig.split(':', 2) + if len(k) < 2: + names.append(k[0]) + else: + names.append(k[1]) + short_sigstring = '(' + ','.join(names) + ')' + tooltip = function.name + short_sigstring + fname.setToolTip(tooltip) + height += 10 for i in xrange(len(function.parameters)): param = function.parameters[i] + Widget = get_widget_class(function.get_spec('input').items[i].descriptor) if hasattr(Widget, 'GraphicsItem'): param_widget = Widget.GraphicsItem(param, self) From 3a116d7ef47f3bf113b30b746e3b2eaf3a0a598b Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 21 Aug 2014 22:36:47 +0200 Subject: [PATCH 100/194] Use pencil icon for edit widget visibility Changed 'E' icon to pencil icon in: gui/module_info.py gui/ports_pane.py New images: gui/resources/images/pencil-disabled.png gui/resources/images/pencil.png --- vistrails/gui/module_info.py | 3 ++- vistrails/gui/ports_pane.py | 6 ++++-- .../gui/resources/images/pencil-disabled.png | Bin 0 -> 711 bytes vistrails/gui/resources/images/pencil.png | Bin 0 -> 465 bytes 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 vistrails/gui/resources/images/pencil-disabled.png create mode 100644 vistrails/gui/resources/images/pencil.png diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index 40b074579..07b76da10 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -80,7 +80,8 @@ def addButtonsToToolbar(self): self.showTypesAction.setChecked(True) self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, self.showTypesAction) - self.showEditsAction = QtGui.QAction(letterIcon('E'), + self.showEditsAction = QtGui.QAction(QtGui.QIcon(os.path.join(vistrails_root_directory(), + 'gui/resources/images/pencil.png')), "Show/hide edit widget toggle buttons", None, triggered=self.showEdits) diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index d199ed6d5..ba6e709ef 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -290,8 +290,10 @@ def get_widget(self): return self.build_widget(get_widget_class, True) class PortItem(QtGui.QTreeWidgetItem): - edit_show = letterIcon('E') - edit_hide = letterIcon('E', True) + edit_show = QtGui.QIcon(os.path.join(vistrails_root_directory(), + 'gui/resources/images/pencil.png')) + edit_hide = QtGui.QIcon(os.path.join(vistrails_root_directory(), + 'gui/resources/images/pencil-disabled.png')) eye_open_icon = \ QtGui.QIcon(os.path.join(vistrails_root_directory(), 'gui/resources/images/eye.png')) diff --git a/vistrails/gui/resources/images/pencil-disabled.png b/vistrails/gui/resources/images/pencil-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe75908c7eeb7f594be3d3f214a01ad3eed5d96 GIT binary patch literal 711 zcmV;&0yzDNP)kdg00001b5ch_0Itp) z=>Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2o)3-GYc@}{r~_1SxH1eR7l5_ zl`(JAP!xqfiAa`EWeN=tkO%>_Fm&~wKuY@qBH_s^Ll9#ZBs#M)TNxNYT_bg@P(+#u z42_E@l|W3LXoP_dm%;XX*Uv^3*Gug8&dI&!+;<-|M~{%06d@xeCZq?zCOaH+!Y)HD zG($Z?GNj?j2=UbWlsk2JzY(gRK3!JWV2&`YX5kU5jSEIZ1O!BkSg4g454gx2VQAq# zpUjqoh!%RSMMPrOQ+!|pVb}hNnOh2eKnGYyiZZgiX>+#7Xs#*h zaCnRm6{ucWz(V<6rEuZ*I7Mg`treCAj+Ak2heE?w`HHZ|5~IRQ(nE1rwx3 zv81FnB3c{E1|0)1W2kZAeXLAp;}oVrjkGqURR8( zQaFdn9_IiU7r(zd##xFjb)219oX`effRH%8mlVJFX$FevzCUK9B?Q3p;%%>D9QbS* zcx*pELhy=)%C&gY2uBUoLz_NK5d>dRZA{p)(K#a|m11LwZm{BQsO002ovPDHLkV1nVWDQExy literal 0 HcmV?d00001 diff --git a/vistrails/gui/resources/images/pencil.png b/vistrails/gui/resources/images/pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..c112902774b31dbaef907a327c5999b5c7fde502 GIT binary patch literal 465 zcmV;?0WSWDP)kdg0004)Nkl=a?Z}1xqXAsZtf8L+@^--`9vnsYMn9{6Zt)@lImR%sfqn-*oCiLnsY$IJX z=krCOq7T54bTK8XW1b0N+l+BdfMH=FkC#Qw9_j=g!j`(VSrUGmGNj*_pXs6ry+TEu zj$0PKx(J{`wmAG}GjDBHTMVNL#?OqC- z&eiaBJs1*cPqZGyUkRW0;oPjxJFFyrb{{@qw;u2GM)V`jQ4n711J~cOGcQb1?S` Date: Tue, 26 Aug 2014 17:46:21 +0200 Subject: [PATCH 101/194] Fixed module text scaling on Linux Also fixed abstract upgrade icon position --- vistrails/gui/pipeline_view.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index ea5555d07..2eff8ac39 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1224,7 +1224,6 @@ def computeBoundingRect(self): # set pos to distance to top middle corner, to be adjusted when # paddedRect is known labelRect = self.labelFontMetric.boundingRect(self.label) - labelRect.setHeight(labelRect.height()+1) # fix cut off bottoms labelRect.moveTo(-labelRect.width()/2, height) height += labelRect.height() padding = labelRect.adjusted(-CurrentTheme.MODULE_LABEL_MARGIN[0], 0, @@ -1265,9 +1264,9 @@ def computeBoundingRect(self): self.editRect = editRect self.abstRect = QtCore.QRectF( self.paddedRect.left(), - -self.labelRect.top()-CurrentTheme.MODULE_PORT_MARGIN[3], - labelRect.left()-self.paddedRect.left(), - self.paddedRect.bottom()+self.labelRect.top()) + -self.paddedRect.top()-CurrentTheme.MODULE_LABEL_MARGIN[3], + CurrentTheme.MODULE_LABEL_MARGIN[0], + CurrentTheme.MODULE_LABEL_MARGIN[3]) def boundingRect(self): """ boundingRect() -> QRectF @@ -1408,12 +1407,12 @@ def paint(self, painter, option, widget=None): # draw module labels painter.setPen(self.labelPen) painter.setFont(self.labelFont) - painter.drawText(self.labelRect, QtCore.Qt.AlignCenter, self.label) + painter.drawText(self.labelRect.adjusted(-10,-10,10,10), QtCore.Qt.AlignCenter, self.label) if self.module.is_abstraction() and not self.module.is_latest_version(): painter.drawText(self.abstRect, QtCore.Qt.AlignCenter, '!') if self.descRect: painter.setFont(self.descFont) - painter.drawText(self.descRect, QtCore.Qt.AlignCenter, + painter.drawText(self.descRect.adjusted(-10,-10,10,10), QtCore.Qt.AlignCenter, self.description) def paintToPixmap(self, scale_x, scale_y): @@ -1917,7 +1916,7 @@ def hoverEnterEvent(self, event): if self.function_widget: self.scene().removeItem(self.function_widget) self.function_widget = QtGui.QGraphicsTextItem() - pos = self.abstRect.bottomLeft()+self.pos() + pos = self.paddedRect.bottomLeft()+self.pos() self.function_widget.setPos(pos) self.function_widget.setAcceptHoverEvents(False) self.scene().addItem(self.function_widget) @@ -3383,7 +3382,6 @@ def __init__(self, function, parent=None): fname = QtGui.QGraphicsTextItem(name, self) fname.setFont(CurrentTheme.MODULE_EDIT_FONT) fname.setPos(-5, -5) - names = [] sigstring = function.sigstring for sig in sigstring[1:-1].split(','): @@ -3395,8 +3393,8 @@ def __init__(self, function, parent=None): short_sigstring = '(' + ','.join(names) + ')' tooltip = function.name + short_sigstring fname.setToolTip(tooltip) - - height += 10 + height += bounds(name).height() + for i in xrange(len(function.parameters)): param = function.parameters[i] From e4f8dbedf24e6cca7e0b0a023b7684eb585a56c2 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 26 Aug 2014 18:06:40 +0200 Subject: [PATCH 102/194] Fixed children of proxied module edit widget being rendered inside graphicsview gui/pipeline_view.py: Set Qt.BypassGraphicsProxyWidget flag on proxied widgets so that children are rendered as normal widgets --- vistrails/gui/pipeline_view.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 2eff8ac39..e788064cc 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1501,6 +1501,7 @@ def setupModule(self, module, read_only=False): SCALE = 3.0/4 self.value_edit = Widget(param) self.value_edit.setMaximumSize(150.0/SCALE, 150.0/SCALE) + self.value_edit.setWindowFlags(QtCore.Qt.BypassGraphicsProxyWidget) proxy = QtGui.QGraphicsProxyWidget(self) proxy.setWidget(self.value_edit) proxy.setScale(SCALE) @@ -3419,6 +3420,7 @@ def __init__(self, function, parent=None): else: param_widget = Widget(param) param_widget.setMaximumSize(width/SCALE, width/SCALE) + param_widget.setWindowFlags(QtCore.Qt.BypassGraphicsProxyWidget) proxy = QtGui.QGraphicsProxyWidget(self) proxy.setWidget(param_widget) proxy.setScale(SCALE) From c129cf65bdf291f1907158a60adf92996c01e5a0 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 27 Aug 2014 15:44:24 +0200 Subject: [PATCH 103/194] QGraphicsTransferFunction now use standard coordinate system This makes it easier to add graphicswidgets for other constant types Also adjusted edit widget bottom margin core/theme.py: Changed edit widget bottom margin from 2 to 4 gui/pipeline_view.py: Removed special transformation needed by qgraphicstransferfunction packages/vtk/tf_widget.py: Transform qgraphicstransferfunction to normal coordinate system --- vistrails/core/theme.py | 2 +- vistrails/gui/pipeline_view.py | 18 ++++-------------- vistrails/packages/vtk/tf_widget.py | 14 +++++++++----- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/vistrails/core/theme.py b/vistrails/core/theme.py index 2c0e7faa8..9674d6926 100644 --- a/vistrails/core/theme.py +++ b/vistrails/core/theme.py @@ -64,7 +64,7 @@ def __init__(self): self.MODULE_LABEL_MARGIN = (20, 20, 20, 15) # Padded space of Module shape into its edit widget - self.MODULE_EDIT_MARGIN = (8, 4, 8, 2) + self.MODULE_EDIT_MARGIN = (8, 4, 8, 4) # Margin of Module shape into its ports self.MODULE_PORT_MARGIN = (4, 4, 4, 4) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index e788064cc..36cba91bb 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1485,18 +1485,11 @@ def setupModule(self, module, read_only=False): rect = self.value_edit.boundingRect() self.value_edit.setZValue(self.zValue()+0.2) bg = QtGui.QGraphicsRectItem(rect, self.value_edit) - # TODO COLOR bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) bg.setZValue(-1) scale = max(rect.width(), rect.height()) - transform = self.value_edit.transform() - # transfer function needs to be inverted right now - transform.scale(150.0/scale,-150.0/scale) - transform.translate(0, -rect.height()) - self.value_edit.setTransform(transform) + self.value_edit.setScale(150.0/scale) rect.setSize(rect.size()*150.0/scale) - rect.setHeight(rect.height()+4) - self.edit_rect = rect else: SCALE = 3.0/4 self.value_edit = Widget(param) @@ -1508,7 +1501,8 @@ def setupModule(self, module, read_only=False): rect = self.value_edit.geometry() #proxy.boundingRect() rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled rect.moveTo(0.0,0.0) - self.edit_rect = rect + rect.setHeight(rect.height()+2) # need to add expected parameter gap + self.edit_rect = rect self.value_edit.contentsChanged.connect(self.value_changed) if module.is_valid and not read_only and not get_module_registry( @@ -3410,11 +3404,7 @@ def __init__(self, function, parent=None): bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) bg.setZValue(-1) scale = max(rect.width(), rect.height()) - transform = param_widget.transform() - # transfer function needs to be inverted right now - transform.scale(width/scale,-width/scale) - transform.translate(0, -rect.height()) - param_widget.setTransform(transform) + param_widget.setScale(width/scale) rect.setSize(rect.size()*width/scale) param_widget.setPos(0, height) else: diff --git a/vistrails/packages/vtk/tf_widget.py b/vistrails/packages/vtk/tf_widget.py index 414f43e44..bfbba6496 100644 --- a/vistrails/packages/vtk/tf_widget.py +++ b/vistrails/packages/vtk/tf_widget.py @@ -516,7 +516,7 @@ def __init__(self, param, parent=None): self._tf_poly.setup() #current scale self._sx = 1.0 - self._sy = 1.0 + self._sy = 1.0 # Add outlines line_color = QtGui.QColor(200, 200, 200) pen = QtGui.QPen(line_color) @@ -529,13 +529,16 @@ def __init__(self, param, parent=None): for i in xrange(51): u = GLOBAL_SCALE * float(i) / 50.0 - + line = QtGui.QGraphicsLineItem(QtCore.QLineF(u, 0.0, u, GLOBAL_SCALE), self) line.setPen(pen) line = QtGui.QGraphicsLineItem(QtCore.QLineF(0.0, u, GLOBAL_SCALE, u), self) line.setPen(pen) self.setGeometry(self.boundingRect()) + # restore y axis inversion + self.setTransform(QtGui.QTransform(1, 0, 0, -1, 0, GLOBAL_SCALE)) + self.setTransformOriginPoint(0, GLOBAL_SCALE) def boundingRect(self): return QtCore.QRectF(0.0, 0.0, GLOBAL_SCALE, GLOBAL_SCALE) @@ -544,7 +547,7 @@ def reset_transfer_function(self, tf): self.create_tf_items(tf) self.update_scale(self._sx, self._sy) self._tf_poly.setup() - + def create_tf_items(self, tf): if self._tf_items and not self.scene(): # not added to scene yet return @@ -628,7 +631,7 @@ def __init__(self, parent=None): def resizeEvent(self, event): self.resetMatrix() self.setMatrix(QtGui.QMatrix(event.size().width() / (GLOBAL_SCALE *10.0/9) , 0, - 0, -event.size().height() / (GLOBAL_SCALE*10.0/9), 0, 0)) + 0, event.size().height() / (GLOBAL_SCALE*10.0/9), GLOBAL_SCALE, 0)) self.scene().tf.update_scale(event.size().width()/(2000.0/9), event.size().height()/(2000.0/9)) def focusOutEvent(self, event): @@ -657,7 +660,8 @@ def __init__(self, param, parent=None): self._view.show() self._view.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) - self._view.setMatrix(QtGui.QMatrix(1, 0, 0, -1, 0, 0)) + # TODO remove this + self._view.setMatrix(QtGui.QMatrix(1, 0, 0, -1, GLOBAL_SCALE, 0)) self.setMinimumSize(260,240) caption = QtGui.QLabel("Double-click on the line to add a point") font = QtGui.QFont('Arial', 11) From ff902a64faec744c87628e08823ddedc1af1231d Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 29 Aug 2014 21:48:10 +0200 Subject: [PATCH 104/194] Added native GraphicsItem version of StandardConstantWidget This is now the default for String/Float/Int gui/modules/constant_configuration.py: - QGraphicsLineEdit: *new Extends QGraphicsTextItem to fully support unlimited single-line strings The tricky part was to scroll to the cursor for overflowing strings gui/pipeline_view.py: Background needs to pass focusIn to the widget because its clickable area is just on the existing text - update_module_color: Recreate module if visible function has been deleted --- .../gui/modules/constant_configuration.py | 81 +++++++++++++++++++ vistrails/gui/pipeline_view.py | 46 ++++++++--- 2 files changed, 116 insertions(+), 11 deletions(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index e7feddce8..0106c860e 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -147,8 +147,89 @@ def setFree(self, is_free): def setNonEmpty(self, is_non_empty): pass +class QGraphicsLineEdit(QtGui.QGraphicsTextItem, ConstantWidgetBase): + """ A GraphicsItem version of ConstantWidget + + """ + contentsChanged = QtCore.pyqtSignal(tuple) + def __init__(self, param, parent=None): + QtGui.QGraphicsTextItem.__init__(self, parent) + self.setTextInteractionFlags(QtCore.Qt.TextEditorInteraction) + self.setTabChangesFocus(True) + self.setFont(CurrentTheme.MODULE_EDIT_FONT) + self.installEventFilter(self) + self.offset = 0 + self.document().setDocumentMargin(1) + ConstantWidgetBase.__init__(self, param) + self.document().contentsChanged.connect(self.ensureCursorVisible) + + def setContents(self, value, silent=False): + self.setPlainText(expression.evaluate_expressions(value)) + if not silent: + self.update_parent() + block = self.document().firstBlock() + w = self.document().documentLayout().blockBoundingRect(block).width() + self.offset = max(w - 140, 0) + block.layout().lineAt(0).setPosition(QtCore.QPointF(-self.offset,0)) + + def contents(self): + contents = expression.evaluate_expressions(unicode(self.toPlainText())) + self.setPlainText(contents) + return contents + + def setDefault(self, value): + self.setContents(value, silent=True) + + def boundingRect(self): + return QtCore.QRectF(0.0, 0.0, 150, 14) + + def eventFilter(self, obj, event): + if event.type() == QtCore.QEvent.KeyPress and \ + event.key() in [QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]: + self.clearFocus() + return True + result = QtGui.QGraphicsTextItem.eventFilter(self, obj, event) + if event.type() in [QtCore.QEvent.KeyPress, QtCore.QEvent.MouseButtonPress, QtCore.QEvent.GraphicsSceneMouseMove]: + if not self.hasFocus(): + self.setFocus() + self.ensureCursorVisible() + return result + + def ensureCursorVisible(self): + block = self.document().firstBlock() + line = block.layout().lineAt(0) + pos = line.cursorToX(self.textCursor().positionInBlock()) + cursor = self.document().documentLayout().blockBoundingRect(\ + block).y() + pos[0] - line.position().x() + w = self.document().documentLayout().blockBoundingRect(block).width() + if cursor - self.offset > 130: + self.offset = min(w-140, self.offset + 25) + if cursor - self.offset < 20: + self.offset = max(0, self.offset - 25) + line.setPosition(QtCore.QPointF(-self.offset,0)) + self.update() + + def focusOutEvent(self, event): + self.update_parent() + result = QtGui.QGraphicsTextItem.focusOutEvent(self, event) + # show last part of text + block = self.document().firstBlock() + w = self.document().documentLayout().blockBoundingRect(block).width() + self.offset = max(w - 140, 0) + block.layout().lineAt(0).setPosition(QtCore.QPointF(-self.offset,0)) + return result + + def focusInEvent(self, event): + result = QtGui.QGraphicsTextItem.focusInEvent(self, event) + # set cursor to last if not already set + cursor = self.textCursor() + cursor.setPosition(self.document().firstBlock().length()-1) + self.setTextCursor(cursor) + return result + class StandardConstantWidget(QtGui.QLineEdit,ConstantWidgetBase): contentsChanged = QtCore.pyqtSignal(tuple) + GraphicsItem = QGraphicsLineEdit def __init__(self, param, parent=None): QtGui.QLineEdit.__init__(self, parent) ConstantWidgetBase.__init__(self, param) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 36cba91bb..1e322ccc4 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1093,7 +1093,7 @@ def module_text_has_changed(m1, m2): # m2_has, since m1_has and previous condition m1.db_annotations_key_index['__desc__'].value.strip()!= m2.db_annotations_key_index['__desc__'].value.strip()): - return True + return True return False # def module_functions_have_changed(m1, m2): @@ -1481,15 +1481,14 @@ def setupModule(self, module, read_only=False): param = function.parameters[0] if hasattr(Widget, 'GraphicsItem'): self.value_edit = Widget.GraphicsItem(param, self) - # resize to 150 rect = self.value_edit.boundingRect() - self.value_edit.setZValue(self.zValue()+0.2) - bg = QtGui.QGraphicsRectItem(rect, self.value_edit) - bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) - bg.setZValue(-1) scale = max(rect.width(), rect.height()) self.value_edit.setScale(150.0/scale) rect.setSize(rect.size()*150.0/scale) + self.edit_bg = QtGui.QGraphicsRectItem(rect, self) + self.edit_bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) + self.edit_bg.setZValue(-1) + self.edit_bg.mousePressEvent = lambda e:self.value_edit.setFocus() else: SCALE = 3.0/4 self.value_edit = Widget(param) @@ -1621,6 +1620,7 @@ def setupModule(self, module, read_only=False): if self.value_edit: if hasattr(self.edit_widget, 'GraphicsItem'): self.value_edit.setPos(self.editRect.topLeft()) + self.edit_bg.setPos(self.editRect.topLeft()) else: proxy.setPos(self.editRect.topLeft()) if self.functions_widget: @@ -2239,6 +2239,28 @@ def recreate_module(self, pipeline, m_id): self.modules[m_id].setSelected(True) def update_module_functions(self, pipeline, m_id): + module = pipeline.modules[m_id] + if get_module_registry().is_constant_module( + module.module_descriptor.module): + found = False + for function in module.functions: + if function.name == 'value': + found = True + if not found: + # function deleted so we need to recreate + self.recreate_module(pipeline, m_id) + return + + # check if a visible function has been deleted + for port in module.editable_input_ports: + found = False + for function in module.functions: + if function.name == port: + found = True + if not found: + # function deleted so we need to recreate + self.recreate_module(pipeline, m_id) + return self.modules[m_id].update_function_ports(pipeline.modules[m_id]) def setupScene(self, pipeline): @@ -3399,13 +3421,15 @@ def __init__(self, function, parent=None): # resize to 150 rect = param_widget.boundingRect() param_widget.setZValue(self.zValue()+0.2) - bg = QtGui.QGraphicsRectItem(rect, param_widget) - # TODO COLOR - bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) - bg.setZValue(-1) scale = max(rect.width(), rect.height()) param_widget.setScale(width/scale) rect.setSize(rect.size()*width/scale) + bg = QtGui.QGraphicsRectItem(rect, self) + # TODO COLOR + bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) + bg.setZValue(-1) + bg.setPos(0, height) + bg.mousePressEvent = lambda e:param_widget.setFocus() param_widget.setPos(0, height) else: param_widget = Widget(param) @@ -3432,7 +3456,7 @@ def param_changed(self, values): def setContents(self, values): for pw, value in zip(self.param_widgets, values): - pw.setContents(value) + pw.setContents(value, silent=True) def boundingRect(self): return self.bounds From a42b4c83084382ca17bdc88bf925fa84e7ccc81a Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 3 Sep 2014 14:41:46 +0200 Subject: [PATCH 105/194] Fixed focus-clicking always focusing last inline parameter widget --- vistrails/gui/pipeline_view.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 1e322ccc4..4fbe546c9 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3429,7 +3429,9 @@ def __init__(self, function, parent=None): bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) bg.setZValue(-1) bg.setPos(0, height) - bg.mousePressEvent = lambda e:param_widget.setFocus() + def get_focusable(widget): + return lambda e:widget.setFocus() + bg.mousePressEvent = get_focusable(param_widget) param_widget.setPos(0, height) else: param_widget = Widget(param) From e87a31035d8bf77358da20bf7ce4f1815082664b Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 3 Sep 2014 14:42:39 +0200 Subject: [PATCH 106/194] Fixed QGraphicsLineEdit not resizing when using different font --- vistrails/gui/modules/constant_configuration.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 0106c860e..bfb3afaa7 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -181,7 +181,9 @@ def setDefault(self, value): self.setContents(value, silent=True) def boundingRect(self): - return QtCore.QRectF(0.0, 0.0, 150, 14) + # calc font height + height = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect('Fg').height() + return QtCore.QRectF(0.0, 0.0, 150, height + 4) def eventFilter(self, obj, event): if event.type() == QtCore.QEvent.KeyPress and \ From a323230524d3d08f5235b85a5021ba7745cb57f1 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 3 Sep 2014 16:11:43 +0200 Subject: [PATCH 107/194] Added configuration option setInlineParameterWidgets This controls if module edit widgets and the icons to add them are visible core/configuration.py: New bool option setInlineParameterWidgets gui/module_info.py: Toggle setInlineParameterWidgets when edit button is pressed gui/pipeline_view.py: Show module edit widgets if setInlineParameterWidgets is true Adjusted function name pos by -1,-1 gui/ports_pane.py: Display edit toggle buttons if setInlineParameterWidgets is true --- vistrails/core/configuration.py | 6 ++++++ vistrails/gui/module_info.py | 9 +++++---- vistrails/gui/pipeline_view.py | 16 ++++++++++++---- vistrails/gui/ports_pane.py | 5 +++-- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 823e56d0f..3d4d11667 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -104,6 +104,7 @@ shell.fontSize: Console Font Size showConnectionErrors: Show error when input value doesn't match type during execution showDebugPopups: Always bring debug messages to the front +showInlineParameterWidgets: Show editable parameters inside modules showScrollbars: Show scrollbars on the version tree and workflow canvases showSplash: Show VisTrails splash screen during startup showSpreadsheetOnly: Hides the VisTrails main window @@ -512,6 +513,10 @@ Output the workflow graph as an image. +showInlineParameterWidgets: Boolean + + Show editable parameters inside modules + """ class ConfigType(object): @@ -659,6 +664,7 @@ def __init__(self, name, sub_fields): ConfigField('showVariantErrors', True, bool, ConfigType.SHOW_HIDE), ConfigField('showDebugPopups', False, bool, ConfigType.SHOW_HIDE), ConfigField('showScrollbars', True, bool, ConfigType.SHOW_HIDE), + ConfigField('showInlineParameterWidgets', False, bool, ConfigType.SHOW_HIDE), ConfigFieldParent('shell', [ConfigField('fontFace', system.shell_font_face(), str), ConfigField('fontSize', system.shell_font_size(), int)]), diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index 07b76da10..762c84ced 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -35,6 +35,7 @@ from PyQt4 import QtCore, QtGui from vistrails.core.system import systemType, vistrails_root_directory +from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.utils import versions_increasing from vistrails.gui.common_widgets import QDockPushButton from vistrails.gui.module_annotation import QModuleAnnotationTable @@ -49,7 +50,7 @@ def __init__(self, parent=None, flags=QtCore.Qt.Widget): QtGui.QWidget.__init__(self, parent, flags) self.ports_visible = True self.types_visible = True - self.edits_visible = False + self.build_widget() self.controller = None self.module = None @@ -99,8 +100,9 @@ def showTypes(self, checked): self.update_module(self.module) def showEdits(self, checked): - self.edits_visible = checked - self.update_module(self.module) + get_vistrails_configuration().showInlineParameterWidgets = checked + scene = self.controller.current_pipeline_scene + scene.setupScene(self.controller.current_pipeline) def build_widget(self): name_label = QtGui.QLabel("Name:") @@ -201,7 +203,6 @@ def set_controller(self, controller): def update_module(self, module=None): for plist in self.ports_lists: plist.types_visible = self.types_visible - plist.edits_visible = self.edits_visible plist.ports_visible = self.ports_visible self.module = module for ports_list in self.ports_lists: diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 4fbe546c9..1a66cc3fa 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1077,6 +1077,8 @@ def __init__(self, parent=None, scene=None): self.connectionItems = {} self._cur_function_names = set() self.function_overview = 'No functions set' + self.show_widgets = get_vistrails_configuration( + ).check('showInlineParameterWidgets') self.function_widget = None self.function_widgets = [] self.functions_widget = None @@ -1101,7 +1103,10 @@ def module_text_has_changed(m1, m2): # f2_names = set([f.name for f in m2.functions]) # return (len(f1_names ^ f2_names) > 0) - if self.scenePos().x() != core_module.center.x or \ + if self.show_widgets != get_vistrails_configuration( + ).check('showInlineParameterWidgets'): + return True + elif self.scenePos().x() != core_module.center.x or \ -self.scenePos().y() != core_module.center.y: return True elif module_text_has_changed(self.module, core_module): @@ -1470,7 +1475,8 @@ def setupModule(self, module, read_only=False): self.label = module.label self.description = '' - if module.is_valid and not read_only and get_module_registry( + if get_vistrails_configuration().check('showInlineParameterWidgets') and \ + module.is_valid and not read_only and get_module_registry( ).is_constant_module(self.module.module_descriptor.module): desc = self.module.module_descriptor Widget = get_widget_class(desc) @@ -1504,13 +1510,15 @@ def setupModule(self, module, read_only=False): self.edit_rect = rect self.value_edit.contentsChanged.connect(self.value_changed) - if module.is_valid and not read_only and not get_module_registry( + if get_vistrails_configuration().check('showInlineParameterWidgets') and \ + module.is_valid and not read_only and not get_module_registry( ).is_constant_module(self.module.module_descriptor.module) and \ module.editable_input_ports: self.functions_widget = QGraphicsFunctionsWidget(self.module, self) self.functions_widget.function_changed.connect(self.function_changed) self.function_widgets = self.functions_widget.function_widgets self.edit_rect = self.functions_widget.boundingRect() + self.setToolTip(self.description) self.computeBoundingRect() self.setPos(module.center.x, -module.center.y) @@ -3398,7 +3406,7 @@ def __init__(self, function, parent=None): fname = QtGui.QGraphicsTextItem(name, self) fname.setFont(CurrentTheme.MODULE_EDIT_FONT) - fname.setPos(-5, -5) + fname.setPos(-6, -6) names = [] sigstring = function.sigstring for sig in sigstring[1:-1].split(','): diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index ba6e709ef..fbaf7afc3 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -38,6 +38,7 @@ import string from vistrails.core import debug +from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.modules.basic_modules import identifier as basic_identifier from vistrails.core.modules.module_registry import get_module_registry from vistrails.core.modules.utils import create_port_spec_string @@ -420,7 +421,6 @@ def __init__(self, port_type, parent=None): self.entry_klass = ParameterEntry self.ports_visible = True self.types_visible = True - self.edits_visible = False def setReadOnly(self, read_only): self.setEnabled(not read_only) @@ -450,7 +450,8 @@ def update_module(self, module): reg = get_module_registry() descriptor = module.module_descriptor if self.port_type == 'input': - self.setColumnHidden(0, not self.edits_visible) + self.setColumnHidden(0,not get_vistrails_configuration( + ).check('showInlineParameterWidgets')) port_specs = module.destinationPorts() connected_ports = module.connected_input_ports visible_ports = module.visible_input_ports From d0bcc1ae7a1f1f9f840f487f5d513082b3412571 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 3 Sep 2014 23:33:31 +0200 Subject: [PATCH 108/194] Added ability to modify edit widgets on constant modules The default is still to show the widget for 'value' core/vistrail/module.py: Fixed _get_editable_input_ports returning [''] for empty strings Treat missing annotation on constant modules as ['value'] gui/pipeline_view.py: Do not show function name if ['value'] is only widget on constant module --- vistrails/core/vistrail/module.py | 9 ++++- vistrails/gui/pipeline_view.py | 66 ++++++++++++++++--------------- 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/vistrails/core/vistrail/module.py b/vistrails/core/vistrail/module.py index 3d8d4ea00..91544b2c1 100644 --- a/vistrails/core/vistrail/module.py +++ b/vistrails/core/vistrail/module.py @@ -265,8 +265,13 @@ def _set_module_descriptor(self, descriptor): def _get_editable_input_ports(self): if self.has_annotation_with_key(Module.INLINE_WIDGET_ANNOTATION): - return set(self.get_annotation_by_key( - Module.INLINE_WIDGET_ANNOTATION).value.split(',')) + values = self.get_annotation_by_key( + Module.INLINE_WIDGET_ANNOTATION).value.split(',') + return set() if values == [''] else set(values) + elif get_module_registry( + ).is_constant_module(self.module_descriptor.module): + # Show value by default on constant modules + return set(['value']) return set() editable_input_ports = property(_get_editable_input_ports) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 1a66cc3fa..3563fc45f 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1475,7 +1475,7 @@ def setupModule(self, module, read_only=False): self.label = module.label self.description = '' - if get_vistrails_configuration().check('showInlineParameterWidgets') and \ + if 0 and get_vistrails_configuration().check('showInlineParameterWidgets') and \ module.is_valid and not read_only and get_module_registry( ).is_constant_module(self.module.module_descriptor.module): desc = self.module.module_descriptor @@ -1511,10 +1511,10 @@ def setupModule(self, module, read_only=False): self.value_edit.contentsChanged.connect(self.value_changed) if get_vistrails_configuration().check('showInlineParameterWidgets') and \ - module.is_valid and not read_only and not get_module_registry( - ).is_constant_module(self.module.module_descriptor.module) and \ - module.editable_input_ports: - self.functions_widget = QGraphicsFunctionsWidget(self.module, self) + module.is_valid and not read_only and module.editable_input_ports:# and not get_module_registry( + #).is_constant_module(self.module.module_descriptor.module): + self.functions_widget = QGraphicsFunctionsWidget(self.module, + self, module.editable_input_ports == set(['value'])) self.functions_widget.function_changed.connect(self.function_changed) self.function_widgets = self.functions_widget.function_widgets self.edit_rect = self.functions_widget.boundingRect() @@ -3351,7 +3351,7 @@ class QGraphicsFunctionsWidget(QtGui.QGraphicsWidget): function_changed = QtCore.pyqtSignal(str, list) - def __init__(self, module, parent=None): + def __init__(self, module, parent=None, constant=None): QtGui.QGraphicsWidget.__init__(self, parent) self.function_widgets = [] height = 0 @@ -3370,7 +3370,7 @@ def __init__(self, module, parent=None): for f in module.functions: if f.name == port_spec.name: function = f - function_widget = QGraphicsFunctionWidget(function, self) + function_widget = QGraphicsFunctionWidget(function, self, constant) function_widget.setPos(0, height) function_widget.function_changed.connect(self.function_changed) self.function_widgets.append(function_widget) @@ -3387,7 +3387,7 @@ class QGraphicsFunctionWidget(QtGui.QGraphicsWidget): function_changed = QtCore.pyqtSignal(str, list) - def __init__(self, function, parent=None): + def __init__(self, function, parent=None, constant=None): QtGui.QGraphicsWidget.__init__(self, parent) self.function = function self.param_widgets = [] @@ -3395,30 +3395,32 @@ def __init__(self, function, parent=None): width = 150.0 height = 0 SCALE = 3.0/4 - # add name label - name = self.function.name - bounds = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect - editRect = bounds(name) - if editRect.width()>150: - while bounds(name + '...').width() > 150: - name = name[:-1] - name += '...' - - fname = QtGui.QGraphicsTextItem(name, self) - fname.setFont(CurrentTheme.MODULE_EDIT_FONT) - fname.setPos(-6, -6) - names = [] - sigstring = function.sigstring - for sig in sigstring[1:-1].split(','): - k = sig.split(':', 2) - if len(k) < 2: - names.append(k[0]) - else: - names.append(k[1]) - short_sigstring = '(' + ','.join(names) + ')' - tooltip = function.name + short_sigstring - fname.setToolTip(tooltip) - height += bounds(name).height() + if not constant: + # add name label + name = self.function.name + bounds = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect + editRect = bounds(name) + if editRect.width()>150: + while bounds(name + '...').width() > 150: + name = name[:-1] + name += '...' + fname = QtGui.QGraphicsTextItem(name, self) + fname.setFont(CurrentTheme.MODULE_EDIT_FONT) + fname.setPos(-6, -6) + + names = [] + sigstring = function.sigstring + for sig in sigstring[1:-1].split(','): + k = sig.split(':', 2) + if len(k) < 2: + names.append(k[0]) + else: + names.append(k[1]) + short_sigstring = '(' + ','.join(names) + ')' + tooltip = function.name + short_sigstring + fname.setToolTip(tooltip) + + height += bounds(name).height() for i in xrange(len(function.parameters)): param = function.parameters[i] From 20ebfc7251e9b7cd210ab9de695ff77b19ef789f Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 5 Sep 2014 18:00:05 +0200 Subject: [PATCH 109/194] Fixes to edit mode gui/module_info.py: Fixed edit mode not being persisted gui/pipeline_view.py: Made proxied widgets background transparent Correctly scale module width using widget width --- vistrails/gui/module_info.py | 18 ++++---- vistrails/gui/pipeline_view.py | 75 ++++++++++++---------------------- 2 files changed, 37 insertions(+), 56 deletions(-) diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index 762c84ced..e6ea9aae8 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -34,8 +34,9 @@ ############################################################################### from PyQt4 import QtCore, QtGui +from vistrails.core.configuration import get_vistrails_configuration, \ + get_vistrails_persistent_configuration from vistrails.core.system import systemType, vistrails_root_directory -from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.utils import versions_increasing from vistrails.gui.common_widgets import QDockPushButton from vistrails.gui.module_annotation import QModuleAnnotationTable @@ -81,13 +82,15 @@ def addButtonsToToolbar(self): self.showTypesAction.setChecked(True) self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, self.showTypesAction) - self.showEditsAction = QtGui.QAction(QtGui.QIcon(os.path.join(vistrails_root_directory(), - 'gui/resources/images/pencil.png')), - "Show/hide edit widget toggle buttons", - None, - triggered=self.showEdits) + self.showEditsAction = QtGui.QAction( + QtGui.QIcon(os.path.join(vistrails_root_directory(), + 'gui/resources/images/pencil.png')), + "Show/hide edit widget toggle buttons", + None, + triggered=self.showEdits) self.showEditsAction.setCheckable(True) - self.showEditsAction.setChecked(False) + self.showEditsAction.setChecked( + get_vistrails_configuration().check('showInlineParameterWidgets')) self.toolWindow().toolbar.insertAction(self.toolWindow().pinAction, self.showEditsAction) @@ -101,6 +104,7 @@ def showTypes(self, checked): def showEdits(self, checked): get_vistrails_configuration().showInlineParameterWidgets = checked + get_vistrails_persistent_configuration().showInlineParameterWidgets = checked scene = self.controller.current_pipeline_scene scene.setupScene(self.controller.current_pipeline) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 3563fc45f..49fd66a76 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -307,6 +307,8 @@ def remove_action(): callback) self.removeVarActions.append((removeVarAction, callback)) + + def removeVar(self, var_uuid): (to_delete_modules, to_delete_conns) = \ self.controller.get_disconnect_vistrail_vars( \ @@ -1475,41 +1477,6 @@ def setupModule(self, module, read_only=False): self.label = module.label self.description = '' - if 0 and get_vistrails_configuration().check('showInlineParameterWidgets') and \ - module.is_valid and not read_only and get_module_registry( - ).is_constant_module(self.module.module_descriptor.module): - desc = self.module.module_descriptor - Widget = get_widget_class(desc) - self.edit_widget = Widget - param = Parameter(desc) - for function in self.module.functions: - if function.name == 'value': - param = function.parameters[0] - if hasattr(Widget, 'GraphicsItem'): - self.value_edit = Widget.GraphicsItem(param, self) - rect = self.value_edit.boundingRect() - scale = max(rect.width(), rect.height()) - self.value_edit.setScale(150.0/scale) - rect.setSize(rect.size()*150.0/scale) - self.edit_bg = QtGui.QGraphicsRectItem(rect, self) - self.edit_bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) - self.edit_bg.setZValue(-1) - self.edit_bg.mousePressEvent = lambda e:self.value_edit.setFocus() - else: - SCALE = 3.0/4 - self.value_edit = Widget(param) - self.value_edit.setMaximumSize(150.0/SCALE, 150.0/SCALE) - self.value_edit.setWindowFlags(QtCore.Qt.BypassGraphicsProxyWidget) - proxy = QtGui.QGraphicsProxyWidget(self) - proxy.setWidget(self.value_edit) - proxy.setScale(SCALE) - rect = self.value_edit.geometry() #proxy.boundingRect() - rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled - rect.moveTo(0.0,0.0) - rect.setHeight(rect.height()+2) # need to add expected parameter gap - self.edit_rect = rect - self.value_edit.contentsChanged.connect(self.value_changed) - if get_vistrails_configuration().check('showInlineParameterWidgets') and \ module.is_valid and not read_only and module.editable_input_ports:# and not get_module_registry( #).is_constant_module(self.module.module_descriptor.module): @@ -1518,7 +1485,7 @@ def setupModule(self, module, read_only=False): self.functions_widget.function_changed.connect(self.function_changed) self.function_widgets = self.functions_widget.function_widgets self.edit_rect = self.functions_widget.boundingRect() - + self.setToolTip(self.description) self.computeBoundingRect() self.setPos(module.center.x, -module.center.y) @@ -3355,6 +3322,7 @@ def __init__(self, module, parent=None, constant=None): QtGui.QGraphicsWidget.__init__(self, parent) self.function_widgets = [] height = 0 + width = 0 for port_spec in module.destinationPorts(): if port_spec.name in module.editable_input_ports: # create default dummies @@ -3375,7 +3343,8 @@ def __init__(self, module, parent=None, constant=None): function_widget.function_changed.connect(self.function_changed) self.function_widgets.append(function_widget) height += function_widget.boundingRect().height() - self.bounds = QtCore.QRectF(0,0,150,height) + width = max(width,function_widget.boundingRect().width()) + self.bounds = QtCore.QRectF(0,0,width,height) def boundingRect(self): return self.bounds @@ -3392,21 +3361,24 @@ def __init__(self, function, parent=None, constant=None): self.function = function self.param_widgets = [] self.bounds = None - width = 150.0 + width = 0 height = 0 - SCALE = 3.0/4 + SCALE = 3.0/4 # make QWidgets a bit smaller than normal + MAX_WIDTH = 150 if not constant: # add name label name = self.function.name bounds = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect editRect = bounds(name) - if editRect.width()>150: - while bounds(name + '...').width() > 150: + if editRect.width()>MAX_WIDTH: + while bounds(name + '...').width() > MAX_WIDTH: name = name[:-1] name += '...' - fname = QtGui.QGraphicsTextItem(name, self) + editRect = bounds(name) + width = max(width, editRect.width()) + fname = QtGui.QGraphicsSimpleTextItem(name, self) fname.setFont(CurrentTheme.MODULE_EDIT_FONT) - fname.setPos(-6, -6) + fname.setPos(-2, -2) names = [] sigstring = function.sigstring @@ -3419,7 +3391,7 @@ def __init__(self, function, parent=None, constant=None): short_sigstring = '(' + ','.join(names) + ')' tooltip = function.name + short_sigstring fname.setToolTip(tooltip) - + height += bounds(name).height() for i in xrange(len(function.parameters)): @@ -3428,12 +3400,13 @@ def __init__(self, function, parent=None, constant=None): Widget = get_widget_class(function.get_spec('input').items[i].descriptor) if hasattr(Widget, 'GraphicsItem'): param_widget = Widget.GraphicsItem(param, self) - # resize to 150 + # resize to MAX_WIDTH rect = param_widget.boundingRect() param_widget.setZValue(self.zValue()+0.2) scale = max(rect.width(), rect.height()) - param_widget.setScale(width/scale) - rect.setSize(rect.size()*width/scale) + if scale>MAX_WIDTH: + param_widget.setScale(MAX_WIDTH/scale) + rect.setSize(rect.size()*MAX_WIDTH/scale) bg = QtGui.QGraphicsRectItem(rect, self) # TODO COLOR bg.setBrush(QtGui.QBrush(QtGui.QColor('#FFFFFF'))) @@ -3445,15 +3418,19 @@ def get_focusable(widget): param_widget.setPos(0, height) else: param_widget = Widget(param) - param_widget.setMaximumSize(width/SCALE, width/SCALE) + name = unicode(id(param_widget)) + param_widget.setStyleSheet('QWidget#%s{background-color:transparent};' % name) + param_widget.setObjectName(name) + param_widget.setMaximumSize(MAX_WIDTH/SCALE, MAX_WIDTH/SCALE) param_widget.setWindowFlags(QtCore.Qt.BypassGraphicsProxyWidget) proxy = QtGui.QGraphicsProxyWidget(self) proxy.setWidget(param_widget) proxy.setScale(SCALE) - rect = param_widget.geometry() #proxy.boundingRect() + rect = param_widget.geometry() rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled rect.moveTo(0.0,0.0) proxy.setPos(0, height) + width = max(width, rect.width()) rect.setHeight(rect.height()+2) # space between parameters height += rect.height() param_widget.contentsChanged.connect(self.param_changed) From 344c89f5c623c8c6f8c690bf97d0a80712aca5b1 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 5 Sep 2014 23:38:17 +0200 Subject: [PATCH 110/194] Use cyan border on string edit widget in modules gui/modules/constant_configuration.py: - QGraphicsLineEdit.paint: Draw custom cyan selection border --- vistrails/gui/modules/constant_configuration.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index bfb3afaa7..23e752c24 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -45,6 +45,7 @@ from vistrails.core import system from vistrails.gui.theme import CurrentTheme +import copy import os ############################################################################ @@ -229,6 +230,21 @@ def focusInEvent(self, event): self.setTextCursor(cursor) return result + def paint(self, painter, option, widget): + """ Override striped selection border + First unset selected and hasfocus flags + Then draw custom rect """ + s = QtGui.QStyle.State_Selected | QtGui.QStyle.State_HasFocus + state = s.__class__(option.state) # option.state + option.state &= ~s + painter.pen().setWidth(1) + result = QtGui.QGraphicsTextItem.paint(self, painter, option, widget) + option.state = state + if state & s: + painter.setPen(QtGui.QPen(QtCore.Qt.cyan,1)) + painter.drawRect(self.boundingRect()) + return result + class StandardConstantWidget(QtGui.QLineEdit,ConstantWidgetBase): contentsChanged = QtCore.pyqtSignal(tuple) GraphicsItem = QGraphicsLineEdit From 0c90e30430e6f16299c75f7b1b0317ffa734f1f8 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 8 Sep 2014 16:58:32 +0200 Subject: [PATCH 111/194] Do not recreate module when function is missing gui/pipeline_view.py: - update_module_functions: Handle case where function did not exist in the first place - QGraphicsFunctionWidget: Forward mouse-click when clicking in background so that text can be selected with double-, and triple-click. --- vistrails/gui/pipeline_view.py | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 49fd66a76..a4318cf43 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -2215,27 +2215,14 @@ def recreate_module(self, pipeline, m_id): def update_module_functions(self, pipeline, m_id): module = pipeline.modules[m_id] - if get_module_registry().is_constant_module( - module.module_descriptor.module): - found = False - for function in module.functions: - if function.name == 'value': - found = True - if not found: - # function deleted so we need to recreate - self.recreate_module(pipeline, m_id) - return - # check if a visible function has been deleted - for port in module.editable_input_ports: - found = False - for function in module.functions: - if function.name == port: - found = True - if not found: - # function deleted so we need to recreate - self.recreate_module(pipeline, m_id) - return + before = set([f.name for f in + self.controller.current_pipeline.modules[m_id].functions]) + after = set([f.name for f in module.functions]) + if (before - after) & module.editable_input_ports: + # function deleted so we need to recreate module with empty widget + self.recreate_module(pipeline, m_id) + return self.modules[m_id].update_function_ports(pipeline.modules[m_id]) def setupScene(self, pipeline): @@ -3413,7 +3400,7 @@ def __init__(self, function, parent=None, constant=None): bg.setZValue(-1) bg.setPos(0, height) def get_focusable(widget): - return lambda e:widget.setFocus() + return lambda e:widget.setFocus() or widget.mousePressEvent(e) bg.mousePressEvent = get_focusable(param_widget) param_widget.setPos(0, height) else: From 9ba4c227cb5f9030e46adb5970f682b840e05776 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 9 Sep 2014 20:51:32 +0200 Subject: [PATCH 112/194] Hide module edit widgets when zooming out gui/pipeline_view.py: set_lod: *new Check zoom distance before calling paint on widget and its children --- vistrails/gui/pipeline_view.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index a4318cf43..978324933 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1477,11 +1477,12 @@ def setupModule(self, module, read_only=False): self.label = module.label self.description = '' + # Show inline edit widgets if get_vistrails_configuration().check('showInlineParameterWidgets') and \ - module.is_valid and not read_only and module.editable_input_ports:# and not get_module_registry( - #).is_constant_module(self.module.module_descriptor.module): + module.is_valid and not read_only and module.editable_input_ports: self.functions_widget = QGraphicsFunctionsWidget(self.module, self, module.editable_input_ports == set(['value'])) + set_lod(0.5, self.functions_widget) self.functions_widget.function_changed.connect(self.function_changed) self.function_widgets = self.functions_widget.function_widgets self.edit_rect = self.functions_widget.boundingRect() @@ -3437,6 +3438,35 @@ def setContents(self, values): def boundingRect(self): return self.bounds +def set_lod(limit, item, lod=None): + """ Set level of detail by wrapping paint methods and checking limit. + This will set lod of all children, so different lod:s need to be set + top down. + + current_lod is calculated for the top item so that children scaling + is ignored + + currently the top widget cannot have a scale factor + + """ + paint = item.paint # store reference to original paint method + top_item = lod is None + if lod is None: + class Lod: + pass + lod = Lod() + lod.scale = item.scale() + def add_lod_paint(painter, option, widget): + if top_item: # fixes children having different scaling (also faster) + lod.current = option.levelOfDetailFromTransform( + painter.worldTransform()) + if lod.current < limit: + return + return paint(painter, option, widget) + item.paint = add_lod_paint + for i in item.childItems(): + set_lod(limit, i, lod) + class QModuleStatusEvent(QtCore.QEvent): """ QModuleStatusEvent is trying to handle thread-safe real-time From ec6534987b7cbfa8440a422446dcf72cd5d7e842 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 9 Sep 2014 21:52:59 +0200 Subject: [PATCH 113/194] Disabled keep_square for updateSceneBoundingRect It had no direct purpose, I am not sure it works correctly, and gives large wasteful margins on the sides. gui/graphics_view.py: - QInteractiveGraphicsScene.updateSceneBoundingRect: Set keep_square=False by default --- vistrails/gui/graphics_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/gui/graphics_view.py b/vistrails/gui/graphics_view.py index a3a82f3d3..3141fb3a0 100644 --- a/vistrails/gui/graphics_view.py +++ b/vistrails/gui/graphics_view.py @@ -93,7 +93,7 @@ def __init__(self, parent=None): self.sceneBoundingRect = QtCore.QRectF() self.multiSelecting = False - def updateSceneBoundingRect(self, keep_square=True): + def updateSceneBoundingRect(self, keep_square=False): """ updateSceneBoundingRect() -> None Compute the actual bounding rect of all shapes, then update the scene rect to be much wider for panning From 594653dd63396677acbfb3b03cd80792cdff6d26 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 10 Sep 2014 16:27:00 +0200 Subject: [PATCH 114/194] Optimize calls to mark_list_depth This greatly speeds up switching between versions that have many changed modules. core/vistrail/pipeline.py: - mark_list_depth: Take modules parameter that indicates which modules have changed, and skip the upstream. gui/pipeline_view.py: - setupScene: Only call mark_list_depth at the end --- vistrails/core/vistrail/pipeline.py | 13 ++++++++++++- vistrails/gui/pipeline_view.py | 24 ++++++++++++++---------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/vistrails/core/vistrail/pipeline.py b/vistrails/core/vistrail/pipeline.py index fbd34119c..fb52118e3 100644 --- a/vistrails/core/vistrail/pipeline.py +++ b/vistrails/core/vistrail/pipeline.py @@ -1111,16 +1111,27 @@ def check_subworkflow_versions(self): if module.is_valid and module.is_abstraction(): module.check_latest_version() - def mark_list_depth(self): + def mark_list_depth(self, module_ids=None): """mark_list_depth() -> list Updates list_depth variable on each module according to list depth of connecting port specs. This decides at what list depth the module needs to be executed. List ports have default depth 1 + + module_ids: list of module_ids - The id:s of modules that have changed + All modules upstream of these will be skipped, since markings only + affects downstream. This slightly increases performance. + """ result = [] + is_upstream = module_ids for module_id in self.graph.vertices_topological_sort(): + if is_upstream: + if module_id in module_ids: + is_upstream = False + else: + continue module = self.get_module_by_id(module_id) module.list_depth = 0 ports = [] diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 978324933..a6e70b07e 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1106,7 +1106,8 @@ def module_text_has_changed(m1, m2): # return (len(f1_names ^ f2_names) > 0) if self.show_widgets != get_vistrails_configuration( - ).check('showInlineParameterWidgets'): + ).check('showInlineParameterWidgets') and \ + core_module.editable_input_ports: return True elif self.scenePos().x() != core_module.center.x or \ -self.scenePos().y() != core_module.center.y: @@ -2059,6 +2060,7 @@ def __init__(self, parent=None): self.read_only_mode = False self.current_pipeline = None self.current_version = -1 + self.skip_update = False self.tmp_module_item = None self.tmp_input_conn = None @@ -2124,7 +2126,7 @@ def addConnection(self, connection, connectionBrush=None): dstPortItem.addVistrailVar( self.controller.get_vistrail_variable_by_uuid(var_uuid)) dstPortItem.addVistrailVar(var_uuid) - self.update_connections() + self.update_connections([srcModule.id, dstModule.id]) return connectionItem def selected_subgraph(self): @@ -2184,8 +2186,7 @@ def remove_connection(self, c_id): self.removeItem(self.connections[c_id]) del self.connections[c_id] self._old_connection_ids.remove(c_id) - self.update_connections() - + self.update_connections([srcModule.id, dstModule.id]) def recreate_module(self, pipeline, m_id): """recreate_module(pipeline, m_id): None @@ -2233,7 +2234,6 @@ def setupScene(self, pipeline): """ old_pipeline = self.current_pipeline self.current_pipeline = pipeline - if self.noUpdate: return if (pipeline is None or (old_pipeline and not old_pipeline.is_valid) or @@ -2241,12 +2241,10 @@ def setupScene(self, pipeline): # clear things self.clear() if not pipeline: return - - if pipeline and pipeline.is_valid: - pipeline.mark_list_depth() needReset = len(self.items())==0 try: + self.skip_update = True new_modules = set(pipeline.modules) modules_to_be_added = new_modules - self._old_module_ids modules_to_be_deleted = self._old_module_ids - new_modules @@ -2257,6 +2255,7 @@ def setupScene(self, pipeline): connections_to_be_deleted = self._old_connection_ids - new_connections common_connections = new_connections.intersection(self._old_connection_ids) + # Check if connections to be added require # optional ports in modules to be visible for c_id in connections_to_be_added: @@ -2336,6 +2335,9 @@ def setupScene(self, pipeline): "in that package)") % (e._identifier, e._name)) self.clear() self.controller.change_selected_version(0) + finally: + self.skip_update = False + self.update_connections() if needReset and len(self.items())>0: self.fitToAllViews() @@ -2742,10 +2744,12 @@ def add_tmp_module(self, desc): return self.tmp_module_item - def update_connections(self): + def update_connections(self, modules=None): + if self.skip_update: + return if self.controller.current_pipeline.is_valid: for module_id, list_depth in \ - self.controller.current_pipeline.mark_list_depth(): + self.controller.current_pipeline.mark_list_depth(modules): if module_id in self.modules: self.modules[module_id].module.list_depth = list_depth for c in self.connections.itervalues(): From 1107357a03c102d5f5ea58f47a03715b4c812fd6 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 10 Sep 2014 22:33:59 +0200 Subject: [PATCH 115/194] Skip set_entry_klass of not changed This speeds up view switching gui/ports_pane.py: - set_entry_klass: Skip if not changed --- vistrails/gui/ports_pane.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/ports_pane.py b/vistrails/gui/ports_pane.py index fbaf7afc3..01bccc2d6 100644 --- a/vistrails/gui/ports_pane.py +++ b/vistrails/gui/ports_pane.py @@ -426,8 +426,9 @@ def setReadOnly(self, read_only): self.setEnabled(not read_only) def set_entry_klass(self, entry_klass): - self.entry_klass = entry_klass - self.update_module(self.module) + if entry_klass != entry_klass: + self.entry_klass = entry_klass + self.update_module(self.module) def update_module(self, module): """ update_module(module: Module) -> None From f19be40d91493f49aa21b43c2dd414c9cf966e82 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 11 Sep 2014 19:47:09 +0200 Subject: [PATCH 116/194] Improvements for module edit widget border gui/modules/constant_configuration.py: Mark invalid inline edit widgets with yellow border Use default system color for highlighted borders gui/pipeline_view.py: Fixed empty .port_spec_item attribute gui/theme.py: Added PARAM_INVALID_COLOR --- .../gui/modules/constant_configuration.py | 32 ++++++++++++++++--- vistrails/gui/pipeline_view.py | 17 +++------- vistrails/gui/theme.py | 3 ++ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 23e752c24..99613cd95 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -160,6 +160,7 @@ def __init__(self, param, parent=None): self.setFont(CurrentTheme.MODULE_EDIT_FONT) self.installEventFilter(self) self.offset = 0 + self.is_valid = True self.document().setDocumentMargin(1) ConstantWidgetBase.__init__(self, param) self.document().contentsChanged.connect(self.ensureCursorVisible) @@ -172,12 +173,25 @@ def setContents(self, value, silent=False): w = self.document().documentLayout().blockBoundingRect(block).width() self.offset = max(w - 140, 0) block.layout().lineAt(0).setPosition(QtCore.QPointF(-self.offset,0)) + self.validate(value) def contents(self): contents = expression.evaluate_expressions(unicode(self.toPlainText())) self.setPlainText(contents) + self.validate(contents) return contents + def validate(self, value): + try: + self.psi and \ + self.psi.descriptor.module.translate_to_python(value) + except Exception, e: + self.setToolTip("Invalid value: %s" % str(e)) + self.is_valid = False + else: + self.setToolTip("") + self.is_valid = True + def setDefault(self, value): self.setContents(value, silent=True) @@ -240,8 +254,13 @@ def paint(self, painter, option, widget): painter.pen().setWidth(1) result = QtGui.QGraphicsTextItem.paint(self, painter, option, widget) option.state = state + if state & s: - painter.setPen(QtGui.QPen(QtCore.Qt.cyan,1)) + color = QtGui.QApplication.palette().color(QtGui.QPalette.Highlight) + painter.setPen(QtGui.QPen(color, 0)) + painter.drawRect(self.boundingRect()) + elif not self.is_valid: + painter.setPen(QtGui.QPen(CurrentTheme.PARAM_INVALID_COLOR, 0)) painter.drawRect(self.boundingRect()) return result @@ -256,23 +275,28 @@ def __init__(self, param, parent=None): def setContents(self, value, silent=False): self.setText(expression.evaluate_expressions(value)) + self.validate(value) if not silent: self.update_parent() def contents(self): contents = expression.evaluate_expressions(unicode(self.text())) self.setText(contents) + self.validate(contents) + return contents + + def validate(self, value): try: self.psi and \ - self.psi.descriptor.module.translate_to_python(contents) + self.psi.descriptor.module.translate_to_python(value) except Exception, e: # Color background yellow and add tooltip - self.setStyleSheet("border:2px dashed #efef00;") + self.setStyleSheet("border:2px dashed %s;" % + CurrentTheme.PARAM_INVALID_COLOR.name()) self.setToolTip("Invalid value: %s" % str(e)) else: self.setStyleSheet("") self.setToolTip("") - return contents def setDefault(self, value): setPlaceholderTextCompat(self, value) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index a6e70b07e..7aa538633 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1084,7 +1084,6 @@ def __init__(self, parent=None, scene=None): self.function_widget = None self.function_widgets = [] self.functions_widget = None - self.value_edit = None self.edit_rect = QtCore.QRectF(0.0, 0.0, 0.0, 0.0) self.handlePositionChanges = True @@ -1209,10 +1208,6 @@ def update_function_ports(self, core_module=None): self.function_overview = 'No functions set' self.module = core_module - if self.value_edit: - for f in self.module.functions: - if f.name == 'value': - self.value_edit.setContents(f.parameters[0].strValue) for function_widget in self.function_widgets: for f in self.module.functions: if f.name == function_widget.function.name: @@ -1593,13 +1588,6 @@ def setupModule(self, module, read_only=False): except ModuleRegistryException, e: error = e - - if self.value_edit: - if hasattr(self.edit_widget, 'GraphicsItem'): - self.value_edit.setPos(self.editRect.topLeft()) - self.edit_bg.setPos(self.editRect.topLeft()) - else: - proxy.setPos(self.editRect.topLeft()) if self.functions_widget: self.functions_widget.setPos(self.editRect.topLeft()) @@ -3323,13 +3311,16 @@ def __init__(self, module, parent=None, constant=None): param = ModuleParam(type=psi.descriptor.name, identifier=psi.descriptor.identifier, namespace=psi.descriptor.namespace) - param.port_spec_item = psi params.append(param) function = ModuleFunction(name=port_spec.name, parameters=params) for f in module.functions: if f.name == port_spec.name: function = f + + for psi, param in zip(port_spec.port_spec_items, + function.params): + param.port_spec_item = psi function_widget = QGraphicsFunctionWidget(function, self, constant) function_widget.setPos(0, height) function_widget.function_changed.connect(self.function_changed) diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py index 96fdb2b33..d4e012235 100644 --- a/vistrails/gui/theme.py +++ b/vistrails/gui/theme.py @@ -643,6 +643,9 @@ def __init__(self): self.PIP_FRAME_COLOR = QtGui.QColor( *(ColorByName.get_int('yellow_light'))) + # Color for invalid parameter frames + self.PARAM_INVALID_COLOR = QtGui.QColor('#efef00') + # Color of selected methods in the modules method area self.METHOD_SELECT_COLOR = QtGui.QColor( *ColorByName.get_int('yellow_light')) From ad54fe2c5a9b9ad73d77beeb2a654cdf8ca7c624 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 12 Sep 2014 16:36:17 +0200 Subject: [PATCH 117/194] Added documentation for parameter widgets vistrails/gui/module_info.py: Fixed edit widgets button label text doc/usersguide/example.rst: Added parameter widgets section doc/usersguide/parameter_widgets.rst: *new - Documentation for parameter widgets doc/usersguide/vtl/parameter_widgets.vtl: *new - Link to terminator.vt:"parameter widgets" examples/terminator.vt: Added "parameter widgets" workflow New images: doc/usersguide/figures/edit_widgets/edit-widget.png doc/usersguide/figures/edit_widgets/edit-widgets.png doc/usersguide/figures/edit_widgets/enabling-edit-widgets.png --- doc/usersguide/example.rst | 1 + .../figures/edit_widgets/edit-widget.png | Bin 0 -> 27509 bytes .../figures/edit_widgets/edit-widgets.png | Bin 0 -> 272790 bytes .../edit_widgets/enabling-edit-widgets.png | Bin 0 -> 23965 bytes doc/usersguide/parameter_widgets.rst | 73 ++++++++++++++++++ doc/usersguide/vtl/parameter_widgets.vtl | 1 + examples/terminator.vt | Bin 244874 -> 455171 bytes vistrails/gui/module_info.py | 2 +- 8 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 doc/usersguide/figures/edit_widgets/edit-widget.png create mode 100644 doc/usersguide/figures/edit_widgets/edit-widgets.png create mode 100644 doc/usersguide/figures/edit_widgets/enabling-edit-widgets.png create mode 100644 doc/usersguide/parameter_widgets.rst create mode 100644 doc/usersguide/vtl/parameter_widgets.vtl diff --git a/doc/usersguide/example.rst b/doc/usersguide/example.rst index acd3251d2..ce3b95986 100644 --- a/doc/usersguide/example.rst +++ b/doc/usersguide/example.rst @@ -48,6 +48,7 @@ Intermediate Concepts and VisTrails Packages .. toctree:: :maxdepth: 2 + parameter_widgets controlflow cfassistant list_handling diff --git a/doc/usersguide/figures/edit_widgets/edit-widget.png b/doc/usersguide/figures/edit_widgets/edit-widget.png new file mode 100644 index 0000000000000000000000000000000000000000..630d7a52d437927d94c29d6fe01d36e18aeb0563 GIT binary patch literal 27509 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 C^@F1T literal 0 HcmV?d00001 diff --git a/doc/usersguide/figures/edit_widgets/edit-widgets.png b/doc/usersguide/figures/edit_widgets/edit-widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5e3720330a38b668d20bb12efc04894e308abd GIT binary patch literal 272790 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 z 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�fGkz?k+)sySo+cP9V6u z2X~jkAwY0%{j(+$Ag9QcRog&KNzAFH=%Ukx0iw% z%f&g$H8a59b{Kb25>!Sp=B^o=i_7X2y`R5?X;{s)4jd&1)*o0mZ#8HZo%i6Qu<&AT zbzGH87gH|i^;?}9)BzVA=;cs^oB3Zi@fhckm)C*cFg1|g2aZ z7ZWScBJ;x5f_6ifi0DH8$TJ;7Cc-TsDJl0q1HCCU_fpc!g=(1W@=q>A131eLK7T~y zpA-CVI;|fq2FAue@#tIAi-`ME4P5N50yt#?g~1~@C5$Un19IeZ6AvS)57?L?MHrbW zN5c1(3+{CjN)pP9@8w63w0XUWwEeBkOV=yYJO09~$d*+S3qN1cs+?xT+&lQ5pl|1K zL+gZ$jK?=jICh*bk)>WEFv*D@n1PMI&2$@ne#Ve+A9LZ^X*I+9nb?PL6;C(TU6)}Y zU@Oyyq^@2~!e??4lcF^PF!h zq+mkF(yfUuSMm+fv&!wMzE-wA=oc-1tct9Cd;pT@LnV<^Y0E}wm2W+N4=R&dlC9pe zjFMunuZi>mWVA!g>bqO#fk`VmOqYwkS8@clRN-Ez-A2-Xt(SeWy8emKw~UxMqka@! zV-eBboPVZ;C?*#%nLc8`^t@R~3S9dY-kZsE&V0gqLB2@q#YnnK;}-tAA}oI`hRe4G zEm&-#)yQYc|MaH?jCyEmyL|2Tyd<)xO7vY80cEal#|=TioMJ?v?i=$I;#>7~Jn2C8 z0`BJR$Wm!{`T;^pYU=4Sczk(T%SlJtP2O$&3eZesMk2fRd%SNZCAxW>1w8LQWPgO$ zS`2;caxQj#yfUGR5A7eGKwpoOw!;K2W!snhuMb9{Yc`6#B9WbD$hh?A_C?;4L>gv= z*|12VrW)m|Rl)ORTaQA4Lr9KgzXmtT*Iz}OA>ng2Tv-H%qADamz1!Ua3)7>7ji;R8 z3^!Ayu9;Wynj7o4Bvpj!X{0o9aPp0@M^y(TG3loglO$ltBx><1BL~&c4b`LY#k0Y< zf42wcexnQ%sF$PXpW6f&$z>ZcWbK<8Um0WE@qD@2?4>nPif$)FVLVyVu{Dtq+c_L= zi$#tPqQ4uR$x|e#S++RD*kbOWCEqDetif%Wl%hNJQFYO!s0xkA7h91iAmWXM_{JZp zUk;G#=e9W!NQd*s@(tEsYGSf4I(!(~-9Qe_as#>Rhm6qbgd_HsLnzfu zEYqSGwupxr^bE7o#J!EbR>H`_`s54j9Nd~!8!D;B{p!*=JuZPXJrub((I5@owb9d} zitINNQ1?~WP6GyL1;ed*;78yaZ)nP+Dp&h_@C{+H)k}oYQz*#*tqYbI>MXB?AZ?oE z13rmd##A?T!sgXfz%KPm+}MM=p*$3EWTgyf_rkM(^64ewlW!_qr}sYc8uITGd@(U( zTU@~t*e*_jO{7_1=GG@=J z#NjG@c^M&P6vESpIDLvvH#qf!X#LUo%QU~iAXAJG_uX;3yt*fS?-@aq^WR~R#oc-@ z_DpM&y2N(0&+{0D{0>SH^AAoI!Xnm2ST#lG%*u#!X9Or%f8ya#S6-ZBA}pM4V}`4& zAU-i;@VE+2=cJ6aD#aeZnwsOvyGUe%O5L6IkQl4|{ZhHg{_D&KT_pKr!_2MsIw8L} zHG1=339yuRw#J#NuX(@&k|;Kav=`T|HGh*&U+%aF6iBWh(hTup%cs!Z5Ujn=^o_1l z_xC!ORpaO>fAE63=NXXtTex7oS2_yp(jOHyujg2{QimB*pBC7>b(MdOcFQV%Px%1n zvZ=Fu5;=jj0$(Xt=R3&gZ|CMM0j)?82o0`RLswkMlRZxRf|THzfH3+wO|XXA8;<;Y*kp&jFcAP`A-^4TjTwHt~dB{IQ>$|c$Z;GI76Zpuu zZ^Q`a+_N+!2VpX55WHIoaU82P`#7AsEN`-Cne_H`n0<}smx+@S=bo=2_)eGvSw4vI ziqZ$!{%YBG@o&To!$7t#b)}~3+f*s#@zhB`#qAgZW!RilD7>$&Tg8LPW z1>i0wEumDz&eOM2U_+jSfsVKL4N0I_23cclBN-!>!tr5P6nd) z$rf-y0^YepCfLuF>%e+4kxorIW9fJGXG}NX9Sop_!jpYlTUw9=LSsm^fPJWkhX*Yk zU3v-v6I2|jD&#k9*2?_sY$lhZsld(ZvQFvf-N@jjb#mzmX438#PLFTY!FuND@gfh- zoQrTf3tP*4K2wfJWA;e6JDKE;84u0Xja0>Xy$me-Y$1^^lo!lr6zNG3Gef57AT>U9n z4*wrsxRfRNxU zc7mDPt?lhgf@i2m!9~!z<=#=?$`TD4>fi0(*B0?8kek#{m*+PpR!)0(_{J(zvOo@H z$BDee4*vY?e!cB=xS`NgjIW0mr5a?^Q@pnrF50R6tb4S3m1$zUR&>0NM#&HE`|(1! z2cnv1AD!U!Mu$dceO-u|RU^F*dv8|q^`<9|wo580TTLsBYBR7-=E#BP%jzL+?^YB7 z&!{6YV>k2LvcauGzcX0I-j)JC{>pHc@vgN?I)2r zQ}E6A*o!63s$gYrg(!g zCNo4MOBGCk%XH88?28}Z8|92X^_FIT1UAIS$G5Su@rwHx3XOKN#)|}47aoe^IOcy6 z2>#|k*f2VJd)P(;O4CjfZh!GA4F6jkiL_IYlfym9%Gjckp|1BUy|mLPL>L>mM%Yz( z(6!UcN^f+wJHs2(-s&yK48Hm36xU!Uo(sDqwMkJs1V@K0$Lydh{wZ_hCYqNMvT0_# zU9Rd7|HH93yY^}AE%Ti&c~B;E+r{2`*`HZd=;OJHx|*892ToGf8^lHzbG;q;R&|Rn z1JNlJy%;DWyEuWq+e36#F&L+M!cQbfIW=EDiHQ&OP2VcSeF#<0Gh>zxkI3)a2*4I< zV7$B@$7685y4TJ6b<9k!?!R99!~b|3Yp^)2n2y2C>z89j>q`nGvN9m$wMd@x#(nv; z+xz~dSD#FLLbN$dAaqeDC&f3{TjEHY?#mYf0R#FqGktoD>Fn1g3^e;>(zjnGryXuW zQnGa2$QHV&hy9cUc^3f~ag0f^UR86`iq*oJq@AHUb_4SQvgp&%#xVDEPd&=aDg_vv zeiZEiJ@-24L#?(d@5mrTKj(Z?pM!rk>Q?0D4wCU?BtFTb9N+_s3lL28aEtjQIc!jJ z7RaTHx{^ffsP&4>?mwz-UqnB@QUhy`pf-)auHbJHgdfh_`?=3Ko(ETKFdcx6 z2Cz&YZd`|v-bTE;yDpMRW$98|iMdU3*J}E@ZGQrkne?Z78nIi5HH)c8bMDM^+jbVM z_#`_EjL4#}9vMjbvNAt^p%cLDl*SmdS_&c*yF$Vrf%f^z8>M(aAW$WhofmykqV1AJ zNJOsTmNvgd!O9j`dfB@NDUUc2hizMjA)iDEU2q+a`4ZhyhjDqk$H|h-yE+KX5N(#z z@NA}7lAmn2ZR_-*)=u*6<9l*B^2>q4R8Zldl&DN6@fuo(Rg8eZT2{^Z!&M$~@>>ii zhcy)1`~mJ%bWk;;Hki0H0_|q*o*mak`*LeD9lmD!XfzD+5Qjz=YUdUDF$7vwdeZB0 zc~MGIKtE!Gi(Cvs+3=XSSs;K|pTS$z=aIaUjgVtYIsp&!?b|p0 zx0h?6miW%!8Y2|D;aoG*e#0-}`3~{$PtDDF2BH}o^;K)!U^-QiZ)Y&^0c!tFi1|tm z;Xjo&_8tET>T~4+zGwg4&#FaW>#wP+%ira#_6fyyyL4Qp?&cw+6E2)RDdg~eT{2ob zOhQ|Hu-D*c{98B4HVegSUprMk$-Gr~_W2bNe%Ju_HN~9n&4v2MsGCb`im1c+x^rTI z=$K3LHj=EiU3FQbHlP*O*4B?mh_S}P-Rrl6*5{56JqP6p%ego))k*b;b$&HN;Uv=* zhX$V|{$bd{z^zrIZNz8{o)qBIMZyOQtA6nBdQyxr_U;A}f{#>%sBRq0 zv-tFy!fn<+Oa@WsQ+?nT=d3)yu3LcVM5Mfefw!$s8~kd9`F(79DEpFwulmQRCTDmk z2NXhBx`bFX!fuSPYeP`JU}HAIhd((S&ThKiPdA0XsCdO8`EX9lRxp6}g^7g~MDZDr z=q^-y+UKAUj*Ot)qRkl?7(ShF8*~TqpOxDF4PSC)XjMAK)-SA_2w<$k=93q=7t zPYz!a@xAR9X42*WnuM!Wcqy8B=Tl3}Yt+YwD9P6-OgbOCR=Ws6@Pqrw&lb_WrVEtw z0n%CpJ2^Q!HG-^IE-TJYpE@Rp>&Z-ZQzvThpej7Ay|hMnqkvPHvfV;Y-R|18<8i_H zdWgHTUX%0A;HzF}B^l)5$FcM$xQvveZA>yP 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 shows a complete workflow +using parameter widgets. :vtl:`(open in vistrails) ` + +.. _fig-edit-widgets-example: + +.. figure:: figures/edit_widgets/edit-widgets.png + :align: center + :width: 100% + + Example 1.1 - Complex Workflow with Parameter Widgets. + +Enabling Parameter Widgets +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Parameter widgets are hidden by default, but can be enabled by toggling the +pencil icon in the 'Module Info' panel (See Figure :ref:`Example 1.2 `). +This will show all existing parameter widgets as well as the pencil icons +in 'Module Info' for adding new ones. + +.. _fig-enabling-edit-widgets: + +.. figure:: figures/edit_widgets/enabling-edit-widgets.png + :align: center + :width: 30% + + Example 1.2 - How to enable/disable the Parameter Widgets mode. + +Adding a parameter widget to a module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A parameter widget can be enabled or disabled in the 'Module Info' panel by +toggling the pencil icon (See Figure :ref:`Example 1.3 `). Only +parameters of constant type that have widgets for editing can be added. + +Constant modules such as String and Integer show a parameter widget for 'value' +by default, but it can be removed using the 'Module Info' panel if needed. + +.. _fig-edit-widget: + +.. figure:: figures/edit_widgets/edit-widget.png + :align: center + :width: 60% + + Example 1.3 - How to add/remove Parameter Widgets from modules. + +Limitations +^^^^^^^^^^^ + +On some platforms (Such as Mac) some parameter widgets may look unsharp or +pixelated. This is because no widget for that type has been created for use +in the pipeline view, and the default one from the 'Module Info' pane has been used instead. + +Only one parameter widget per port can be visible right now. In the 'Module Info' pane it is +possible to specify several function parameters for each port. + +Zooming out will hide all the edit widgets for performance reasons, it would also +be difficult to edit anything in that size. + diff --git a/doc/usersguide/vtl/parameter_widgets.vtl b/doc/usersguide/vtl/parameter_widgets.vtl new file mode 100644 index 000000000..82668c682 --- /dev/null +++ b/doc/usersguide/vtl/parameter_widgets.vtl @@ -0,0 +1 @@ + diff --git a/examples/terminator.vt b/examples/terminator.vt index 3e24a4c60611846d4865925503bb695926904a14..57d8c50e0f9656c17a3073c1b9c1f260953cc457 100644 GIT binary patch literal 455171 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

ib}hAW6d|fwGo!Yzv`(UU}v;Q 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%0AYFtHVfsr~bdFK$gi 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 literal 244874 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 z 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 diff --git a/vistrails/gui/module_info.py b/vistrails/gui/module_info.py index e6ea9aae8..e8259afce 100644 --- a/vistrails/gui/module_info.py +++ b/vistrails/gui/module_info.py @@ -85,7 +85,7 @@ def addButtonsToToolbar(self): self.showEditsAction = QtGui.QAction( QtGui.QIcon(os.path.join(vistrails_root_directory(), 'gui/resources/images/pencil.png')), - "Show/hide edit widget toggle buttons", + "Show/hide parameter widgets", None, triggered=self.showEdits) self.showEditsAction.setCheckable(True) From 627a4cb89b43b9ec1ce70400ae144c8bf90751d9 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 12 Sep 2014 18:21:50 +0200 Subject: [PATCH 118/194] parameter_widgets.rst: Changed figure names from "Example" to "Figure" --- doc/usersguide/parameter_widgets.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/usersguide/parameter_widgets.rst b/doc/usersguide/parameter_widgets.rst index 5162291bb..dfb4922f5 100644 --- a/doc/usersguide/parameter_widgets.rst +++ b/doc/usersguide/parameter_widgets.rst @@ -13,7 +13,7 @@ Parameter widgets are editable parameters inside modules in the pipeline view. They can be used to give an overview of the parameters in a workflow, or to quickly edit parameters without the usual clicking on a module and selecting the parameter in the 'Module Info' panel. -Figure :ref:`Example 1.1 ` shows a complete workflow +:ref:`Figure 1 ` shows a complete workflow using parameter widgets. :vtl:`(open in vistrails) ` .. _fig-edit-widgets-example: @@ -22,13 +22,13 @@ using parameter widgets. :vtl:`(open in vistrails) ` :align: center :width: 100% - Example 1.1 - Complex Workflow with Parameter Widgets. + Figure 1 - Complex Workflow with Parameter Widgets. Enabling Parameter Widgets ^^^^^^^^^^^^^^^^^^^^^^^^^^ Parameter widgets are hidden by default, but can be enabled by toggling the -pencil icon in the 'Module Info' panel (See Figure :ref:`Example 1.2 `). +pencil icon in the 'Module Info' panel (See :ref:`Figure 2 `). This will show all existing parameter widgets as well as the pencil icons in 'Module Info' for adding new ones. @@ -38,13 +38,13 @@ in 'Module Info' for adding new ones. :align: center :width: 30% - Example 1.2 - How to enable/disable the Parameter Widgets mode. + Figure 2 - How to enable/disable the Parameter Widgets mode. Adding a parameter widget to a module ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A parameter widget can be enabled or disabled in the 'Module Info' panel by -toggling the pencil icon (See Figure :ref:`Example 1.3 `). Only +toggling the pencil icon (See :ref:`Figure 3 `). Only parameters of constant type that have widgets for editing can be added. Constant modules such as String and Integer show a parameter widget for 'value' @@ -56,7 +56,7 @@ by default, but it can be removed using the 'Module Info' panel if needed. :align: center :width: 60% - Example 1.3 - How to add/remove Parameter Widgets from modules. + Figure 3 - How to add/remove Parameter Widgets from modules. Limitations ^^^^^^^^^^^ From 392cad35b8eadcb69f01212be7326be41fd29620 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 17 Sep 2014 13:00:26 -0400 Subject: [PATCH 119/194] Fixes typo --- vistrails/gui/modules/constant_configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 99613cd95..2e289b13b 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -60,7 +60,7 @@ def setPlaceholderTextCompat(self, value): class ConstantWidgetMixin(object): - # superclasses need to add this signal: + # subclasses need to add this signal: # contentsChanged = QtCore.pyqtSignal(tuple) def __init__(self, contents=None): From 450acce022d655a341b15bd701e7eb29334340ea Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 18 Sep 2014 13:03:59 -0400 Subject: [PATCH 120/194] Removes Lod attribute 'scale' This is not actually used, purpose unknown. --- vistrails/gui/pipeline_view.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 7aa538633..72984df57 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3450,7 +3450,6 @@ def set_lod(limit, item, lod=None): class Lod: pass lod = Lod() - lod.scale = item.scale() def add_lod_paint(painter, option, widget): if top_item: # fixes children having different scaling (also faster) lod.current = option.levelOfDetailFromTransform( From 4360e79aa9ec8bd00bfda786b7637c6d87e3c3c3 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 18 Sep 2014 13:13:10 -0400 Subject: [PATCH 121/194] Rewrites set_lod() --- vistrails/gui/pipeline_view.py | 43 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 72984df57..0facfdffa 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3434,30 +3434,31 @@ def boundingRect(self): return self.bounds def set_lod(limit, item, lod=None): - """ Set level of detail by wrapping paint methods and checking limit. - This will set lod of all children, so different lod:s need to be set - top down. - - current_lod is calculated for the top item so that children scaling - is ignored - - currently the top widget cannot have a scale factor - + """Sets the limit of level of detail used when painting items. """ - paint = item.paint # store reference to original paint method + # This function replaces the paint() methods of the given item and its + # children. The new version doesn't actually draw any of the items if the + # level of detail OF THE TOP ITEM (which is the only one checked) is under + # the threshold + # Only the top-level item is checked, because children might have different + # scales + + paint_orig = item.paint # store reference to original paint method top_item = lod is None if lod is None: - class Lod: - pass - lod = Lod() - def add_lod_paint(painter, option, widget): - if top_item: # fixes children having different scaling (also faster) - lod.current = option.levelOfDetailFromTransform( - painter.worldTransform()) - if lod.current < limit: - return - return paint(painter, option, widget) - item.paint = add_lod_paint + lod = [None] + + # Overrides paint() on that item + def paint_with_lod_check(painter, option, widget): + if top_item: + lod[0] = option.levelOfDetailFromTransform( + painter.worldTransform()) + assert lod[0] is not None # This assertion doesn't necessarily hold! + if lod[0] > limit: + return paint_orig(painter, option, widget) + item.paint = paint_with_lod_check + + # Recursively process children for i in item.childItems(): set_lod(limit, i, lod) From d967cede8b09410c35de243c7eec575dd20e4970 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 18 Sep 2014 13:13:31 -0400 Subject: [PATCH 122/194] Fixes set_lod() --- vistrails/gui/pipeline_view.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 0facfdffa..3aaaf9891 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3453,8 +3453,7 @@ def paint_with_lod_check(painter, option, widget): if top_item: lod[0] = option.levelOfDetailFromTransform( painter.worldTransform()) - assert lod[0] is not None # This assertion doesn't necessarily hold! - if lod[0] > limit: + if lod[0] is None or lod[0] > limit: return paint_orig(painter, option, widget) item.paint = paint_with_lod_check From 4037d3ddb602a6362c8e94c5e29cc863b7372461 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 18 Sep 2014 13:28:36 -0400 Subject: [PATCH 123/194] No need to store LOD, just store whether to draw --- vistrails/gui/pipeline_view.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 3aaaf9891..1179b90bd 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3433,7 +3433,7 @@ def setContents(self, values): def boundingRect(self): return self.bounds -def set_lod(limit, item, lod=None): +def set_lod(limit, item, draw=None): """Sets the limit of level of detail used when painting items. """ # This function replaces the paint() methods of the given item and its @@ -3444,22 +3444,22 @@ def set_lod(limit, item, lod=None): # scales paint_orig = item.paint # store reference to original paint method - top_item = lod is None - if lod is None: - lod = [None] + top_item = draw is None + if draw is None: + draw = [True] # Overrides paint() on that item def paint_with_lod_check(painter, option, widget): if top_item: - lod[0] = option.levelOfDetailFromTransform( - painter.worldTransform()) - if lod[0] is None or lod[0] > limit: + draw[0] = option.levelOfDetailFromTransform( + painter.worldTransform()) > limit + if draw[0]: return paint_orig(painter, option, widget) item.paint = paint_with_lod_check # Recursively process children for i in item.childItems(): - set_lod(limit, i, lod) + set_lod(limit, i, draw) class QModuleStatusEvent(QtCore.QEvent): """ From 3eaff2b0efc91faa5e21598555ccbc997a593950 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 18 Sep 2014 23:12:42 +0200 Subject: [PATCH 124/194] Center parameter widgets in modules gui/pipeline_view.py: - QGraphicsFunctionWidget: Store parameter widths - QGraphicsFunctionsWidget: Center parameter widths when the final width is known --- vistrails/gui/pipeline_view.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 1179b90bd..954bf1d5a 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3327,6 +3327,10 @@ def __init__(self, module, parent=None, constant=None): self.function_widgets.append(function_widget) height += function_widget.boundingRect().height() width = max(width,function_widget.boundingRect().width()) + # center widgets + for function_widget in self.function_widgets: + for widget, w in function_widget.widths: + widget.moveBy((width-w)/2, 0.0) self.bounds = QtCore.QRectF(0,0,width,height) def boundingRect(self): @@ -3343,6 +3347,7 @@ def __init__(self, function, parent=None, constant=None): QtGui.QGraphicsWidget.__init__(self, parent) self.function = function self.param_widgets = [] + self.widths = [] # (widget, width) self.bounds = None width = 0 height = 0 @@ -3399,6 +3404,7 @@ def get_focusable(widget): return lambda e:widget.setFocus() or widget.mousePressEvent(e) bg.mousePressEvent = get_focusable(param_widget) param_widget.setPos(0, height) + self.widths.append((param_widget,rect.width())) else: param_widget = Widget(param) name = unicode(id(param_widget)) @@ -3413,12 +3419,12 @@ def get_focusable(widget): rect.setSize(rect.size()*SCALE)# uninitialized bounds need to be scaled rect.moveTo(0.0,0.0) proxy.setPos(0, height) + self.widths.append((proxy,rect.width())) width = max(width, rect.width()) rect.setHeight(rect.height()+2) # space between parameters height += rect.height() param_widget.contentsChanged.connect(self.param_changed) self.param_widgets.append(param_widget) - self.bounds = QtCore.QRectF(0.0, 0.0, width, height) def param_changed(self, values): From 49404bfc69bf56723717fc8f1be9b451cb71e6a9 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 19 Sep 2014 15:50:58 +0200 Subject: [PATCH 125/194] Fixed enum type for inline widgets * Set line edit border to default * Fixes transparent backgrounds gui/modules/constant_configuration.py: - QGraphicsLineEdit: Set default bg color to "QPalette.Dark". - StandardConstantEnumWidget: Use widget as proxy in GraphicsView Fix buggy popup when proxied gui/pipeline_view.py: - QGraphicsFunctionWidget: Pass entry_type so that enum type is detected Remove background on proxied widgets the correct way --- .../gui/modules/constant_configuration.py | 55 +++++++++++++++++++ vistrails/gui/pipeline_view.py | 21 +++++-- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 2e289b13b..3dc3cc751 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -262,6 +262,10 @@ def paint(self, painter, option, widget): elif not self.is_valid: painter.setPen(QtGui.QPen(CurrentTheme.PARAM_INVALID_COLOR, 0)) painter.drawRect(self.boundingRect()) + else: + color = QtGui.QApplication.palette().color(QtGui.QPalette.Dark) + painter.setPen(QtGui.QPen(color, 0)) + painter.drawRect(self.boundingRect()) return result class StandardConstantWidget(QtGui.QLineEdit,ConstantWidgetBase): @@ -301,8 +305,19 @@ def validate(self, value): def setDefault(self, value): setPlaceholderTextCompat(self, value) +def findEmbeddedParentWidget(widget): + """ See showPopup below + + """ + if widget.graphicsProxyWidget(): + return widget + elif widget.parentWidget(): + return findEmbeddedParentWidget(widget.parentWidget()) + return None + class StandardConstantEnumWidget(QtGui.QComboBox, ConstantEnumWidgetBase): contentsChanged = QtCore.pyqtSignal(tuple) + GraphicsItem = None def __init__(self, param, parent=None): QtGui.QComboBox.__init__(self, parent) ConstantEnumWidgetBase.__init__(self, param) @@ -346,6 +361,46 @@ def setDefault(self, value): elif self.isEditable(): setPlaceholderTextCompat(self.lineEdit(), value) + def showPopup(self, *args, **kwargs): + """ Fixes popup when use in a GraphicsView. See: + https://bugreports.qt-project.org/browse/QTBUG-14090 + + """ + + QtGui.QComboBox.showPopup(self, *args, **kwargs) + parent = findEmbeddedParentWidget(self) + if parent: + item = parent.graphicsProxyWidget() + scene = item.scene() + view = None + if scene: + views = scene.views() + for v in views: + if v == QtGui.QApplication.focusWidget(): + view = v + if not view: + view = views[0] + if view: + br = item.boundingRect() + rightPos = view.mapToGlobal(view.mapFromScene(item.mapToScene( + QtCore.QPointF(br.width(), br.height())))) + pos = view.mapToGlobal(view.mapFromScene(item.mapToScene( + QtCore.QPointF(0, br.height())))) + self.view().parentWidget().move(pos) + self.view().parentWidget().setFixedWidth(rightPos.x()-pos.x()) + self.view().parentWidget().installEventFilter(self) + + def eventFilter(self, o, e): + """ See showPopup + + """ + + if o.parentWidget() and e.type() == QtCore.QEvent.MouseButtonPress: + return True + return QtGui.QComboBox.eventFilter(self, o, e) + + + ############################################################################### # Multi-line String Widget diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 954bf1d5a..417e029e4 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -78,6 +78,7 @@ import copy import math import operator +import string import warnings import vistrails.api @@ -3384,9 +3385,20 @@ def __init__(self, function, parent=None, constant=None): for i in xrange(len(function.parameters)): param = function.parameters[i] + # check + psi = param.port_spec_item + if psi.entry_type is not None: + # !!only pull off the prefix!! options follow in camelcase + prefix_end = len(psi.entry_type.lstrip(string.lowercase)) + if prefix_end == 0: + entry_type = psi.entry_type + else: + entry_type = psi.entry_type[:-prefix_end] + else: + entry_type = None - Widget = get_widget_class(function.get_spec('input').items[i].descriptor) - if hasattr(Widget, 'GraphicsItem'): + Widget = get_widget_class(psi.descriptor, entry_type) + if hasattr(Widget, 'GraphicsItem') and Widget.GraphicsItem: param_widget = Widget.GraphicsItem(param, self) # resize to MAX_WIDTH rect = param_widget.boundingRect() @@ -3407,9 +3419,8 @@ def get_focusable(widget): self.widths.append((param_widget,rect.width())) else: param_widget = Widget(param) - name = unicode(id(param_widget)) - param_widget.setStyleSheet('QWidget#%s{background-color:transparent};' % name) - param_widget.setObjectName(name) + param_widget.setAutoFillBackground(False) + param_widget.setAttribute(QtCore.Qt.WA_NoSystemBackground, True) param_widget.setMaximumSize(MAX_WIDTH/SCALE, MAX_WIDTH/SCALE) param_widget.setWindowFlags(QtCore.Qt.BypassGraphicsProxyWidget) proxy = QtGui.QGraphicsProxyWidget(self) From ccc7dd60ba8521c9d61002f12074f62ce607bd70 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 19 Sep 2014 21:14:53 +0200 Subject: [PATCH 126/194] Fixed default value for inline widgets gui/modules/constant_configuration.py: - ConstantWidgetBase: Show default value if strVal is empty strValue was always set before, which worked in QLineEdit but broke inline widgets --- vistrails/gui/modules/constant_configuration.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index 3dc3cc751..e108f027b 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -91,9 +91,10 @@ def __init__(self, param): ConstantWidgetMixin.__init__(self, value) self.psi = psi - if psi and psi.default: + if psi and psi.default and param.strValue == '': self.setDefault(psi.default) - self.setContents(param.strValue) + else: + self.setContents(param.strValue) def setDefault(self, value): # default to setting the contents silenty From 53012658e0f9bdb482a8ea8e1545ec9ced82c36d Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 22 Sep 2014 22:06:16 +0200 Subject: [PATCH 127/194] Fixed miniature pipeline views * Re-enabled far-out zoom * Set parameter exploration pipeline view to read-only * Fixed fitting parameter exploration pipeline view to read-only gui/graphics_view.py: Enabled zooming out for miniature views Zooming in is still more limited New scaleoffset for adjusting the in/out zooming difference Also added computing scale after fitting gui/paramexplore/param_view.py: Set pipeline view read-only and fixed fitting when pipeline changes gui/paramexplore/pe_pipeline.py: Recompute bounding box before fitting views --- vistrails/gui/graphics_view.py | 15 ++++++++++----- vistrails/gui/paramexplore/param_view.py | 15 +++++++++++---- vistrails/gui/paramexplore/pe_pipeline.py | 3 ++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/vistrails/gui/graphics_view.py b/vistrails/gui/graphics_view.py index 3141fb3a0..daa631ed5 100644 --- a/vistrails/gui/graphics_view.py +++ b/vistrails/gui/graphics_view.py @@ -234,8 +234,9 @@ def __init__(self, parent=None): self.setRenderHints (QtGui.QPainter.Antialiasing | QtGui.QPainter.TextAntialiasing | QtGui.QPainter.SmoothPixmapTransform) - self.scaleMax = 1000 - self.scaleRatio = self.scaleMax/5 + self.scaleMax = 2000 + self.scaleRatio = self.scaleMax/10 + self.scaleOffset = 700 self.currentScale = self.scaleMax/2 self.startScroll = (0,0) self.lastPos = QtCore.QPoint(0,0) @@ -273,6 +274,7 @@ def viewportEvent(self, event): changeFlags = pinch.changeFlags() if changeFlags & QtGui.QPinchGesture.ScaleFactorChanged: if self.gestureStartScale is None: + self.computeScale() self.gestureStartScale = self.currentScale newScale = self.gestureStartScale + self.scaleMax * \ math.log(pinch.property("scaleFactor"))/2 @@ -517,9 +519,10 @@ def updateMatrix(self): """ updateMatrix() -> None Update the view matrix with the current scale - """ + """ matrix = QtGui.QMatrix() - power = float(self.currentScale-self.scaleMax/2)/self.scaleRatio + power = float(self.currentScale - self.scaleMax/2 - self.scaleOffset + )/self.scaleRatio scale = pow(2.0, power) matrix.scale(scale, scale) self.setMatrix(matrix) @@ -530,7 +533,8 @@ def computeScale(self): """ self.currentScale = (math.log(self.matrix().m11(), 2.0)* - self.scaleRatio + self.scaleMax/2) + self.scaleRatio + self.scaleMax/2 + + self.scaleOffset) def setPIPScene(self, scene): """ setPIPScene(scene: QGraphicsScene) -> None @@ -594,6 +598,7 @@ def resizeEvent(self, event): def zoomToFit(self): self.scene().fitToView(self, True) + self.computeScale() def zoomIn(self): self.setUpdatesEnabled(False) diff --git a/vistrails/gui/paramexplore/param_view.py b/vistrails/gui/paramexplore/param_view.py index 3541d1737..ff2758c2b 100644 --- a/vistrails/gui/paramexplore/param_view.py +++ b/vistrails/gui/paramexplore/param_view.py @@ -78,7 +78,7 @@ def __init__(self, controller=None, parent=None): QtGui.QWidget.__init__(self, parent) self.set_title('Pipeline Methods') - self.controller = controller + self.controller = None vLayout = QtGui.QVBoxLayout() vLayout.setMargin(0) vLayout.setSpacing(5) @@ -92,6 +92,7 @@ def __init__(self, controller=None, parent=None): self.treeWidget = self.parameterWidget.treeWidget self.pipeline_view = QAnnotatedPipelineView() + self.pipeline_view.setReadOnlyMode(True) vLayout.addWidget(self.pipeline_view) vLayout.setStretch(0,0) @@ -100,21 +101,27 @@ def __init__(self, controller=None, parent=None): self.connect(self.toggleUnsetParameters, QtCore.SIGNAL("toggled(bool)"), self.parameterWidget.treeWidget.toggleUnsetParameters) + self.set_controller(controller) def set_controller(self, controller): if self.controller == controller: return self.controller = controller + self.pipeline_view.set_controller(controller) if self.controller is not None: - self.set_pipeline(self.controller.current_pipeline) - self.pipeline_view.setScene(self.controller.current_pipeline_scene) + self.set_pipeline(controller.current_pipeline) else: self.set_pipeline(None) - self.pipeline_view.setScene(None) def set_pipeline(self, pipeline): + if self.controller is None: + return self.pipeline = pipeline self.parameterWidget.set_pipeline(pipeline, self.controller) + if pipeline: + self.pipeline_view.scene().setupScene(pipeline) + else: + self.pipeline_view.scene().clear() self.pipeline_view.updateAnnotatedIds(pipeline) class QParameterWidget(QSearchTreeWindow): diff --git a/vistrails/gui/paramexplore/pe_pipeline.py b/vistrails/gui/paramexplore/pe_pipeline.py index 951e0420f..68c7f2a86 100644 --- a/vistrails/gui/paramexplore/pe_pipeline.py +++ b/vistrails/gui/paramexplore/pe_pipeline.py @@ -92,7 +92,8 @@ def updateAnnotatedIds(self, pipeline): """ if pipeline and self.scene(): self.inspector.inspect_ambiguous_modules(pipeline) - self.scene().fitToView(self) + self.scene().fitToAllViews(True) + @staticmethod def drawId(painter, rect, id, align=QtCore.Qt.AlignCenter): From de1755606000d07165288a9ab844347ad39bddb8 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 24 Sep 2014 16:52:08 +0200 Subject: [PATCH 128/194] Use Liberation Font in QPipelineView --- .../resources/fonts/LiberationSans-Bold.ttf | Bin 0 -> 133488 bytes .../fonts/LiberationSans-BoldItalic.ttf | Bin 0 -> 128968 bytes .../resources/fonts/LiberationSans-Italic.ttf | Bin 0 -> 155452 bytes .../fonts/LiberationSans-Regular.ttf | Bin 0 -> 133828 bytes vistrails/gui/theme.py | 21 ++++++++++++------ 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100755 vistrails/gui/resources/fonts/LiberationSans-Bold.ttf create mode 100755 vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf create mode 100755 vistrails/gui/resources/fonts/LiberationSans-Italic.ttf create mode 100755 vistrails/gui/resources/fonts/LiberationSans-Regular.ttf diff --git a/vistrails/gui/resources/fonts/LiberationSans-Bold.ttf b/vistrails/gui/resources/fonts/LiberationSans-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..2d7addc03c2ac6a90b36e01d246e01d9be3283c2 GIT binary patch literal 133488 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

P7}Trom{zN7^wZWvm-^pWrPdjH2>JYiOK#jK{B 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 SNA=JNm8&^seJ?e7{{I2VS+}|X literal 0 HcmV?d00001 diff --git a/vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf b/vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d78e96d8bbcae4f438705635fcc38c67c7333245 GIT binary patch literal 128968 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 literal 0 HcmV?d00001 diff --git a/vistrails/gui/resources/fonts/LiberationSans-Italic.ttf b/vistrails/gui/resources/fonts/LiberationSans-Italic.ttf new file mode 100755 index 0000000000000000000000000000000000000000..d13947859a63c1766b17c8af0c0e4ec02f4d4763 GIT binary patch literal 155452 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%0A#4WO;h)-5om@Q%c|Jj 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 Date: Wed, 24 Sep 2014 18:29:59 +0200 Subject: [PATCH 129/194] Set pixelSize on fonts in graphics view --- vistrails/gui/theme.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py index bddc53436..5b761f6ba 100644 --- a/vistrails/gui/theme.py +++ b/vistrails/gui/theme.py @@ -307,28 +307,36 @@ def __init__(self): #### FONTS #### # Font for module text - # Using LiberationSans to get same look on all platforms + + # Using "Liberation Sans" and pixelSize to get same look on all platforms QtGui.QFontDatabase().addApplicationFont( vistrails.core.system.vistrails_root_directory() + '/gui/resources/fonts/LiberationSans-Regular.ttf') QtGui.QFontDatabase().addApplicationFont( vistrails.core.system.vistrails_root_directory() + '/gui/resources/fonts/LiberationSans-Bold.ttf') - self.MODULE_FONT = QtGui.QFont("Liberation Sans", 14, QtGui.QFont.Bold) + GRAPHICS_FONT = "Liberation Sans" + self.MODULE_FONT = QtGui.QFont(GRAPHICS_FONT, 14, QtGui.QFont.Bold) + self.MODULE_FONT.setPixelSize(14) self.MODULE_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_FONT) - self.MODULE_DESC_FONT = QtGui.QFont("Liberation Sans", 12) + self.MODULE_DESC_FONT = QtGui.QFont(GRAPHICS_FONT, 12) + self.MODULE_DESC_FONT.setPixelSize(12) self.MODULE_DESC_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_DESC_FONT) - self.MODULE_EDIT_FONT = QtGui.QFont("Liberation Sans", 10) + self.MODULE_EDIT_FONT = QtGui.QFont(GRAPHICS_FONT, 10) + self.MODULE_EDIT_FONT.setPixelSize(10) self.MODULE_EDIT_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_EDIT_FONT) # Font for version text - self.VERSION_FONT = QtGui.QFont("Liberation Sans", 15, QtGui.QFont.Bold) + self.VERSION_FONT = QtGui.QFont(GRAPHICS_FONT, 15, QtGui.QFont.Bold) + self.VERSION_FONT.setPixelSize(15) self.VERSION_FONT_METRIC = QtGui.QFontMetrics(self.VERSION_FONT) - self.VERSION_DESCRIPTION_FONT = QtGui.QFont("Liberation Sans", 15, + self.VERSION_DESCRIPTION_FONT = QtGui.QFont(GRAPHICS_FONT, 15, QtGui.QFont.Normal, True) + self.VERSION_DESCRIPTION_FONT.setPixelSize(15) self.VERSION_DESCRIPTION_FONT_METRIC = \ QtGui.QFontMetrics(self.VERSION_DESCRIPTION_FONT) - self.VERSION_PROPERTIES_FONT = QtGui.QFont("Liberation Sans", 12) + + self.VERSION_PROPERTIES_FONT = QtGui.QFont("Arial", 12) self.VERSION_PROPERTIES_FONT_METRIC = \ QtGui.QFontMetrics(self.VERSION_PROPERTIES_FONT) self.VERSION_PROPERTIES_PEN = QtGui.QBrush( From 7cee05b499a8de151bb4d20ad044be20fd086c85 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 25 Sep 2014 00:40:20 +0200 Subject: [PATCH 130/194] Use setPixelSize and NoHinting for fonts in graphics view --- vistrails/gui/modules/constant_configuration.py | 5 +++-- vistrails/gui/pipeline_view.py | 5 +++-- vistrails/gui/theme.py | 15 ++++++++++----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/vistrails/gui/modules/constant_configuration.py b/vistrails/gui/modules/constant_configuration.py index e108f027b..c58056f7b 100644 --- a/vistrails/gui/modules/constant_configuration.py +++ b/vistrails/gui/modules/constant_configuration.py @@ -198,8 +198,9 @@ def setDefault(self, value): def boundingRect(self): # calc font height - height = CurrentTheme.MODULE_EDIT_FONT_METRIC.boundingRect('Fg').height() - return QtCore.QRectF(0.0, 0.0, 150, height + 4) + #height = CurrentTheme.MODULE_EDIT_FONT_METRIC.height() + height = 11 # hardcoded because fontmetric can give wrong value + return QtCore.QRectF(0.0, 0.0, 150, height + 3) def eventFilter(self, obj, event): if event.type() == QtCore.QEvent.KeyPress and \ diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 417e029e4..92060c916 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3367,7 +3367,7 @@ def __init__(self, function, parent=None, constant=None): width = max(width, editRect.width()) fname = QtGui.QGraphicsSimpleTextItem(name, self) fname.setFont(CurrentTheme.MODULE_EDIT_FONT) - fname.setPos(-2, -2) + fname.setPos(-1, -1) names = [] sigstring = function.sigstring @@ -3381,7 +3381,8 @@ def __init__(self, function, parent=None, constant=None): tooltip = function.name + short_sigstring fname.setToolTip(tooltip) - height += bounds(name).height() + #height += bounds(name).height() + height += 11 # hardcoded because fontmetric can give wrong value for i in xrange(len(function.parameters)): param = function.parameters[i] diff --git a/vistrails/gui/theme.py b/vistrails/gui/theme.py index 5b761f6ba..4ab360349 100644 --- a/vistrails/gui/theme.py +++ b/vistrails/gui/theme.py @@ -316,23 +316,28 @@ def __init__(self): vistrails.core.system.vistrails_root_directory() + '/gui/resources/fonts/LiberationSans-Bold.ttf') GRAPHICS_FONT = "Liberation Sans" - self.MODULE_FONT = QtGui.QFont(GRAPHICS_FONT, 14, QtGui.QFont.Bold) + self.MODULE_FONT = QtGui.QFont(GRAPHICS_FONT, -1, QtGui.QFont.Bold) self.MODULE_FONT.setPixelSize(14) + self.MODULE_FONT.setHintingPreference(QtGui.QFont.PreferNoHinting) self.MODULE_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_FONT) - self.MODULE_DESC_FONT = QtGui.QFont(GRAPHICS_FONT, 12) + self.MODULE_DESC_FONT = QtGui.QFont(GRAPHICS_FONT, -1) self.MODULE_DESC_FONT.setPixelSize(12) + self.MODULE_DESC_FONT.setHintingPreference(QtGui.QFont.PreferNoHinting) self.MODULE_DESC_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_DESC_FONT) - self.MODULE_EDIT_FONT = QtGui.QFont(GRAPHICS_FONT, 10) + self.MODULE_EDIT_FONT = QtGui.QFont(GRAPHICS_FONT, -1) self.MODULE_EDIT_FONT.setPixelSize(10) + self.MODULE_EDIT_FONT.setHintingPreference(QtGui.QFont.PreferNoHinting) self.MODULE_EDIT_FONT_METRIC = QtGui.QFontMetrics(self.MODULE_EDIT_FONT) # Font for version text - self.VERSION_FONT = QtGui.QFont(GRAPHICS_FONT, 15, QtGui.QFont.Bold) + self.VERSION_FONT = QtGui.QFont(GRAPHICS_FONT, -1, QtGui.QFont.Bold) self.VERSION_FONT.setPixelSize(15) + self.VERSION_FONT.setHintingPreference(QtGui.QFont.PreferNoHinting) self.VERSION_FONT_METRIC = QtGui.QFontMetrics(self.VERSION_FONT) - self.VERSION_DESCRIPTION_FONT = QtGui.QFont(GRAPHICS_FONT, 15, + self.VERSION_DESCRIPTION_FONT = QtGui.QFont(GRAPHICS_FONT, -1, QtGui.QFont.Normal, True) self.VERSION_DESCRIPTION_FONT.setPixelSize(15) + self.VERSION_DESCRIPTION_FONT.setHintingPreference(QtGui.QFont.PreferNoHinting) self.VERSION_DESCRIPTION_FONT_METRIC = \ QtGui.QFontMetrics(self.VERSION_DESCRIPTION_FONT) From 99c2cb16e859b42617bc5190eefba0714af7d478 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 29 Sep 2014 16:09:35 +0200 Subject: [PATCH 131/194] Remove DPI scaling on graphicsview fonts It works better than setpixelsize and bundled font. gui/theme.py: - fixDPI: Multiply font size with 72/DPI to get same size on all platforms. Also removed LiberationSans fonts. --- .../resources/fonts/LiberationSans-Bold.ttf | Bin 133488 -> 0 bytes .../fonts/LiberationSans-BoldItalic.ttf | Bin 128968 -> 0 bytes .../resources/fonts/LiberationSans-Italic.ttf | Bin 155452 -> 0 bytes .../fonts/LiberationSans-Regular.ttf | Bin 133828 -> 0 bytes vistrails/gui/theme.py | 33 +++++------------- 5 files changed, 9 insertions(+), 24 deletions(-) delete mode 100755 vistrails/gui/resources/fonts/LiberationSans-Bold.ttf delete mode 100755 vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf delete mode 100755 vistrails/gui/resources/fonts/LiberationSans-Italic.ttf delete mode 100755 vistrails/gui/resources/fonts/LiberationSans-Regular.ttf diff --git a/vistrails/gui/resources/fonts/LiberationSans-Bold.ttf b/vistrails/gui/resources/fonts/LiberationSans-Bold.ttf deleted file mode 100755 index 2d7addc03c2ac6a90b36e01d246e01d9be3283c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133488 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

P7}Trom{zN7^wZWvm-^pWrPdjH2>JYiOK#jK{B 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 SNA=JNm8&^seJ?e7{{I2VS+}|X diff --git a/vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf b/vistrails/gui/resources/fonts/LiberationSans-BoldItalic.ttf deleted file mode 100755 index d78e96d8bbcae4f438705635fcc38c67c7333245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128968 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 diff --git a/vistrails/gui/resources/fonts/LiberationSans-Italic.ttf b/vistrails/gui/resources/fonts/LiberationSans-Italic.ttf deleted file mode 100755 index d13947859a63c1766b17c8af0c0e4ec02f4d4763..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 155452 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%0A#4WO;h)-5om@Q%c|Jj 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 Date: Mon, 29 Sep 2014 17:30:50 +0200 Subject: [PATCH 132/194] Right-click drag on module uses wrong scale gui/graphics_view.py: Call computeScale if clicking on a module and dragging --- vistrails/gui/graphics_view.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/graphics_view.py b/vistrails/gui/graphics_view.py index daa631ed5..d47835ce8 100644 --- a/vistrails/gui/graphics_view.py +++ b/vistrails/gui/graphics_view.py @@ -407,13 +407,14 @@ def mousePressEvent(self, e): # super(QInteractiveGraphicsView, self).mousePressEvent(e) else: if buttons & QtCore.Qt.RightButton: + self.computeScale() if item is None: self.setCursorState(2) - self.computeScale() else: QtGui.QGraphicsView.mousePressEvent(self, e) elif buttons & QtCore.Qt.MidButton: self.setCursorState(3) + self.computeScale() self.startScroll = (self.horizontalScrollBar().value(), self.verticalScrollBar().value()) self.lastPos = QtCore.QPoint(QtGui.QCursor.pos()) From 968dede3c6bbe39aae9f37242af9cd2f0e61166e Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 1 Oct 2014 15:16:01 +0200 Subject: [PATCH 133/194] api tests fails when setting current_pipeline_view to None Why is this needed? gui/pipeline_view.py: - set_controller: Do not set current_pipeline_view to None --- vistrails/gui/pipeline_view.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 92060c916..0a400369c 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -3665,11 +3665,12 @@ def set_title(self, title): def set_controller(self, controller): oldController = self.controller if oldController != controller: - if oldController != None: + #if oldController != None: # self.disconnect(oldController, # QtCore.SIGNAL('versionWasChanged'), # self.version_changed) - oldController.current_pipeline_view = None + # is this needed. It causes errors in api tests + #oldController.current_pipeline_view = None self.controller = controller self.scene().controller = controller # self.connect(controller, From ff69d08a2c6ad1133675a376a946ab434e83e77a Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 1 Oct 2014 16:06:54 +0200 Subject: [PATCH 134/194] Added documentation for viewOnLoad --- vistrails/core/configuration.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 3d4d11667..c90aa88ca 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -130,6 +130,7 @@ userPackageDir: Local packages directory webRepositoryURL: Web repository URL webRepositoryUser: Web repository username +viewOnLoad: Whether to show pipeline or history view when opening vistrail withVersionTree: Output the version tree as an image withWorkflow: Output the workflow graph as an image """ @@ -505,6 +506,11 @@ The default username for logging into a VisTrails web repository like crowdLabs. +viewOnLoad: String + + Whether to show pipeline or history view when opening vistrail + Can be either appropriate/pipeline/history + withVersionTree: Boolean Output the version tree as an image. From d1097c1513f17772d412becbcb0e335eeaaf0cf2 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 1 Oct 2014 16:07:09 +0200 Subject: [PATCH 135/194] Pipeline view was not shown when version was specified gui/vistrails_window.py: - open_vistrail_without_prompt: Always switch to pipeline view when version is specified --- vistrails/gui/vistrails_window.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 01cf49d62..926d6a15d 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1754,7 +1754,9 @@ def open_vistrail_without_prompt(self, locator, version=None, return view.version_view.select_current_version() conf = get_vistrails_configuration() - if conf.check('viewOnLoad') and conf.viewOnLoad == 'history': + if version: + self.qactions['pipeline'].trigger() + elif conf.check('viewOnLoad') and conf.viewOnLoad == 'history': self.qactions['history'].trigger() elif conf.check('viewOnLoad') and conf.viewOnLoad == 'pipeline': self.qactions['pipeline'].trigger() From b62ded4c9adc4ff6a04e3cea450fdc5a6d385dbf Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 1 Oct 2014 11:13:59 -0400 Subject: [PATCH 136/194] Fixes syntax typo from b799f500 Module Configuration button didn't work. --- vistrails/gui/vistrails_window.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 926d6a15d..c892543fd 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1084,9 +1084,9 @@ def init_palettes(self): ((QModuleIteration, True), (('controller_changed', 'set_controller'), ('module_changed', 'update_module')))] + - [] if not get_shell_dialog() else [ + ([] if not get_shell_dialog() else [ ((get_shell_dialog(), True), - (('controller_changed', 'set_controller'),))] + + (('controller_changed', 'set_controller'),))]) + [((QDebugger, True), (('controller_changed', 'set_controller'),)), (DebugView, True), From 560092c6e35a4d95e6acbb9f8e1c5d8ba6b6ed8e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 1 Oct 2014 12:48:19 -0400 Subject: [PATCH 137/194] Removes method QPortCombineTreeWidget#getPorts() --- vistrails/gui/module_iteration.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/vistrails/gui/module_iteration.py b/vistrails/gui/module_iteration.py index 8af2c94b3..2a60e92de 100644 --- a/vistrails/gui/module_iteration.py +++ b/vistrails/gui/module_iteration.py @@ -463,16 +463,6 @@ def getValue(self): L = None return json.dumps(L) - def getPorts(self, node, ports=None): - if ports is None: - ports = [] - # extract ports in json struct - if isinstance(node, basestring): - ports.append(node) - else: - [self.getPorts(i, ports) for i in [node[1:]]] - return ports - def setDefault(self, module): self.clear() if not module: From f596617b227482642954ac33600e968bd8498323 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 1 Oct 2014 15:22:10 -0400 Subject: [PATCH 138/194] Fixes spacing inside output configuration palette --- vistrails/gui/module_configuration.py | 18 +++++------------- vistrails/gui/modules/output_configuration.py | 5 ++--- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/vistrails/gui/module_configuration.py b/vistrails/gui/module_configuration.py index df803789d..e41212967 100644 --- a/vistrails/gui/module_configuration.py +++ b/vistrails/gui/module_configuration.py @@ -49,8 +49,7 @@ def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setLayout(QtGui.QVBoxLayout()) self.widget = None - #self.setFocusPolicy(QtCore.Qt.StrongFocus) - + def setUpWidget(self, widget): self.widget = widget self.layout().addWidget(self.widget) @@ -58,14 +57,14 @@ def setUpWidget(self, widget): def clear(self): """ clear() -> None Clear and delete widget in the layout - + """ - if self.widget: + if self.widget is not None: self.widget.setVisible(False) self.layout().removeWidget(self.widget) self.widget.deleteLater() - self.widget = None - + self.widget = None + def askToSaveChanges(self): if self.widget: return self.widget.askToSaveChanges() @@ -119,13 +118,6 @@ def updateModule(self, module): self.confWidget.setVisible(False) self.confWidget.clear() if module and self.controller: - # if module.has_annotation_with_key('__desc__'): - # label = module.get_annotation_by_key('__desc__').value.strip() - # title = '%s (%s) Module Configuration'%(label, - # module.name) - # else: - # title = '%s Module Configuration'%module.name - # self.setWindowTitle(title) registry = get_module_registry() getter = registry.get_configuration_widget widgetType = None diff --git a/vistrails/gui/modules/output_configuration.py b/vistrails/gui/modules/output_configuration.py index ff32f8d1e..b674bc7e1 100644 --- a/vistrails/gui/modules/output_configuration.py +++ b/vistrails/gui/modules/output_configuration.py @@ -41,10 +41,8 @@ from vistrails.core.configuration import ConfigPath, ConfigField from vistrails.core.modules.basic_modules import Dictionary -from vistrails.gui.common_widgets import QSearchTreeWindow, QSearchTreeWidget, \ - QFileChooserToolButton, QDirectoryChooserToolButton +from vistrails.gui.common_widgets import QDirectoryChooserToolButton from vistrails.gui.modules.module_configure import StandardModuleConfigurationWidget -from vistrails.gui.utils import YES_BUTTON, NO_BUTTON, show_question, show_warning class OutputModuleConfigurationWidget(StandardModuleConfigurationWidget): def __init__(self, module, controller, parent=None): @@ -99,6 +97,7 @@ def update_widget(self): # do we want to add a manual config mode for modes that have # neither been set before nor are registered? # DK: not now... + layout.addStretch(5) scroll_area = QtGui.QScrollArea() inner_widget = QtGui.QWidget() inner_widget.setLayout(layout) From e9d84d51ca6e25f143542f1bf5fe875b8da4ed6e Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 2 Oct 2014 18:33:34 +0200 Subject: [PATCH 139/194] Fixed eventFilter being called before configuration is set gui/application.py: - check if temp_configuration exists before accessing it --- vistrails/gui/application.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index 9b983f9cd..035d7a758 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -629,12 +629,13 @@ def finishSession(self): def eventFilter(self, o, event): """eventFilter(obj,event)-> boolean This will filter all create events and will set on the WA_MacMetalStyle - attribute of a QWidget. It will also filter the FileOpen events on a Mac + attribute of a QWidget. It will also filter the FileOpen events on Mac. """ - metalstyle = self.temp_configuration.check('useMacBrushedMetalStyle') + metalstyle = hasattr(self, 'temp_configuration') and \ + self.temp_configuration.check('useMacBrushedMetalStyle') if metalstyle: - if QtCore.QT_VERSION < 0x40500: + if QtCore.QT_VERSION < 0x40500: create_event = QtCore.QEvent.Create mac_attribute = QtCore.Qt.WA_MacMetalStyle else: From 6360d0892c40e8388f6605ba25fcc8d55023c548 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 2 Oct 2014 19:37:08 +0200 Subject: [PATCH 140/194] conf.execute should not be used to get the value This sometimes caused vistrail files to be wrongly executed when opened core/application.py: - processInteractiveInput: Use .check() and not .execute to get execute value from configuration --- vistrails/core/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/core/application.py b/vistrails/core/application.py index 681fbe670..d3943bfa2 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -280,7 +280,7 @@ def process_interactive_input(self): # version number if locator._vtag != '': version = locator._vtag - execute = self.temp_configuration.execute + execute = self.temp_configuration.check('execute') mashuptrail = None mashupversion = None if hasattr(locator, '_mshptrail'): From 7e2670f92ee08b05fa841f754b437b64d94052af Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 3 Oct 2014 15:48:11 -0400 Subject: [PATCH 141/194] Makes xlwt optional --- vistrails/packages/tabledata/write/__init__.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/vistrails/packages/tabledata/write/__init__.py b/vistrails/packages/tabledata/write/__init__.py index 111547086..94f52a90f 100644 --- a/vistrails/packages/tabledata/write/__init__.py +++ b/vistrails/packages/tabledata/write/__init__.py @@ -6,10 +6,15 @@ except ImportError: # pragma: no cover numpy_modules = [] else: - from write_numpy import _modules as numpy_modules + from .write_numpy import _modules as numpy_modules -from write_csv import _modules as csv_modules -from write_excel import _modules as excel_modules +from .write_excel import get_xlwt +if get_xlwt(): + from .write_excel import _modules as excel_modules +else: # pragma: no cover + excel_modules = [] + +from .write_csv import _modules as csv_modules _modules = make_modules_dict(numpy_modules, csv_modules, excel_modules, @@ -19,7 +24,6 @@ ############################################################################### import unittest -from .write_excel import get_xlwt class BaseWriteTestCase(object): From 61a5d306d6cc949225e9db2a4b405352ded3b1f9 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 3 Oct 2014 15:39:35 -0400 Subject: [PATCH 142/194] Makes xlrd optional --- vistrails/packages/tabledata/read/__init__.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/vistrails/packages/tabledata/read/__init__.py b/vistrails/packages/tabledata/read/__init__.py index dfafc7bbb..7548d8ac8 100644 --- a/vistrails/packages/tabledata/read/__init__.py +++ b/vistrails/packages/tabledata/read/__init__.py @@ -6,11 +6,16 @@ except ImportError: # pragma: no cover numpy_modules = [] else: - from read_numpy import _modules as numpy_modules + from .read_numpy import _modules as numpy_modules -from read_csv import _modules as csv_modules -from read_excel import _modules as excel_modules -from read_json import _modules as json_modules +from .read_excel import get_xlrd +if get_xlrd(): + from .read_excel import _modules as excel_modules +else: # pragma: no cover + excel_modules = [] + +from .read_csv import _modules as csv_modules +from .read_json import _modules as json_modules _modules = make_modules_dict(numpy_modules, csv_modules, excel_modules, json_modules, From 6c1b88d28c3b692b9631edeefe751d09a42b7977 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 8 Oct 2014 12:05:35 -0400 Subject: [PATCH 143/194] Fixes 843c4294 --- vistrails/gui/qt.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/gui/qt.py b/vistrails/gui/qt.py index 35199d0b7..61131e786 100644 --- a/vistrails/gui/qt.py +++ b/vistrails/gui/qt.py @@ -136,6 +136,7 @@ def __init__(self): return _appHolder def destroyBogusQtApp(): + global _appHolder _appHolder = None def qt_version(): From 49eb08b3e14e43fb98b896624498cfe031775803 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 8 Oct 2014 13:54:37 -0400 Subject: [PATCH 144/194] Removes list comprehensions from set() calls --- vistrails/core/query/__init__.py | 4 ++-- vistrails/core/query/visual.py | 4 ++-- vistrails/db/versions/v1_0_3/translate/v1_0_2.py | 2 +- vistrails/gui/pipeline_view.py | 16 ++++++++-------- vistrails/gui/vis_diff.py | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/vistrails/core/query/__init__.py b/vistrails/core/query/__init__.py index 5afe8f349..f16dcd72f 100644 --- a/vistrails/core/query/__init__.py +++ b/vistrails/core/query/__init__.py @@ -265,7 +265,7 @@ def run(self, vistrail, name): vistrails.vistrails_name = %s and vistrails.vistrails_id = wf_exec.vistrails_id""", name) lst = list(c.fetchall()) - versions = set([x[1] for x in lst]) + versions = set(x[1] for x in lst) executions = set(lst) result = [] for version in versions: @@ -305,7 +305,7 @@ def run(self, vistrail, name): vistrails.vistrails_name = %s and vistrails.vistrails_id = wf_exec.vistrails_id""", name) lst = list(c.fetchall()) - versions = set([x[1] for x in lst]) + versions = set(x[1] for x in lst) executions = set(lst) result = [] for version in versions: diff --git a/vistrails/core/query/visual.py b/vistrails/core/query/visual.py index 9e87d14a1..e3e2de1be 100644 --- a/vistrails/core/query/visual.py +++ b/vistrails/core/query/visual.py @@ -51,8 +51,8 @@ def heuristicDAGIsomorphism(self, target_ids, template_ids): resultIds = set() while 1: - templateNames = set([(i, template.modules[i].name) - for i in template_ids]) + templateNames = set((i, template.modules[i].name) + for i in template_ids) targetNames = {} for i in target_ids: append_to_dict_of_lists(targetNames, target.modules[i].name, i) diff --git a/vistrails/db/versions/v1_0_3/translate/v1_0_2.py b/vistrails/db/versions/v1_0_3/translate/v1_0_2.py index a6e08139b..c1d84e043 100644 --- a/vistrails/db/versions/v1_0_3/translate/v1_0_2.py +++ b/vistrails/db/versions/v1_0_3/translate/v1_0_2.py @@ -317,7 +317,7 @@ def testParamexp(self): pes = vistrail.db_get_parameter_explorations() self.assertEqual(len(pes), 1) funs = pes[0].db_functions - self.assertEqual(set([f.db_port_name for f in funs]), + self.assertEqual(set(f.db_port_name for f in funs), set(['SetCoefficients', 'SetBackgroundWidget'])) parameters = funs[0].db_parameters self.assertEqual(len(parameters), 10) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 0a400369c..3f54860d0 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1101,8 +1101,8 @@ def module_text_has_changed(m1, m2): return False # def module_functions_have_changed(m1, m2): - # f1_names = set([f.name for f in m1.functions]) - # f2_names = set([f.name for f in m2.functions]) + # f1_names = set(f.name for f in m1.functions) + # f2_names = set(f.name for f in m2.functions) # return (len(f1_names ^ f2_names) > 0) if self.show_widgets != get_vistrails_configuration( @@ -1147,8 +1147,8 @@ def module_text_has_changed(m1, m2): def moduleFunctionsHaveChanged(self, core_module): m1 = self.module m2 = core_module - f1_names = set([f.name for f in m1.functions]) - f2_names = set([f.name for f in m2.functions]) + f1_names = set(f.name for f in m1.functions) + f2_names = set(f.name for f in m2.functions) return (len(f1_names ^ f2_names) > 0) def update_function_ports(self, core_module=None): @@ -1159,7 +1159,7 @@ def update_function_ports(self, core_module=None): self._cur_function_names = copy.copy(added_functions) else: before_names = self._cur_function_names - after_names = set([f.name for f in core_module.functions]) + after_names = set(f.name for f in core_module.functions) added_functions = after_names - before_names deleted_functions = before_names - after_names self._cur_function_names = copy.copy(after_names) @@ -2207,9 +2207,9 @@ def recreate_module(self, pipeline, m_id): def update_module_functions(self, pipeline, m_id): module = pipeline.modules[m_id] # check if a visible function has been deleted - before = set([f.name for f in - self.controller.current_pipeline.modules[m_id].functions]) - after = set([f.name for f in module.functions]) + before = set(f.name for f in + self.controller.current_pipeline.modules[m_id].functions) + after = set(f.name for f in module.functions) if (before - after) & module.editable_input_ports: # function deleted so we need to recreate module with empty widget self.recreate_module(pipeline, m_id) diff --git a/vistrails/gui/vis_diff.py b/vistrails/gui/vis_diff.py index 43804cfce..5d80fc1c4 100644 --- a/vistrails/gui/vis_diff.py +++ b/vistrails/gui/vis_diff.py @@ -667,8 +667,8 @@ def set_diff(self, version_a, version_b, vistrail_b=None): p_both.add_module(copy.copy(p1.modules[m1id])) # Then add parameter changed version - inChanged = set([m for (m, matching) - in chain(paramChanged, cparamChanged, annotChanged)]) + inChanged = set(m for (m, matching) + in chain(paramChanged, cparamChanged, annotChanged)) for (m1id, m2id) in inChanged: m1 = p1.modules[m1id] m2 = p2.modules[m2id] From 18945e9baf0abffe4b181c9fcaeda058b4f72e08 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 8 Oct 2014 15:41:04 -0400 Subject: [PATCH 145/194] Removes None default_value in new_constant() --- vistrails/core/modules/basic_modules.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index ef78bbc00..096986584 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -216,8 +216,6 @@ def new_constant(name, py_conversion=None, default_value=None, validation=None, raise ValueError("Must specify validation for constant") if default_value is not None: d["default_value"] = default_value - elif base_class == Constant: - d["default_value"] = None if str_conversion is not None: d['translate_to_string'] = str_conversion From 7d28ec7cf201c08e97dcd050b3bcf6e94d5b1309 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 8 Oct 2014 17:23:08 -0400 Subject: [PATCH 146/194] Removes unused Collection#update_from_database() --- vistrails/core/collection/__init__.py | 52 +-------------------------- 1 file changed, 1 insertion(+), 51 deletions(-) diff --git a/vistrails/core/collection/__init__.py b/vistrails/core/collection/__init__.py index c7835f0e9..ee8d932aa 100644 --- a/vistrails/core/collection/__init__.py +++ b/vistrails/core/collection/__init__.py @@ -45,11 +45,10 @@ from mashup import MashupEntity from parameter_exploration import ParameterExplorationEntity -from vistrails.core.db.locator import ZIPFileLocator, DBLocator, FileLocator, BaseLocator +from vistrails.core.db.locator import FileLocator, BaseLocator from vistrails.core.db.io import load_vistrail import vistrails.core.system import vistrails.db.services.io -from vistrails.core.configuration import get_vistrails_configuration from vistrails.core import debug schema = ["create table entity(id integer primary key, type integer, " @@ -289,26 +288,6 @@ def create_vistrail_entity(self, vistrail): self.add_entity(entity) return entity - def update_from_database(self, db_locator): - # db_conn = db_locator.get_connection() - config = {'host': db_locator._host, - 'port': int(db_locator._port), - 'db': db_locator._db, - 'user': db_locator._user, - 'passwd': db_locator._passwd} - rows = vistrails.db.services.io.get_db_object_list(config, 'vistrail') - for row in rows: - if row[0] in [1,]: - continue - locator = DBLocator(config['host'], config['port'], config['db'], - config['user'], config['passwd'], - obj_type='vistrail', obj_id=row[0]) - (vistrail, abstractions, thumbnails, mashups) = load_vistrail(locator) - vistrail.abstractions = abstractions - vistrail.thumbnails = thumbnails - vistrail.mashups = mashups - self.create_vistrail_entity(vistrail) - def update_from_directory(self, directory): filenames = glob.glob(os.path.join(directory, '*.vt')) for filename in filenames: @@ -361,32 +340,3 @@ def updateVistrail(self, url, vistrail=None): # probably an unsaved vistrail pass # debug.critical("Locator is not valid!") - -def main(): - import sys - sys.path.append('/home/tommy/git/vistrails/vistrails') - - # vistrail = load_vistrail(ZIPFileLocator('/vistrails/examples/spx.vt'))[0] -# db_locator = DBLocator('vistrails.sci.utah.edu', 3306, -# 'vistrails', 'vistrails', '8edLj4', -# obj_id=9, obj_type='vistrail') - # vistrail = load_vistrail(db_locator)[0] - c = Collection('/home/tommy/git/vistrails/vistrails/core/collection/test.db') - c.clear() - c.update_from_directory('/home/tommy/git/vistrails/examples') -# c.update_from_database(db_locator) - - # entity = c.create_vistrail_entity(vistrail) - c.entities = {} - c.load_entities() -# print c.entities[2].url -# locator = BaseLocator.from_url(c.entities[2].url) -# c.entities[1].description = 'blah blah blah' -# c.save_entity(c.entities[1]) -# print locator.to_url() - # c.load_entities() - -# print BaseLocator.from_url('/vistrails/examples/spx.xml').to_url() - -if __name__ == '__main__': - main() From 590cddf3b072aa49cd5caa288a31a20b739f4f39 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 14:47:17 -0400 Subject: [PATCH 147/194] Removes unused MultiLineWidget, unused since 2009 Last usage removed by 63aa48e7. --- vistrails/gui/common_widgets.py | 39 --------------------------------- 1 file changed, 39 deletions(-) diff --git a/vistrails/gui/common_widgets.py b/vistrails/gui/common_widgets.py index a0a1cf26c..2dbf4fe35 100644 --- a/vistrails/gui/common_widgets.py +++ b/vistrails/gui/common_widgets.py @@ -479,46 +479,7 @@ def insertFileNameDialog(self): '(*.*)') if fileName: self.setText(fileName) - -############################################################################### -class MultiLineWidget(StandardConstantWidget): - def __init__(self, contents, contentType, parent=None): - """__init__(contents: str, contentType: str, parent: QWidget) -> - StandardConstantWidget - Initialize the line edit with its contents. Content type is limited - to 'int', 'float', and 'string' - - """ - StandardConstantWidget.__init__(self, parent) - - def update_parent(self): - pass - - def keyPressEvent(self, event): - """ keyPressEvent(event) -> None - If this is a string line edit, we can use Ctrl+Enter to enter - the file name - - """ - k = event.key() - s = event.modifiers() - if ((k == QtCore.Qt.Key_Enter or k == QtCore.Qt.Key_Return) and - s & QtCore.Qt.ShiftModifier): - event.accept() - if self.contentIsString and self.multiLines: - fileNames = QtGui.QFileDialog.getOpenFileNames(self, - 'Use Filename ' - 'as Value...', - self.text(), - 'All files ' - '(*.*)') - fileName = fileNames.join(',') - if fileName: - self.setText(fileName) - return - QtGui.QLineEdit.keyPressEvent(self,event) - ############################################################################### class QSearchEditBox(QtGui.QComboBox): From bc4d03c48313d611e89576818d600ef4917ff00f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 14:58:39 -0400 Subject: [PATCH 148/194] Removes QTabBarDetachButton, unused since 2011 Last usage removed by 72884448. --- vistrails/gui/common_widgets.py | 95 --------------------------------- 1 file changed, 95 deletions(-) diff --git a/vistrails/gui/common_widgets.py b/vistrails/gui/common_widgets.py index 2dbf4fe35..ca4fad8e1 100644 --- a/vistrails/gui/common_widgets.py +++ b/vistrails/gui/common_widgets.py @@ -677,101 +677,6 @@ def setManualResetEnabled(self, boolVal): ############################################################################### -class QTabBarDetachButton(QtGui.QAbstractButton): - """QTabBarDetachButton is a special button to be added to a tab - - """ - def __init__(self, parent): - QtGui.QAbstractButton.__init__(self) - self.setFocusPolicy(QtCore.Qt.NoFocus) - self.setCursor(QtCore.Qt.ArrowCursor) - self.setToolTip("Detach Tab") - self.setIcon(CurrentTheme.DETACH_TAB_ICON) - self.activePixmap = self.icon().pixmap(self.sizeHint(), - mode=QtGui.QIcon.Active) - self.normalPixmap = self.icon().pixmap(self.sizeHint(), - mode=QtGui.QIcon.Normal) - - self.resize(self.sizeHint()) - - def sizeHint(self): - self.ensurePolished() - size = QtCore.QSize() - if not self.icon().isNull(): - iconSize = self.style().pixelMetric(QtGui.QStyle.PM_SmallIconSize, - None, self) - sz = self.icon().actualSize(QtCore.QSize(iconSize, iconSize)) - size = max(sz.width(), sz.height()) - - return QtCore.QSize(size, size) - - def enterEvent(self, event): - if self.isEnabled(): - icon = QtGui.QIcon(self.activePixmap) - self.setIcon(icon) - self.update() - else: - icon = QtGui.QIcon(self.normalPixmap) - self.setIcon(icon) - QtGui.QAbstractButton.enterEvent(self, event) - - def leaveEvent(self, event): - icon = QtGui.QIcon(self.normalPixmap) - self.setIcon(icon) - if self.isEnabled(): - self.update() - QtGui.QAbstractButton.leaveEvent(self, event) - - def closePosition(self): - tb = self.parent() - if isinstance(tb, QtGui.QTabBar): - close_position = self.style().styleHint(QtGui.QStyle.SH_TabBar_CloseButtonPosition, - None, tb) - return close_position - return -1 - - def otherPosition(self): - tb = self.parent() - if isinstance(tb, QtGui.QTabBar): - close_position = self.closePosition() - if close_position == QtGui.QTabBar.LeftSide: - position = QtGui.QTabBar.RightSide - else: - position = QtGui.QTabBar.LeftSide - return position - return -1 - - def paintEvent(self, event): - p = QtGui.QPainter(self) - opt = QtGui.QStyleOptionToolButton() - opt.init(self) - opt.state |= QtGui.QStyle.State_AutoRaise - if (self.isEnabled() and self.underMouse() and - not self.isChecked() and not self.isDown()): - opt.state |= QtGui.QStyle.State_Raised - if self.isChecked(): - opt.state |= QtGui.QStyle.State_On - if self.isDown(): - opt.state |= QtGui.QStyle.State_Sunken - tb = self.parent() - if isinstance(tb, QtGui.QTabBar): - index = tb.currentIndex() - position = self.otherPosition() - if tb.tabButton(index, position) == self: - opt.state |= QtGui.QStyle.State_Selected - opt.icon = self.icon() - opt.subControls = QtGui.QStyle.SC_None - opt.activeSubControls = QtGui.QStyle.SC_None - opt.features = QtGui.QStyleOptionToolButton.None - opt.arrowType = QtCore.Qt.NoArrow - size = self.style().pixelMetric(QtGui.QStyle.PM_SmallIconSize, - None, self) - opt.iconSize = QtCore.QSize(size,size) - self.style().drawComplexControl(QtGui.QStyle.CC_ToolButton, opt, p, - self) - -############################################################################### - class QMouseTabBar(QtGui.QTabBar): """QMouseTabBar is a QTabBar that emits a signal when a tab receives a mouse event. For now only doubleclick events are From 7ffda884314e5b7f18b22f38b6c9fed3da74d149 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 15:06:07 -0400 Subject: [PATCH 149/194] Removes unused imports from common_widgets --- vistrails/gui/configuration.py | 5 ++--- vistrails/gui/module_annotation.py | 1 - vistrails/gui/vistrail_variables.py | 1 - vistrails/packages/persistence/widgets.py | 2 +- 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/vistrails/gui/configuration.py b/vistrails/gui/configuration.py index cf86c0d5f..903c0006a 100644 --- a/vistrails/gui/configuration.py +++ b/vistrails/gui/configuration.py @@ -38,14 +38,13 @@ import os.path from PyQt4 import QtGui, QtCore -from vistrails.core import debug from vistrails.core.configuration import ConfigurationObject, \ - ConfigFieldParent, ConfigPath, ConfigURL, \ + ConfigFieldParent, ConfigPath, \ get_vistrails_configuration, find_simpledoc from vistrails.core.thumbnails import ThumbnailCache from vistrails.gui.common_widgets import QSearchTreeWindow, QSearchTreeWidget, \ - QFileChooserToolButton, QDirectoryChooserToolButton + QDirectoryChooserToolButton from vistrails.gui.utils import YES_BUTTON, NO_BUTTON, show_question, show_warning from vistrails.core import system diff --git a/vistrails/gui/module_annotation.py b/vistrails/gui/module_annotation.py index fb6ec4a03..1c7ed7ec2 100644 --- a/vistrails/gui/module_annotation.py +++ b/vistrails/gui/module_annotation.py @@ -40,7 +40,6 @@ QModuleAnnotationTable """ from PyQt4 import QtCore, QtGui -from vistrails.gui.common_widgets import QToolWindowInterface from vistrails.core import debug ################################################################################ diff --git a/vistrails/gui/vistrail_variables.py b/vistrails/gui/vistrail_variables.py index ad59c7660..dfd356e55 100644 --- a/vistrails/gui/vistrail_variables.py +++ b/vistrails/gui/vistrail_variables.py @@ -38,7 +38,6 @@ """ from PyQt4 import QtCore, QtGui from vistrails.gui.variable_dropbox import QVariableDropBox -from vistrails.gui.common_widgets import QToolWindowInterface from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface ################################################################################ diff --git a/vistrails/packages/persistence/widgets.py b/vistrails/packages/persistence/widgets.py index 7d07efa97..8457ee5c4 100644 --- a/vistrails/packages/persistence/widgets.py +++ b/vistrails/packages/persistence/widgets.py @@ -38,7 +38,7 @@ import uuid from vistrails.core.modules.basic_modules import Path -from vistrails.gui.common_widgets import QSearchBox, QSearchEditBox +from vistrails.gui.common_widgets import QSearchBox from vistrails.gui.modules.constant_configuration import ConstantWidgetMixin from vistrails.gui.modules.module_configure import StandardModuleConfigurationWidget From bc7b558177387e5e2307363097369d16eee8f8f0 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 16:20:20 -0400 Subject: [PATCH 150/194] Fixes TestImports#test_package() --- vistrails/core/packagemanager.py | 111 +++++++++++++------------------ 1 file changed, 46 insertions(+), 65 deletions(-) diff --git a/vistrails/core/packagemanager.py b/vistrails/core/packagemanager.py index 645f70778..a673c5fa0 100644 --- a/vistrails/core/packagemanager.py +++ b/vistrails/core/packagemanager.py @@ -904,69 +904,50 @@ class TestImports(unittest.TestCase): def test_package(self): from vistrails.tests.utils import MockLogHandler - # Hacks PackageManager so that it temporarily uses our test package - # instead of userpackages pm = get_package_manager() - from vistrails.tests.resources import import_pkg - def fake_userpkg_mod(): - pm._userpackages = import_pkg - return import_pkg - old_userpackages = pm._userpackages - old_import_userpackages = pm.import_user_packages_module - pm._userpackages = import_pkg - pm.import_user_packages_module = fake_userpkg_mod - - old_fix_names = list(Package.FIX_PACKAGE_NAMES) - Package.FIX_PACKAGE_NAMES.append('tests.resources.import_targets') - - try: - # Check the package is in the list - available_pkg_names = pm.available_package_names_list() - self.assertIn('test_import_pkg', available_pkg_names) - - # Import __init__ and check metadata - pkg = pm.look_at_available_package('test_import_pkg') - with MockLogHandler(debug.DebugPrint.getInstance().logger) as log: - pkg.load('vistrails.tests.resources.import_pkg.') - self.assertEqual(len(log.messages['warning']), 1) - self.assertEqual(pkg.identifier, - 'org.vistrails.tests.test_import_pkg') - self.assertEqual(pkg.version, - '0.42') - for n in ['vistrails.tests.resources.import_targets.test1', - 'vistrails.tests.resources.import_targets.test2']: - self.assertIn(n, sys.modules, "%s not in sys.modules" % n) - - # Import init.py - pm.late_enable_package( - 'test_import_pkg', - {'test_import_pkg': - 'vistrails.tests.resources.import_pkg.'}) - pkg = pm.get_package_by_codepath('test_import_pkg') - for n in ['vistrails.tests.resources.import_targets.test3', - 'vistrails.tests.resources.import_targets.test4', - 'vistrails.tests.resources.import_targets.test5']: - self.assertIn(n, sys.modules, "%s not in sys.modules" % n) - - # Check dependencies - deps = pkg.get_py_deps() - for dep in ['vistrails.tests.resources.import_pkg.test_import_pkg', - 'vistrails.tests.resources.import_pkg.test_import_pkg.init', - 'vistrails.tests.resources.import_pkg.test_import_pkg.module1', - 'vistrails.tests.resources.import_pkg.test_import_pkg.module2', - 'vistrails.tests.resources.import_targets', - 'vistrails.tests.resources.import_targets.test1', - 'vistrails.tests.resources.import_targets.test2', - 'vistrails.tests.resources.import_targets.test3', - 'vistrails.tests.resources.import_targets.test4', - 'vistrails.tests.resources.import_targets.test5', - 'vistrails.tests.resources.import_targets.test6']: - self.assertIn(dep, deps) - finally: - pm._userpackages = old_userpackages - pm.import_user_packages_module = old_import_userpackages - Package.FIX_PACKAGE_NAMES = old_fix_names - try: - pm.late_disable_package('test_import_pkg') - except MissingPackage: - pass + pm.get_available_package( + 'test_import_pkg', + prefix='vistrails.tests.resources.import_pkg.') + + # Check the package is in the list + available_pkg_names = pm.available_package_names_list() + self.assertIn('test_import_pkg', available_pkg_names) + + # Import __init__ and check metadata + pkg = pm.look_at_available_package('test_import_pkg') + with MockLogHandler(debug.DebugPrint.getInstance().logger) as log: + pkg.load('vistrails.tests.resources.import_pkg.') + self.assertEqual(len(log.messages['warning']), 1) + self.assertEqual(pkg.identifier, + 'org.vistrails.tests.test_import_pkg') + self.assertEqual(pkg.version, + '0.42') + for n in ['vistrails.tests.resources.import_targets.test1', + 'vistrails.tests.resources.import_targets.test2']: + self.assertIn(n, sys.modules, "%s not in sys.modules" % n) + + # Import init.py + pm.late_enable_package( + 'test_import_pkg', + {'test_import_pkg': + 'vistrails.tests.resources.import_pkg.'}) + pkg = pm.get_package_by_codepath('test_import_pkg') + for n in ['vistrails.tests.resources.import_targets.test3', + 'vistrails.tests.resources.import_targets.test4', + 'vistrails.tests.resources.import_targets.test5']: + self.assertIn(n, sys.modules, "%s not in sys.modules" % n) + + # Check dependencies + deps = pkg.get_py_deps() + for dep in ['vistrails.tests.resources.import_pkg.test_import_pkg', + 'vistrails.tests.resources.import_pkg.test_import_pkg.init', + 'vistrails.tests.resources.import_pkg.test_import_pkg.module1', + 'vistrails.tests.resources.import_pkg.test_import_pkg.module2', + 'vistrails.tests.resources.import_targets', + 'vistrails.tests.resources.import_targets.test1', + 'vistrails.tests.resources.import_targets.test2', + 'vistrails.tests.resources.import_targets.test3', + 'vistrails.tests.resources.import_targets.test4', + 'vistrails.tests.resources.import_targets.test5', + 'vistrails.tests.resources.import_targets.test6']: + self.assertIn(dep, deps) From 66da79b8c5a4b230b70f6764a8ea88aa69d27e70 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 16:37:33 -0400 Subject: [PATCH 151/194] Uses assertIn() in test --- vistrails/gui/preferences.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py index 6f36976fc..f828a8392 100644 --- a/vistrails/gui/preferences.py +++ b/vistrails/gui/preferences.py @@ -740,5 +740,5 @@ def test_remove_package(self): # check if configuration has been written correctly startup = _app.startup - self.assertTrue(pkg in startup.disabled_packages) - self.assertTrue(pkg not in startup.enabled_packages) + self.assertIn(pkg, startup.disabled_packages) + self.assertNotIn(pkg, startup.enabled_packages) From eb877d185f4fd40d8b5ef9c7b532b645fb0a7434 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 16:05:33 -0400 Subject: [PATCH 152/194] Adds -v command line flag for debugLevel --- vistrails/core/configuration.py | 16 +++++++++------- vistrails/core/debug.py | 2 +- vistrails/core/startup.py | 4 ++-- vistrails/tests/runtestsuite.py | 5 +++++ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index cba26fb87..5c1f282fb 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -128,9 +128,9 @@ useMacBrushedMetalStyle: Use a brushed metal interface (MacOS X only) user: The username for the database to the load vistrail from userPackageDir: Local packages directory +viewOnLoad: Whether to show pipeline or history view when opening vistrail webRepositoryURL: Web repository URL webRepositoryUser: Web repository username -viewOnLoad: Whether to show pipeline or history view when opening vistrail withVersionTree: Output the version tree as an image withWorkflow: Output the workflow graph as an image """ @@ -496,6 +496,11 @@ The location for user-installed packages (defaults to ~/.vistrails/userpackages). +viewOnLoad: String + + Whether to show pipeline or history view when opening vistrail + Can be either appropriate/pipeline/history + webRepositoryURL: URL The URL of the web repository that should be attached to VisTrails @@ -506,11 +511,6 @@ The default username for logging into a VisTrails web repository like crowdLabs. -viewOnLoad: String - - Whether to show pipeline or history view when opening vistrail - Can be either appropriate/pipeline/history - withVersionTree: Boolean Output the version tree as an image. @@ -644,7 +644,9 @@ def __init__(self, name, sub_fields): widget_type="combo", widget_options={"allowed_values": [".vt", ".xml"], "label": "Default File Type/Extension"}), - ConfigField('debugLevel', 0, int, widget_type="combo", + ConfigField('debugLevel', 0, int, + flag='-v', + widget_type="combo", widget_options={"allowed_values": [0,1,2], "label": "Show alerts for", "remap": {0: "Critical Errors Only", diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index 6e6d4e0eb..71a72e986 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -216,7 +216,7 @@ def make_logger(self, f=None): # Then we define a handler to log to the console self.console = logging.StreamHandler() self.console.setFormatter(self.format) - self.console.setLevel(logging.WARNING) + self.console.setLevel(logging.DEBUG) # We also propagate to a second logger, that API users might want to # configure diff --git a/vistrails/core/startup.py b/vistrails/core/startup.py index b12572e49..98da64365 100644 --- a/vistrails/core/startup.py +++ b/vistrails/core/startup.py @@ -315,12 +315,12 @@ def setup_debug(self): msg = ("""Don't know how to set verboseness level to %s - " "setting to the lowest one I know of: 0""" % verbose) debug.critical(msg) - verbose = 0 + verbose = self.temp_configuration.debugLevel = 0 if verbose > 2: msg = ("""Don't know how to set verboseness level to %s - " "setting to the highest one I know of: 2""" % verbose) debug.critical(msg) - verbose = 2 + verbose = self.temp_configuration.debugLevel = 2 dbg = debug.DebugPrint.getInstance() levels = [dbg.WARNING, dbg.INFO, dbg.DEBUG] dbg.set_message_level(levels[verbose]) diff --git a/vistrails/tests/runtestsuite.py b/vistrails/tests/runtestsuite.py index 729bd2dda..9968bb8e3 100755 --- a/vistrails/tests/runtestsuite.py +++ b/vistrails/tests/runtestsuite.py @@ -96,6 +96,9 @@ def clean(self): default=0, dest="verbose", help="set verboseness level(0--2, default=0, " "higher means more verbose)") +parser.add_option("-v", "--vistrails-verbose", action="store", type="int", + default=0, dest="debugLevel", + help="set the debugLevel in VisTrails (0--2, default=0)") parser.add_option("-e", "--examples", action="store_true", default=False, help="run vistrails examples") @@ -129,6 +132,7 @@ def clean(self): installbundles = options.installbundles dotVistrails = options.dotVistrails debug_mode = options.debug +vistrails_verbose = options.debugLevel # Makes stdout unbuffered, so python -u is not needed class Unbuffered(object): @@ -247,6 +251,7 @@ def module_filter(name): 'enablePackagesSilently': True, 'handlerDontAsk': True, 'developerDebugger': debug_mode, + 'debugLevel': vistrails_verbose } if dotVistrails: optionsDict['dotVistrails'] = dotVistrails From 66a37496b3e0d6f7e44a67a290073d3901d2ea7f Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 9 Oct 2014 17:56:36 -0400 Subject: [PATCH 153/194] Adds __repr__() to module registry exceptions --- vistrails/core/modules/module_registry.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index 1c270f982..f695a15b4 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -287,6 +287,7 @@ def __str__(self): return "RegistryException: %s%s%s" % (self._identifier, p_version_str, m_str) + __repr__ = __str__ def __eq__(self, other): return type(self) == type(other) and \ @@ -321,6 +322,7 @@ def __init__(self, identifier): def __str__(self): return "Missing package: %s" % self._identifier + __repr__ = __str__ def _get_module_id(self): return None @@ -338,6 +340,7 @@ def __init__(self, identifier, name, namespace, package_version=None, def __str__(self): return "Missing module %s in package %s" % (self._module_name, self._package_name) + __repr__ = __str__ class MissingPackageVersion(ModuleRegistryException): def __init__(self, identifier, version): @@ -347,6 +350,7 @@ def __init__(self, identifier, version): def __str__(self): return "Missing version %s of package %s" % \ (self._package_version, self._identifier) + __repr__ = __str__ class MissingModuleVersion(ModuleRegistryException): def __init__(self, identifier, name, namespace, module_version, @@ -357,6 +361,7 @@ def __init__(self, identifier, name, namespace, module_version, def __str__(self): return "Missing version %s of module %s from package %s" % \ (self._module_version, self._module_name, self._package_name) + __repr__ = __str__ class AmbiguousResolution(ModuleRegistryException): def __init__(self, name, namespace, matches): @@ -368,6 +373,7 @@ def __str__(self): return ("Ambiguous resolution of module %s. Could resolve to:\n%s" % \ (self._module_name, ',\n'.join(str(m) for m in self.matches))) + __repr__ = __str__ class MissingPort(ModuleRegistryException): def __init__(self, descriptor, port_name, port_type): @@ -382,6 +388,7 @@ def __str__(self): return "Missing %s port %s from module %s in package %s" % \ (self._port_type, self._port_name, self._module_name, self._package_name) + __repr__ = __str__ class PortMismatch(MissingPort): def __init__(self, identifier, name, namespace, port_name, port_type, port_sigstring): @@ -399,6 +406,7 @@ def __str__(self): " in module %s of package %s") % \ (self._port_type.capitalize(), self._port_name, self._port_sigstring, self._module_name, self._package_name) + __repr__ = __str__ class PortsIncompatible(ModuleRegistryException): @@ -430,6 +438,7 @@ def __str__(self): out_name, self._input_port, in_name)) + __repr__ = __str__ class DuplicateModule(ModuleRegistryException): def __init__(self, old_descriptor, new_identifier, new_name, @@ -450,6 +459,7 @@ def __str__(self): "%s in package %s") % \ (self._module_name, self._package_name, old_name, self.old_descriptor.identifier) + __repr__ = __str__ class DuplicateIdentifier(ModuleRegistryException): def __init__(self, identifier, name, namespace=None, @@ -460,6 +470,7 @@ def __init__(self, identifier, name, namespace=None, def __str__(self): return "There is already a module %s in package %s" % \ (self._module_name, self._package_name) + __repr__ = __str__ class InvalidPortSpec(ModuleRegistryException): def __init__(self, descriptor, port_name, port_type, exc): @@ -476,6 +487,7 @@ def __str__(self): 'has bad specification\n %s' % \ (self._port_type, self._port_name, self._module_name, self._package_name, str(self._exc))) + __repr__ = __str__ class MissingBaseClass(Exception): def __init__(self, base): @@ -484,6 +496,7 @@ def __init__(self, base): def __str__(self): return "Base class has not been registered : %s" % (self._base.__name__) + __repr__ = __str__ class ModuleRegistry(DBRegistry): """ModuleRegistry serves as a registry of VisTrails modules. From 52b68df168e057ab9d09ec0edb00dcd00b88223e Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 10 Oct 2014 18:09:43 +0200 Subject: [PATCH 154/194] Save job info in the vistrail * Jobs are shared between workflows in a vistrail * Easier to share jobs core/configuration.py: Removed runJob and added jobInfo runJob is not needed when you can run a workflow normally jobInfo lists jobs in a workflow core/console_mode.py: Use the controller JobMonitor core/interpreter/cached.py: Use the controller JobMonitor core/modules/vistrails_module.py: Use the controller JobMonitor - job_monitor: *new Returns the JobMonitor if controller is specified core/vistrail/controller.py: Use the controller JobMonitor load/save job information in the vistrail using a __jobs__ annotation core/vistrail/job.py: *moved from core/interpreter Removed single instance. We now store a JobMonitor for each controller gui/application.py: Need to create a controller before we can get job info gui/job_monitor.py: - QVistrailItem: New class for showing the New icons for vistrail and workflow. Moved state icons to 2:nd column gui/vistrail_controller.py: - getAllViews: *new Returns a list of current views gui/vistrails_window.py: Added controller_changed signal to QJobView Removed check to delete jobs when closing vistrail --- vistrails/core/configuration.py | 14 +- vistrails/core/console_mode.py | 21 +- vistrails/core/interpreter/cached.py | 5 +- vistrails/core/modules/vistrails_module.py | 17 +- vistrails/core/vistrail/controller.py | 26 +- .../core/{interpreter => vistrail}/job.py | 76 +--- vistrails/gui/application.py | 91 ++-- vistrails/gui/job_monitor.py | 423 ++++++++++-------- vistrails/gui/vistrail_controller.py | 20 +- vistrails/gui/vistrails_window.py | 55 +-- 10 files changed, 359 insertions(+), 389 deletions(-) rename vistrails/core/{interpreter => vistrail}/job.py (90%) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index c90aa88ca..f9b88814c 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -80,8 +80,8 @@ isInServerMode: Indicates whether VisTrails is being run as a server jobAutorun: Run jobs automatically when they finish jobCheckInterval: How often to check for jobs (in seconds) -jobList: List running jobs -jobRun: Continue running specified job by id +jobList: List running workflows +jobInfo: List jobs in running workflow logDir: Log files directory maxRecentVistrails: Number of recent vistrails maximizeWindows: VisTrails windows should be maximized @@ -241,11 +241,11 @@ jobList: Boolean - List running jobs. + List running workflows. -jobRun: String +jobInfo: Boolean - Continue running specified job by id (use jobList to get). + List jobs in running workflow logDir: Path @@ -728,8 +728,8 @@ def __init__(self, name, sub_fields): "Jobs": [ConfigField('jobCheckInterval', 600, int), ConfigField('jobAutorun', False, bool), - ConfigField('jobRun', None, str, ConfigType.COMMAND_LINE), - ConfigField('jobList', False, bool, ConfigType.COMMAND_LINE_FLAG)], + ConfigField('jobList', False, bool, ConfigType.COMMAND_LINE_FLAG), + ConfigField('jobInfo', False, bool, ConfigType.COMMAND_LINE_FLAG)], } # FIXME make sure that the platform-specific configs are added! diff --git a/vistrails/core/console_mode.py b/vistrails/core/console_mode.py index 8de39d0f0..9630cd03c 100644 --- a/vistrails/core/console_mode.py +++ b/vistrails/core/console_mode.py @@ -35,7 +35,8 @@ """ Module used when running vistrails uninteractively """ from __future__ import absolute_import import os.path -import uuid +import unittest + from vistrails.core.application import is_running_gui from vistrails.core.configuration import get_vistrails_configuration import vistrails.core.interpreter.default @@ -43,17 +44,15 @@ from vistrails.core.db.io import load_vistrail from vistrails.core.db.locator import XMLFileLocator, ZIPFileLocator from vistrails.core import debug -from vistrails.core.interpreter.job import JobMonitor, Workflow as JobWorkflow -from vistrails.core.utils import VistrailsInternalError, expression +from vistrails.core.vistrail.job import Workflow as JobWorkflow +from vistrails.core.utils import VistrailsInternalError from vistrails.core.vistrail.controller import VistrailController -from vistrails.core.vistrail.vistrail import Vistrail - import vistrails.core.packagemanager import vistrails.core.system -import unittest import vistrails.core.vistrail import vistrails.db + ################################################################################ def run_and_get_results(w_list, parameters='', output_dir=None, @@ -72,7 +71,7 @@ def run_and_get_results(w_list, parameters='', output_dir=None, result = [] for locator, workflow in w_list: (v, abstractions , thumbnails, mashups) = load_vistrail(locator) - controller = VistrailController(v, locator, abstractions, thumbnails, + controller = VistrailController(v, locator, abstractions, thumbnails, mashups, auto_save=update_vistrail) if isinstance(workflow, basestring): version = v.get_version_number(workflow) @@ -119,7 +118,7 @@ def run_and_get_results(w_list, parameters='', output_dir=None, if conf.has('thumbs'): conf.thumbs.autoSave = False - jobMonitor = JobMonitor.getInstance() + jobMonitor = controller.jobMonitor current_workflow = jobMonitor.currentWorkflow() if not current_workflow: for job in jobMonitor.workflows.itervalues(): @@ -127,12 +126,12 @@ def run_and_get_results(w_list, parameters='', output_dir=None, job_version = int(job.version) except ValueError: job_version = v.get_version_number(job.version) - if version == job_version and locator.to_url() == job.vistrail: + if version == job_version: current_workflow = job jobMonitor.startWorkflow(job) if not current_workflow: - current_workflow = JobWorkflow(locator.to_url(), version) - jobMonitor.getInstance().startWorkflow(current_workflow) + current_workflow = JobWorkflow(version) + jobMonitor.startWorkflow(current_workflow) try: (results, _) = \ diff --git a/vistrails/core/interpreter/cached.py b/vistrails/core/interpreter/cached.py index 2c3be2db5..5077bbc1a 100644 --- a/vistrails/core/interpreter/cached.py +++ b/vistrails/core/interpreter/cached.py @@ -39,12 +39,10 @@ import cPickle as pickle from vistrails.core.common import InstanceObject, VistrailsInternalError -from vistrails.core.configuration import get_vistrails_configuration from vistrails.core.data_structures.bijectivedict import Bidict from vistrails.core import debug import vistrails.core.interpreter.base from vistrails.core.interpreter.base import AbortExecution -from vistrails.core.interpreter.job import JobMonitor import vistrails.core.interpreter.utils from vistrails.core.log.controller import DummyLogController from vistrails.core.modules.basic_modules import identifier as basic_pkg, \ @@ -57,6 +55,7 @@ import vistrails.core.system import vistrails.core.vistrail.pipeline + ############################################################################### class ViewUpdatingLogController(object): @@ -124,7 +123,7 @@ def _handle_suspended(self, obj, error): Report module as suspended """ # update job monitor because this may be an oldStyle job - jm = JobMonitor.getInstance() + jm = obj.job_monitor() reg = get_module_registry() name = reg.get_descriptor(obj.__class__).name i = "%s" % self.remap_id(obj.id) diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py index 0650930b7..1c48a7fbc 100644 --- a/vistrails/core/modules/vistrails_module.py +++ b/vistrails/core/modules/vistrails_module.py @@ -33,7 +33,6 @@ ## ############################################################################### from base64 import b16encode, b16decode - import copy import json import time @@ -426,8 +425,7 @@ def setJobCache(self): p_module = self.useJobCache() if not p_module: return False - from vistrails.core.interpreter.job import JobMonitor - jm = JobMonitor.getInstance() + jm = self.job_monitor() specs = p_module.sourcePorts() if jm.getCache(self.signature): self.cache = jm.getCache(self.signature) @@ -450,8 +448,7 @@ def addJobCache(self): p_module = self.useJobCache() if not p_module: return False - from vistrails.core.interpreter.job import JobMonitor - jm = JobMonitor.getInstance() + jm = self.job_monitor() specs = p_module.sourcePorts() params = {} if not jm.getCache(self.signature): @@ -1563,6 +1560,16 @@ def _Generator(): generator=_generator, port=port)) + def job_monitor(self): + """ job_monitor() -> JobMonitor + Returns the JobMonitor for the associated controller if it exists + """ + controller = self.moduleInfo['controller'] + if controller is None: + raise ModuleError(self, + "Cannot run job, no controller is specified!") + return controller.jobMonitor + @classmethod def provide_input_port_documentation(cls, port_name): return None diff --git a/vistrails/core/vistrail/controller.py b/vistrails/core/vistrail/controller.py index 9c6c16aab..4ad80e07e 100644 --- a/vistrails/core/vistrail/controller.py +++ b/vistrails/core/vistrail/controller.py @@ -47,7 +47,7 @@ from vistrails.core import debug from vistrails.core.data_structures.graph import Graph from vistrails.core.interpreter.default import get_default_interpreter -from vistrails.core.interpreter.job import JobMonitor +from vistrails.core.vistrail.job import JobMonitor from vistrails.core.layout.workflow_layout import WorkflowLayout, \ Pipeline as LayoutPipeline, Defaults as LayoutDefaults from vistrails.core.log.controller import LogController, DummyLogController @@ -62,9 +62,8 @@ MissingPackage, PortsIncompatible from vistrails.core.modules.package import Package from vistrails.core.modules.sub_module import new_abstraction, read_vistrail, \ - get_all_abs_namespaces, get_cur_abs_namespace, get_cur_abs_annotation_key, \ - get_next_abs_annotation_key, save_abstraction, parse_abstraction_name -from vistrails.core.packagemanager import PackageManager, get_package_manager + get_all_abs_namespaces, get_cur_abs_namespace, get_next_abs_annotation_key, save_abstraction, parse_abstraction_name +from vistrails.core.packagemanager import get_package_manager import vistrails.core.packagerepository from vistrails.core.thumbnails import ThumbnailCache from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler, UpgradeWorkflowError @@ -78,7 +77,7 @@ from vistrails.core.vistrail.connection import Connection from vistrails.core.vistrail.group import Group from vistrails.core.vistrail.location import Location -from vistrails.core.vistrail.module import Module, ModuleFunction, ModuleParam +from vistrails.core.vistrail.module import Module from vistrails.core.vistrail.module_control_param import ModuleControlParam from vistrails.core.vistrail.module_function import ModuleFunction from vistrails.core.vistrail.module_param import ModuleParam @@ -95,6 +94,7 @@ from vistrails.db.services.vistrail import getSharedRoot from vistrails.core.utils import any + def vt_action(description_or_f=None): def get_f(f, description=None): def new_f(self, *args, **kwargs): @@ -187,7 +187,7 @@ def __init__(self, vistrail=None, locator=None, abstractions=None, # theme used to estimate module size for layout self.layoutTheme = DefaultCoreTheme() - self.set_vistrail(vistrail, locator, + self.set_vistrail(vistrail, locator, abstractions=abstractions, thumbnails=thumbnails, mashups=mashups, @@ -229,6 +229,7 @@ def set_vistrail(self, vistrail, locator, abstractions=None, self.id_scope = id_scope self.current_session = -1 self.log = Log() + self.jobMonitor = JobMonitor() if self.vistrail is not None: self.id_scope = self.vistrail.idScope self.current_session = self.vistrail.idScope.getNewId("session") @@ -241,6 +242,9 @@ def set_vistrail(self, vistrail, locator, abstractions=None, ThumbnailCache.getInstance().add_entries_from_files(thumbnails) if mashups is not None: self._mashups = mashups + job_annotation = vistrail.get_annotation('__jobs__') + self.jobMonitor = JobMonitor(job_annotation and job_annotation.value) + self.current_version = -1 self.current_pipeline = Pipeline() if self.locator != locator and self.locator is not None: @@ -254,7 +258,7 @@ def set_vistrail(self, vistrail, locator, abstractions=None, self.set_changed(True) if self.vistrail is not None: self.recompute_terse_graph() - + def close_vistrail(self, locator): if not self.vistrail.is_abstraction: self.unload_abstractions() @@ -3650,6 +3654,12 @@ def write_vistrail(self, locator, version=None, export=False): export=True means you should not update the current controller""" result = False if self.vistrail and (self.changed or self.locator != locator): + # Save jobs as annotation + if self.jobMonitor.workflows: + self.vistrail.set_annotation('__jobs__', + self.jobMonitor.__serialize__()) + else: + self.vistrail.set_annotation('__jobs__', '') # FIXME create this on-demand? abs_save_dir = tempfile.mkdtemp(prefix='vt_abs') is_abstraction = self.vistrail.is_abstraction @@ -3718,8 +3728,6 @@ def write_vistrail(self, locator, version=None, export=False): # Load all abstractions from new namespaces self.ensure_abstractions_loaded(new_vistrail, save_bundle.abstractions) - JobMonitor.getInstance().updateUrl(locator.to_url(), - old_locator.to_url()) self.set_file_name(locator.name) if old_locator and not export: old_locator.clean_temporaries() diff --git a/vistrails/core/interpreter/job.py b/vistrails/core/vistrail/job.py similarity index 90% rename from vistrails/core/interpreter/job.py rename to vistrails/core/vistrail/job.py index 3ef6f3037..d72b742dc 100644 --- a/vistrails/core/interpreter/job.py +++ b/vistrails/core/vistrail/job.py @@ -51,8 +51,6 @@ import unittest import weakref -JOBS_FILENAME = "jobs.json" - class BaseMonitor(object): def finished(self): """Indicates whether the job has completed (module can resume). @@ -77,7 +75,7 @@ def compute(self): # Start new job params = self.readInputs() params = self.startJob(params) - jm = JobMonitor.getInstance() + jm = self.job_monitor() jm.addJob(self.signature, params, self.getName()) # Might raise ModuleSuspended jm.checkJob(self, self.signature, self.getMonitor(params)) @@ -90,7 +88,7 @@ def compute(self): def update_upstream(self): if not hasattr(self, 'signature'): raise ModuleError(self, "Module has no signature") - jm = JobMonitor.getInstance() + jm = self.job_monitor() self.cache = jm.getCache(self.signature) if self.cache is not None: return # compute() will use self.cache @@ -164,12 +162,11 @@ class Workflow(object): It can have one or several suspended modules. It can be serialized to disk. """ - def __init__(self, vistrail, version, name='untitled', id=None, user=None, + def __init__(self, version, name='untitled', id=None, user=None, start=None, jobs=None): - """ __init__(vistrail: str, version: str/int, name: str, id: str, + """ __init__(version: str/int, name: str, id: str, user: str, start: str, jobs: list) -> None - vistrail - the vistrail url version - workflow version name - a human readable name for the job id - persistent identifier @@ -177,7 +174,6 @@ def __init__(self, vistrail, version, name='untitled', id=None, user=None, start - start time jobs - a dict with jobs """ - self.vistrail = vistrail self.version = version self.name = name self.id = id if id else str(uuid1()) @@ -189,7 +185,6 @@ def __init__(self, vistrail, version, name='untitled', id=None, user=None, def to_dict(self): wf = dict() - wf['vistrail'] = self.vistrail wf['version'] = self.version wf['id'] = self.id wf['name'] = self.name @@ -200,11 +195,10 @@ def to_dict(self): @staticmethod def from_dict(wf): - return Workflow(wf['vistrail'], wf['version'], wf['name'], wf['id'], + return Workflow(wf['version'], wf['name'], wf['id'], wf['user'], wf['start'], wf['jobs']) def __eq__(self, other): - if self.vistrail != other.vistrail: return False if self.version != other.version: return False if self.name != other.name: return False if self.id != other.id: return False @@ -281,25 +275,19 @@ def __eq__(self, other): return True class JobMonitor(object): - """ A singleton class keeping a list of running jobs and the current job. + """ Keeps a list of running jobs and the current job for a vistrail. - Jobs can be loaded from a JSON file and are added from the interpreter. + Jobs are added by the interpreter are saved with the vistrail. A callback mechanism is used to interact with the associated GUI component. """ - #Singleton technique - _instance = None - @staticmethod - def getInstance(*args, **kwargs): - if JobMonitor._instance is None: - JobMonitor._instance = JobMonitor(*args, **kwargs) - return JobMonitor._instance - def __init__(self, filename=None): + def __init__(self, json_string=None): self._current_workflow = None self.workflows = {} self.jobs = {} self.callback = None - self.load_from_file(filename) + if json_string is not None: + self.__unserialize__(json_string) def setCallback(self, callback=None): """ setCallback(callback: class) -> None @@ -309,7 +297,7 @@ def setCallback(self, callback=None): self.callback = weakref.proxy(callback) ############################################################################## -# Running Workflow +# Running Workflows def __serialize__(self): """ __serialize__() -> None @@ -353,32 +341,6 @@ def __unserialize__(self, s): self.workflows[id] = wf return self.workflows - def save_to_file(self, filename=None): - """ save_to_file(filename: str) -> None - Saves running jobs to a file - - """ - if not filename: - filename = os.path.join(current_dot_vistrails(), JOBS_FILENAME) - f = open(filename, 'w') - f.write(self.__serialize__()) - f.close() - - def load_from_file(self, filename=None): - """ load_from_file(filename: str) -> None - Loads running jobs from a file - - """ - if not filename: - filename = os.path.join(current_dot_vistrails(), JOBS_FILENAME) - if not os.path.exists(filename): - self.__unserialize__('{}') - return {} - f = open(filename) - result = self.__unserialize__(f.read()) - f.close() - return result - def addWorkflow(self, workflow): """ addWorkflow(workflow: Workflow) -> None @@ -418,7 +380,7 @@ def deleteJob(self, id): deletes a job from all workflows """ del self.jobs[id] - for wf in self.workflows: + for wf in self.workflows.itervalues(): if id in wf.jobs: del wf.jobs[id] if self.callback: @@ -445,7 +407,6 @@ def startWorkflow(self, workflow): if self.callback: self.callback.startWorkflow(workflow) - def addJobRec(self, obj, parent_id=None): workflow = self.currentWorkflow() id = obj.signature @@ -494,12 +455,11 @@ def finishWorkflow(self): if self.callback: self.callback.finishWorkflow(workflow) self._current_workflow = None - self.save_to_file() def addJob(self, id, params=None, name='', finished=False): """ addJob(id: str, params: dict, name: str, finished: bool) -> uuid - Adds a lob to the currently running workflow + Adds a job to the currently running workflow """ @@ -632,15 +592,15 @@ def isDone(self, monitor): class TestJob(unittest.TestCase): def test_job(self): - jm = JobMonitor.getInstance() + jm = JobMonitor() job1 = Job('`13/5', {'a':3, 'b':'7'}) job2 = Job('3', {'a':6}, 'my_name', 'a_string_date', True) # test module to/from dict job3 = Job.from_dict(job2.to_dict()) self.assertEqual(job2, job3) - workflow1 = Workflow('a.vt', 26) - workflow2 = Workflow('b.vt', 'tagname', 'myjob', 'myid', 'tommy', + workflow1 = Workflow(26) + workflow2 = Workflow('tagname', 'myjob', 'myid', 'tommy', '2013-10-07 13:06', {job1.id: job1, job2.id: job2}) # test workflow to/from dict @@ -662,10 +622,8 @@ def test_job(self): # test serialization jm.addWorkflow(workflow1) jm.addWorkflow(workflow2) - jm.save_to_file() - jm.load_from_file() + jm.__unserialize__(jm.__serialize__()) self.assertIn(workflow1.id, jm.workflows) self.assertIn(workflow2.id, jm.workflows) self.assertEqual(workflow1, jm.workflows[workflow1.id]) self.assertEqual(workflow2, jm.workflows[workflow2.id]) - jm.workflows = dict() diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index be847e476..d40d5d50a 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -36,25 +36,27 @@ initializations to the theme, packages and the builder... """ +from ast import literal_eval +import os.path +import getpass +import re +import sys +import StringIO + from PyQt4 import QtGui, QtCore, QtNetwork + from vistrails.core.application import VistrailsApplicationInterface, \ get_vistrails_application, set_vistrails_application from vistrails.core import debug from vistrails.core import system from vistrails.core.application import APP_SUCCESS, APP_FAIL, APP_DONE -from vistrails.core.db.locator import FileLocator, DBLocator, BaseLocator -from vistrails.core.interpreter.job import JobMonitor +from vistrails.core.db.locator import FileLocator, DBLocator import vistrails.core.requirements from vistrails.db import VistrailsDBException from vistrails.db.services.io import test_db_connection from vistrails.gui import qt import vistrails.gui.theme -from ast import literal_eval -import os.path -import getpass -import re -import sys -import StringIO + ################################################################################ @@ -231,13 +233,6 @@ def init(self, optionsDict=None, args=[]): if not linux_default_application_set(): self.ask_update_default_application() - if self.temp_configuration.check('jobList'): - job = JobMonitor.getInstance() - for i, j in job.workflows.iteritems(): - print "JOB: ", i, j.vistrail, j.version, j.start, \ - "FINISHED" if j.completed() else "RUNNING" - elif self.temp_configuration.check('jobRun'): - return self.runJob(self.temp_configuration.jobRun) elif interactive: self.interactiveMode() else: @@ -451,7 +446,6 @@ def interactiveMode(self): # self.builderWindow.modulePalette.connect_registry_signals() self.builderWindow.link_registry() - self.builderWindow.check_running_jobs() self.process_interactive_input() if self.temp_configuration.showWindow: self.showBuilderWindow() @@ -517,6 +511,11 @@ def noninteractiveMode(self): ok = locator.update_from_console() if not ok: debug.critical("Cannot login to database") + if self.temp_configuration.check('jobList'): + return self.printJobs(locator) + if self.temp_configuration.check('jobInfo'): + return self.printJob(locator, version) + w_list.append((locator, version)) vt_list.append(locator) import vistrails.core.console_mode @@ -571,6 +570,35 @@ def noninteractiveMode(self): debug.warning("no input vistrails provided") return True + def printJobs(self, locator): + (v, abstractions, thumbnails, mashups) = load_vistrail(locator) + controller = VistrailController(v, locator, abstractions, thumbnails, + mashups, auto_save=False) + text = "### Workflows with jobs ###\n" + text += "workflow | start date | status\n" + text += '\n'.join( + ["%s %s %s" %(j.version, + j.start, + "FINISHED" if j.completed() else "RUNNING") + for i, j in controller.jobMonitor.workflows.iteritems()]) + print text + return text + + def printJob(self, locator, version): + (v, abstractions, thumbnails, mashups) = load_vistrail(locator) + controller = VistrailController(v, locator, abstractions, thumbnails, + mashups, auto_save=False) + text = "### Jobs in workflow ###\n" + text += "name | start date | status\n" + workflow = controller.jobMonitor.workflows[int(version)] + text += '\n'.join( + ["%s %s %s" %(i.name, + i.start, + "FINISHED" if i.finished else "RUNNING") + for i in workflow.jobs.values()]) + print text + return text + def setIcon(self): """ setIcon() -> None Setup Vistrail Icon @@ -736,22 +764,6 @@ def parse_input_args_from_other_instance(self, msg): except SystemExit: debug.critical("Invalid options: %s" % ' '.join(args)) return False - if self.temp_configuration.check('jobList'): - job = JobMonitor.getInstance() - return '\n'.join( - ["JOB: %s %s %s %s %s" %(i, - j.vistrail, - j.version, - j.start, - "FINISHED" if j.completed() else "RUNNING") - for i, j in job.workflows.iteritems()]) - if self.temp_configuration.check('jobRun'): - # skip waiting for completion - autoRun = self.configuration.check('autoRun') - self.configuration.autoRun = True - result = self.runJob(self.temp_configuration.jobRun) - self.configuration.autoRun = autoRun - return result == APP_SUCCESS interactive = not self.temp_configuration.check('batch') if interactive: result = self.process_interactive_input() @@ -769,20 +781,6 @@ def parse_input_args_from_other_instance(self, msg): debug.critical("Invalid input: %s" % msg) return False - def runJob(self, job_id): - jobMonitor = JobMonitor.getInstance() - workflow = jobMonitor.getWorkflow(job_id) - if not workflow: - print "No job with that id exists" - return APP_FAIL - locator = BaseLocator.from_url(workflow.vistrail) - jobMonitor.startWorkflow(workflow) - import vistrails.core.console_mode - error = vistrails.core.console_mode.run([(locator, workflow.version)], - update_vistrail=True) - return APP_SUCCESS - - def linux_default_application_set(): """linux_default_application_set() -> True|False|None For Linux - checks if a handler is set for .vt and .vtl files. @@ -898,7 +896,6 @@ def start_application(optionsDict=None, args=[]): def stop_application(): """Stop and finalize the application singleton.""" - JobMonitor.getInstance().save_to_file() VistrailsApplication = get_vistrails_application() VistrailsApplication.finishSession() VistrailsApplication.save_configuration() diff --git a/vistrails/gui/job_monitor.py b/vistrails/gui/job_monitor.py index 9298987ec..ecebdf621 100644 --- a/vistrails/gui/job_monitor.py +++ b/vistrails/gui/job_monitor.py @@ -33,18 +33,16 @@ ## ############################################################################### +import time + from PyQt4 import QtCore, QtGui from vistrails.core import debug, configuration -from vistrails.core.db.locator import BaseLocator from vistrails.core.modules.vistrails_module import ModuleSuspended -from vistrails.core.interpreter.job import JobMonitor from vistrails.gui import theme from vistrails.gui.common_widgets import QDockPushButton from vistrails.gui.vistrails_palette import QVistrailsPaletteInterface -import time - refresh_states = [('Off', 0), ('10 sec', 10), ('1 min', 60), ('10 min', 600), @@ -67,6 +65,13 @@ def validate(self, input, pos): class QJobTree(QtGui.QTreeWidget): def __init__(self, parent=None): QtGui.QTreeWidget.__init__(self, parent) + self.setContentsMargins(0, 0, 0, 0) + self.setColumnCount(2) + self.header().setResizeMode(0, QtGui.QHeaderView.ResizeToContents) + self.header().setResizeMode(1, QtGui.QHeaderView.Stretch) + self.header().close() + self.setExpandsOnDoubleClick(False) + self.controller = None def contextMenuEvent(self, event): item = self.itemAt(event.pos()) @@ -85,16 +90,13 @@ def contextMenuEvent(self, event): menu.addAction(act) menu.exec_(event.globalPos()) - class QJobView(QtGui.QWidget, QVistrailsPaletteInterface): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) - self.jobMonitor = JobMonitor.getInstance() - self.jobMonitor.setCallback(self) self.timer_id = None - - self.workflowItems = {} + self.updating_now = False + self.widgets = {} self.layout = QtGui.QVBoxLayout() @@ -129,21 +131,34 @@ def __init__(self, parent=None): self.layout.addLayout(buttonsLayout) self.jobView = QJobTree() - self.jobView.setContentsMargins(0, 0, 0, 0) - self.jobView.setColumnCount(2) - self.jobView.setHeaderLabels(['Job', 'Message']) - self.jobView.header().setResizeMode(0, QtGui.QHeaderView.ResizeToContents) - self.jobView.header().setResizeMode(1, QtGui.QHeaderView.Stretch) - self.jobView.setExpandsOnDoubleClick(False) - self.connect(self.jobView, - QtCore.SIGNAL('itemDoubleClicked(QTreeWidgetItem *, int)'), - self.item_clicked) + self.jobView.itemDoubleClicked.connect(self.item_clicked) self.layout.addWidget(self.jobView) self.setLayout(self.layout) + self.setWindowTitle('Running Jobs') self.resize(QtCore.QSize(800, 600)) - self.updating_now = False + + def set_controller(self, controller): + # check if a controller has been closed + from vistrails.gui.vistrails_window import _app + controllers = [view.controller for view in _app.getAllViews()] + for c in self.widgets.keys(): + if c not in controllers: + self.jobView.takeTopLevelItem(self.widgets[c]) + del self.widgets[c] + + if not controller: + return + + # check if controller has been added + if controller not in self.widgets: + item = QVistrailItem(controller) + self.jobView.addTopLevelItem(item) + self.jobView.expandAll() + self.widgets[controller] = self.jobView.indexOfTopLevelItem(item) + if item.childCount() > 0: + self.set_visible(True) def autorunToggled(self, value): conf = configuration.get_vistrails_configuration() @@ -174,38 +189,185 @@ def set_refresh(self, refresh=0): conf.jobCheckInterval = refresh self.updating_now = False + def update_jobs(self): + """Called via a timer. + + Checks jobs for all workflows both with and without monitors. + """ + for i in xrange(self.jobView.topLevelItemCount()): + vistrail = self.jobView.topLevelItem(i) + jm = vistrail.jobMonitor + for workflow in vistrail.workflowItems.values(): + # jobs without a monitor can also be checked + if not workflow.has_queue: + # restart job and execute + jm.startWorkflow(workflow.workflow) + self.updating_now = False + workflow.execute() + self.updating_now = True + continue + if workflow.workflowFinished: + continue + for job in workflow.jobs.itervalues(): + if job.jobFinished: + continue + try: + # call monitor + job.jobFinished = jm.isDone(job.monitor) + if job.jobFinished: + job.setText(1, "Finished") + except Exception, e: + debug.critical("Error checking job %s: %s" % workflow.name, + e) + workflow.updateJobs() + if workflow.workflowFinished: + if self.autorun.isChecked(): + jm.startWorkflow(workflow.workflow) + 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: + jm.startWorkflow(workflow.workflow) + self.updating_now = False + workflow.execute() + self.updating_now = True + + def timerEvent(self, id=None): + if self.updating_now: + return + self.updating_now = True + self.update_jobs() + self.updating_now = False + + def keyPressEvent(self, event): + if event.key() in [QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace]: + items = self.jobView.selectedItems() + if len(items) == 1: + item = items[0] + if isinstance(item, QWorkflowItem): + item.parent().jobMonitor.deleteWorkflow(item.workflow.id) + elif isinstance(item, QJobItem): + # find parent + parent = item.parent() + while not isinstance(parent, QWorkflowItem): + parent = parent.parent() + parent.parent().jobMonitor.deleteJob(item.job.id) + else: + QtGui.QWidget.keyPressEvent(self, event) + + def item_clicked(self, item): + """Item activated. + """ + if isinstance(item, QWorkflowItem): + item.goto() + + +class QVistrailItem(QtGui.QTreeWidgetItem): + """A vistrail with running workflows. + + This top-level item can have QWorkflowItem's as children. + """ + 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() + + def load_running_jobs(self): + """Loads the current jobs from the JSON file. + """ + workflows = self.jobMonitor.workflows + # update gui + for workflow in workflows.itervalues(): + if workflow.id not in self.workflowItems: + workflow_item = QWorkflowItem(workflow, self) + self.workflowItems[workflow.id] = workflow_item + for job in workflow.jobs.itervalues(): + if job.id not in workflow_item.jobs: + workflow_item.jobs[job.id] = QJobItem(job, workflow_item) + workflow_item.updateJobs() + def startWorkflow(self, workflow): """Empty callback. """ + def addJob(self, job): + """ addJob(self, job: job.Module) -> None + Callback, adds or updates a job in the interface. + """ + + workflow = self.jobMonitor.currentWorkflow() + if workflow.id not in self.workflowItems: + workflow_item = QWorkflowItem(workflow, self) + workflow_item.setExpanded(True) + self.workflowItems[workflow.id] = workflow_item + + workflow_item = self.workflowItems[workflow.id] + if job.id not in workflow_item.jobs: + workflow_item.jobs[job.id] = QJobItem(job, workflow_item) + workflow_item.updateJobs() + + def deleteWorkflow(self, id): + """ deleteWorkflow(id: str) -> None + Callback, deletes a workflow. + """ + self.takeChild(self.indexOfChild(self.workflowItems[id])) + del self.workflowItems[id] + + def deleteJob(self, id): + """ deleteJob(id: str, parent_id: str) -> None + Callback, deletes a a single job from all workflows. + + """ + + for workflow_item in self.workflowItems.itervalues(): + if id in workflow_item.jobs: + job_item = workflow_item.jobs[id] + job_item.parent().takeChild(job_item.parent().indexOfChild(job_item)) + del workflow_item.jobs[id] + workflow_item.updateJobs() + def addJobRec(self, obj, parent_id=None): """Recursively adds jobs that are executed by other modules like Groups and Maps. This is only for display purposes. """ workflow = self.jobMonitor.currentWorkflow() - workflowItem = self.workflowItems[workflow.id] + workflow_item = self.workflowItems[workflow.id] # top down. Base is assumed to have been added already - base = (workflowItem.intermediates[parent_id] if parent_id is not None - else workflowItem) + base = (workflow_item.intermediates[parent_id] if parent_id is not None + else workflow_item) id = obj.signature if id not in workflow.jobs and parent_id: id = '%s/%s' % (parent_id, obj.signature) if obj.children: # add parent items and their children - if id not in workflowItem.intermediates: - workflowItem.intermediates[id] = QParentItem(id, - obj.name, base) + if id not in workflow_item.intermediates: + parent_item = QParentItem(id, obj.name, base) + parent_item.setExpanded(True) + workflow_item.intermediates[id] = parent_item + for child in obj.children: self.addJobRec(child, id) elif obj.signature in workflow.jobs: # this is an already existing new-style job - job = workflowItem.jobs[obj.signature] + job = workflow_item.jobs[obj.signature] job.monitor = obj.monitor # need to force takeChild base.addChild(job.parent().takeChild(job.parent().indexOfChild(job))) elif id in workflow.jobs: # this is an already existing old-style job - job = workflowItem.jobs[id] + job = workflow_item.jobs[id] job.monitor = obj.monitor # need to force takeChild base.addChild(job.parent().takeChild(job.parent().indexOfChild(job))) @@ -221,94 +383,7 @@ def finishWorkflow(self, workflow): workflowItem = self.workflowItems.get(workflow.id, None) if workflowItem: workflowItem.updateJobs() - self.set_visible(True) - - def update_jobs(self): - """Called via a timer. - - Checks all jobs for workflows both with and without monitors. - """ - for workflow in self.workflowItems.values(): - # jobs without a monitor can also be checked - if not workflow.has_queue: - # restart job and execute - self.jobMonitor.startWorkflow(workflow.workflow) - self.updating_now = False - workflow.execute() - self.updating_now = True - continue - if workflow.workflowFinished: - continue - for job in workflow.jobs.itervalues(): - if job.jobFinished: - continue - try: - # call monitor - job.jobFinished = self.jobMonitor.isDone(job.monitor) - if job.jobFinished: - job.setText(1, "Finished") - except Exception, e: - debug.critical("Error checking job %s: %s" % workflow.name, - e) - workflow.updateJobs() - if workflow.workflowFinished: - if self.autorun.isChecked(): - self.jobMonitor.startWorkflow(workflow.workflow) - 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.jobMonitor.startWorkflow(workflow.workflow) - self.updating_now = False - workflow.execute() - self.updating_now = True - - def timerEvent(self, id=None): - if self.updating_now: - return - self.updating_now = True - self.update_jobs() - self.updating_now = False - - def keyPressEvent(self, event): - if event.key() in [QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace]: - items = self.jobView.selectedItems() - if len(items) == 1: - item = items[0] - if isinstance(item, QWorkflowItem): - self.jobMonitor.deleteWorkflow(item.workflow.id) - elif isinstance(item, QJobItem): - # find parent - parent = item.parent() - while not isinstance(parent, QWorkflowItem): - parent = parent.parent() - self.jobMonitor.deleteJob(item.job.id, parent.workflow.id) - index = self.jobView.indexOfTopLevelItem(items[0]) - if index>=0: - self.delete_job(items[0].controller, items[0].version) - else: - QtGui.QWidget.keyPressEvent(self, event) - - def addJob(self, job): - """ addJob(self, job: job.Module) -> None - Callback, adds or updates a job in the interface. - """ - - workflow = self.jobMonitor.currentWorkflow() - if workflow.id not in self.workflowItems: - workflowItem = QWorkflowItem(workflow, self.jobView) - self.jobView.addTopLevelItem(workflowItem) - self.workflowItems[workflow.id] = workflowItem - - workflowItem = self.workflowItems[workflow.id] - if job.id not in workflowItem.jobs: - workflowItem.jobs[job.id] = QJobItem(job, workflowItem) - workflowItem.updateJobs() + QJobView.instance().set_visible(True) def checkJob(self, module, id, monitor): """ checkJob(module: VistrailsModule, id: str, monitor: instance) @@ -319,17 +394,17 @@ def checkJob(self, module, id, monitor): if not monitor or not self.jobMonitor.isDone(monitor): raise ModuleSuspended(module, 'Job is running', monitor=monitor, job_id=id) - workflowItem = self.workflowItems[workflow.id] - item = workflowItem.jobs.get(id, None) + workflow_item = self.workflowItems[workflow.id] + item = workflow_item.jobs.get(id, None) item.setText(0, item.job.name) # we should check the status using monitor and show dialog # get current view progress bar and hijack it if monitor: item.monitor = monitor workflow = self.jobMonitor.currentWorkflow() - workflowItem = self.workflowItems.get(workflow.id, None) - workflowItem.updateJobs() - progress = workflowItem.view.controller.progress + workflow_item = self.workflowItems.get(workflow.id, None) + workflow_item.updateJobs() + progress = workflow_item.view.controller.progress conf = configuration.get_vistrails_configuration() interval = conf.jobCheckInterval @@ -352,13 +427,13 @@ def checkJob(self, module, id, monitor): if progress.wasCanceled(): # this does not work, need to create a new progress dialog #progress.goOn() - new_progress = progress.__class__(progress.parent()) + new_progress = progress.__class__(progress.parent()) new_progress.setMaximum(progress.maximum()) new_progress.setValue(progress.value()) new_progress.setLabelText(labelText) new_progress.setMinimumDuration(0) new_progress.suspended = True - workflowItem.view.controller.progress = new_progress + workflow_item.view.controller.progress = new_progress progress.hide() progress.deleteLater() progress = new_progress @@ -373,80 +448,32 @@ def checkJob(self, module, id, monitor): raise ModuleSuspended(module, 'Job is running', monitor=monitor, job_id=id) - def deleteWorkflow(self, id): - """ deleteWorkflow(id: str) -> None - Callback, deletes a workflow. - """ - self.jobView.takeTopLevelItem( - self.jobView.indexOfTopLevelItem( - self.workflowItems[id])) - del self.workflowItems[id] - - def deleteJob(self, id, parent_id=None): - """ deleteJob(id: str, parent_id: str) -> None - Callback, deletes a a single job. - - If parent_id is None, the current workflow is used - """ - workflowItem = self.workflowItems[parent_id] - jobItem = workflowItem.jobs[id] - jobItem.parent().takeChild(jobItem.parent().indexOfChild(jobItem)) - workflowItem.updateJobs() - del workflowItem.jobs[id] - - def item_clicked(self, item): - """Item activated. - """ - if isinstance(item, QWorkflowItem): - item.goto() - - def load_running_jobs(self): - """Loads the current jobs from the JSON file. - """ - workflows = self.jobMonitor.workflows - # update gui - for workflow in workflows.itervalues(): - if workflow.id not in self.workflowItems: - workflowItem = QWorkflowItem(workflow, self.jobView) - self.jobView.addTopLevelItem(workflowItem) - self.workflowItems[workflow.id] = workflowItem - for job in workflow.jobs.itervalues(): - if job.id not in workflowItem.jobs: - workflowItem.jobs[job.id] = QJobItem(job, workflowItem) - workflowItem.updateJobs() - if workflows: - self.set_visible(True) - class QWorkflowItem(QtGui.QTreeWidgetItem): - """A suspended workflow. + """A workflow with jobs. - This top-level item can have children items. + This item can have child items. """ 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.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 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) + """ 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() @@ -457,24 +484,26 @@ def updateJobs(self): self.setText(1, "(%s/%s)" % (finished, count)) self.workflowFinished = (finished == count) if self.workflowFinished: - self.setIcon(0, theme.get_current_theme().JOB_FINISHED) + self.setIcon(1, theme.get_current_theme().JOB_FINISHED) elif not self.has_queue: - self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED) + self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) else: - self.setIcon(0, theme.get_current_theme().JOB_CHECKING) + self.setIcon(1, theme.get_current_theme().JOB_CHECKING) def goto(self): + """ Shows this pipeline + + """ from vistrails.gui.vistrails_window import _app - if not self.view: - _app.open_vistrail_without_prompt(self.locator) - self.view = _app.getViewFromLocator(self.locator) - _app.change_view(self.view) - self.view.version_selected(self.workflow.version, True, - double_click=True) + view = _app.getViewFromLocator(self.parent().controller.locator) + _app.change_view(view) + view.version_selected(self.workflow.version, True, double_click=True) + return view def execute(self): - self.goto() - self.view.execute() + """ Shows and executes this pipeline + """ + self.goto().execute() class QJobItem(QtGui.QTreeWidgetItem): @@ -491,7 +520,6 @@ def __init__(self, job, parent=None): self.jobFinished = self.job.finished self.monitor = None self.updateJob() - self.setExpanded(True) def updateJob(self): if self.job.finished: @@ -499,13 +527,13 @@ def updateJob(self): self.setText(1, self.job.parameters.get('__message__', "Finished" if self.jobFinished else "Running")) if self.jobFinished: - self.setIcon(0, theme.get_current_theme().JOB_FINISHED) + self.setIcon(1, theme.get_current_theme().JOB_FINISHED) self.setToolTip(0, "This Job Has Finished") elif self.monitor: - self.setIcon(0, theme.get_current_theme().JOB_SCHEDULED) + self.setIcon(1, theme.get_current_theme().JOB_SCHEDULED) self.setToolTip(0, "This Job is Running and Scheduled for Checking") else: - self.setIcon(0, theme.get_current_theme().JOB_CHECKING) + self.setIcon(1, theme.get_current_theme().JOB_CHECKING) self.setToolTip(0, "This Job is Running") self.setToolTip(1, self.job.id) @@ -528,7 +556,6 @@ class QParentItem(QtGui.QTreeWidgetItem): def __init__(self, id, name, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent, [name, '']) self.id = id - self.setExpanded(True) self.setToolTip(0, self.id) diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index 6f8e8891a..2c03c1819 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -46,7 +46,7 @@ from vistrails.core import debug import vistrails.core.db.action from vistrails.core.interpreter.default import get_default_interpreter -from vistrails.core.interpreter.job import Workflow as JobWorkflow +from vistrails.core.vistrail.job import Workflow as JobWorkflow from vistrails.core.layout.version_tree_layout import VistrailsTreeLayoutLW from vistrails.core.log.opm_graph import OpmGraph from vistrails.core.log.prov_document import ProvDocument @@ -67,6 +67,7 @@ from vistrails.gui.version_prop import QVersionProp + ################################################################################ class ExecutionProgressDialog(QtGui.QProgressDialog): @@ -412,22 +413,21 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): return jobView.updating_now = True - if not jobView.jobMonitor.currentWorkflow(): + if not self.jobMonitor.currentWorkflow(): version_id = self.current_version - url = self.locator.to_url() - # check if jobs for this workflow exists + # check if a job exist for this workflow current_workflow = None - for wf in jobView.jobMonitor.workflows.itervalues(): + for wf in self.jobMonitor.workflows.itervalues(): try: wf_version = int(wf.version) except ValueError: wf_version = self.vistrail.get_version_number(wf.version) - if version_id == wf_version and url == wf.vistrail: + if version_id == wf_version: current_workflow = wf - jobView.jobMonitor.startWorkflow(wf) + self.jobMonitor.startWorkflow(wf) if not current_workflow: - current_workflow = JobWorkflow(url, version_id) - jobView.jobMonitor.startWorkflow(current_workflow) + current_workflow = JobWorkflow(version_id) + self.jobMonitor.startWorkflow(current_workflow) try: self.progress = ExecutionProgressDialog(self.vistrail_view) self.progress.show() @@ -439,7 +439,7 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): self.progress.hide() self.progress.deleteLater() self.progress = None - jobView.jobMonitor.finishWorkflow() + self.jobMonitor.finishWorkflow() jobView.updating_now = False return result diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 86d178b6a..4c4336c1d 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1090,7 +1090,8 @@ def init_palettes(self): [((QDebugger, True), (('controller_changed', 'set_controller'),)), (DebugView, True), - (QJobView, True), + ((QJobView, True), + (('controller_changed', 'set_controller'),)), (QExplorerWindow, True), # ((QLatexAssistant, True), # (('controller_changed', 'set_controller'),)), @@ -1561,10 +1562,10 @@ def ensureController(self, controller): return None def getViewFromLocator(self, locator): - """ getViewFromLocator(locator: VistrailLocator) -> QVistrailView + """ getViewFromLocator(locator: VistrailLocator) -> QVistrailView This will find the view associated with the locator. If not, it will return None. - + """ if locator is None: return None @@ -1577,6 +1578,17 @@ def getViewFromLocator(self, locator): return view return None + def getAllViews(self): + """ getAllViews() ->[QVistrailView] + Returns all open views. + + """ + views = [] + for i in xrange(self.stack.count()): + views.append(self.stack.widget(i)) + views.extend(self.windows) + return views + def ensureVistrail(self, locator): """ ensureVistrail(locator: VistrailLocator) -> QVistrailView This will first find among the opened vistrails to see if @@ -1866,39 +1878,6 @@ def close_vistrail(self, current_view=None, quiet=False): 'Cancel', 0, 2) - # Check if any unsaved workflow contains jobs - vistrail = current_view.controller.vistrail - from vistrails.core.interpreter.job import JobMonitor - if res == DISCARD_BUTTON: - res2 = SAVE_BUTTON - for workflow in JobMonitor.getInstance().workflows.values(): - if workflow.vistrail != locator.to_url(): - continue - action = vistrail.db_get_action_by_id(workflow.version) - if not action.is_dirty: - continue - if res2 == DISCARD_BUTTON: - JobMonitor.getInstance().deleteWorkflow(workflow.id) - continue - text = ('Vistrail ' + - QtCore.Qt.escape(name) + - ' contains unsaved jobs.\n Do you want to ' - 'save changes or discard the job(s)?') - res2 = QtGui.QMessageBox.information(window, - 'Vistrails', - text, - '&Save', - '&Discard', - 'Cancel', - 0, - 2) - if res2 == SAVE_BUTTON: - res = SAVE_BUTTON - break - elif res2 == DISCARD_BUTTON: - JobMonitor.getInstance().deleteWorkflow(workflow.id) - elif res2 == CANCEL_BUTTON: - return False else: res = DISCARD_BUTTON @@ -2263,10 +2242,6 @@ def setup_recent_vistrails(self): conf.subscribe('maxRecentVistrails', self.max_recent_vistrails_changed) self.update_recent_vistrail_actions() - def check_running_jobs(self): - from vistrails.gui.job_monitor import QJobView - QJobView.instance().load_running_jobs() - def open_recent_vistrail(self): """ open_recent_vistrail() -> None Opens a vistrail from Open Recent menu list From 6054a287ab6c077412440639b923b7663b385a10 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 10 Oct 2014 15:09:23 -0400 Subject: [PATCH 155/194] Duplicates processEvents() calls --- vistrails/gui/preferences.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py index f828a8392..fd4cc49b2 100644 --- a/vistrails/gui/preferences.py +++ b/vistrails/gui/preferences.py @@ -710,26 +710,32 @@ def test_remove_package(self): prefs = builder.preferencesDialog packages = prefs._packages_tab prefs._tab_widget.setCurrentWidget(packages) + QtGui.QApplication.processEvents() # check if package is loaded av = packages._available_packages_list for item in av.findItems(pkg, QtCore.Qt.MatchExactly): av.setCurrentItem(item) QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() packages.enable_current_package() QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() inst = packages._enabled_packages_list for item in inst.findItems(pkg, QtCore.Qt.MatchExactly): inst.setCurrentItem(item) QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() packages.disable_current_package() QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() # force delayed calls packages.populate_lists() packages.select_package_after_update_slot(pkg) QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() # This does not work because the selection is delayed av = packages._available_packages_list From 4d629c3579818da9a4abaaa9bfa003be9766950c Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 10 Oct 2014 15:10:01 -0400 Subject: [PATCH 156/194] Removes useless loops --- vistrails/gui/preferences.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/vistrails/gui/preferences.py b/vistrails/gui/preferences.py index fd4cc49b2..d84fa5d81 100644 --- a/vistrails/gui/preferences.py +++ b/vistrails/gui/preferences.py @@ -714,22 +714,22 @@ def test_remove_package(self): # check if package is loaded av = packages._available_packages_list - for item in av.findItems(pkg, QtCore.Qt.MatchExactly): - av.setCurrentItem(item) - QtGui.QApplication.processEvents() - QtGui.QApplication.processEvents() - packages.enable_current_package() - QtGui.QApplication.processEvents() - QtGui.QApplication.processEvents() + item, = av.findItems(pkg, QtCore.Qt.MatchExactly) + av.setCurrentItem(item) + QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() + packages.enable_current_package() + QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() inst = packages._enabled_packages_list - for item in inst.findItems(pkg, QtCore.Qt.MatchExactly): - inst.setCurrentItem(item) - QtGui.QApplication.processEvents() - QtGui.QApplication.processEvents() - packages.disable_current_package() - QtGui.QApplication.processEvents() - QtGui.QApplication.processEvents() + item, = inst.findItems(pkg, QtCore.Qt.MatchExactly) + inst.setCurrentItem(item) + QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() + packages.disable_current_package() + QtGui.QApplication.processEvents() + QtGui.QApplication.processEvents() # force delayed calls packages.populate_lists() From a00c18aff40572832bb39b11d4764d4be7cae335 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 12:31:58 +0200 Subject: [PATCH 157/194] Fixes jobs inside automatic loops core/interpreter/cached.py: - _handle_suspended: Removed error.signature and unused identifier i core/modules/vistrails_module.py: - ModuleSuspended: Removed job_id attribute - VistrailsModule.compute_all: Create a new module for each iteration Fixed module.typeChecking -> self.typeChecking and module.setInputValues -> self.setInputValues This was breaking signatures. Also fixed other methods. core/vistrail/job.py: - JobMixin: Removed finishJob call from updateUpstream. The logging object is not created yet so we need to call it in compute() instead. gui/job_monitor.py: Updated to reflect other changes --- vistrails/core/interpreter/cached.py | 9 +-- vistrails/core/modules/vistrails_module.py | 30 +++++----- vistrails/core/vistrail/job.py | 69 +++++++++------------- vistrails/gui/job_monitor.py | 28 ++++----- 4 files changed, 58 insertions(+), 78 deletions(-) diff --git a/vistrails/core/interpreter/cached.py b/vistrails/core/interpreter/cached.py index 5077bbc1a..94b90c4e7 100644 --- a/vistrails/core/interpreter/cached.py +++ b/vistrails/core/interpreter/cached.py @@ -122,20 +122,15 @@ def _handle_suspended(self, obj, error): ) -> None Report module as suspended """ - # update job monitor because this may be an oldStyle job + # update job monitor because this may be an old-style job jm = obj.job_monitor() reg = get_module_registry() name = reg.get_descriptor(obj.__class__).name - i = "%s" % self.remap_id(obj.id) iteration = self.log.get_iteration_from_module(obj) if iteration is not None: - name = name + '/' + str(iteration) - i = i + '/' + str(iteration) + name += '/' + str(iteration) # add to parent list for computing the module tree later error.name = name - # if signature is not set we use the module identifier - if not error.signature: - error.signature = obj.signature jm.addParent(error) def end_update(self, obj, error=None, errorTrace=None, diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py index 1c48a7fbc..78f6afb58 100644 --- a/vistrails/core/modules/vistrails_module.py +++ b/vistrails/core/modules/vistrails_module.py @@ -138,7 +138,7 @@ class ModuleSuspended(ModuleError): modules """ - def __init__(self, module, errormsg, monitor=None, children=None, job_id=None, queue=None): + def __init__(self, module, errormsg, monitor=None, children=None, queue=None): self.monitor = monitor if monitor is None and queue is not None: warnings.warn("Use of deprecated argument 'queue' replaced by " @@ -147,7 +147,6 @@ def __init__(self, module, errormsg, monitor=None, children=None, job_id=None, q stacklevel=2) self.monitor = queue self.children = children - self.signature = job_id self.name = None ModuleError.__init__(self, module, errormsg) @@ -686,21 +685,21 @@ def compute_all(self): loop = self.logging.begin_loop_execution(self, num_inputs) ## Update everything for each value inside the list outputs = {} - module = copy.copy(self) - module.list_depth = self.list_depth - 1 for i in xrange(num_inputs): self.logging.update_progress(self, float(i)/num_inputs) + module = copy.copy(self) + module.list_depth = self.list_depth - 1 module.had_error = False + module.was_suspended = False if not self.upToDate: # pragma: no partial ## Type checking if first iteration and last iteration level if i == 0 and self.list_depth == 1: - module.typeChecking(module, port_names, elements) + self.typeChecking(module, port_names, elements) module.upToDate = False module.computed = False - - module.setInputValues(module, port_names, elements[i], i) + self.setInputValues(module, port_names, elements[i], i) loop.begin_iteration(module, i) @@ -708,6 +707,7 @@ def compute_all(self): module.update() except ModuleSuspended, e: e.loop_iteration = i + module.logging.end_update(module, e, was_suspended=True) suspended.append(e) loop.end_iteration(module) continue @@ -808,12 +808,12 @@ def generator(self): module.had_error = False ## Type checking if i == 0: - module.typeChecking(module, ports, [elements]) + self.typeChecking(module, ports, [elements]) module.upToDate = False module.computed = False - module.setInputValues(module, ports, elements, i) + self.setInputValues(module, ports, elements, i) try: module.compute() @@ -863,8 +863,8 @@ def generator(self): # assembled all inputs so do the actual computation elements = [inputs[port] for port in ports] ## Type checking - module.typeChecking(module, ports, zip(*elements)) - module.setInputValues(module, ports, elements, i) + self.typeChecking(module, ports, zip(*elements)) + self.setInputValues(module, ports, elements, i) try: module.compute() except Exception, e: @@ -925,8 +925,8 @@ def generator(self): if None not in elements: self.logging.begin_compute(module) ## Type checking - module.typeChecking(module, ports, [elements]) - module.setInputValues(module, ports, elements, i) + self.typeChecking(module, ports, [elements]) + self.setInputValues(module, ports, elements, i) try: module.compute() except Exception, e: @@ -1487,8 +1487,8 @@ def _Generator(self): module.set_output(name_output, None) yield None ## Type checking - module.typeChecking(module, ports, [elements]) - module.setInputValues(module, ports, elements, i) + self.typeChecking(module, ports, [elements]) + self.setInputValues(module, ports, elements, i) userGenerator.next() # diff --git a/vistrails/core/vistrail/job.py b/vistrails/core/vistrail/job.py index d72b742dc..e93e2d92b 100644 --- a/vistrails/core/vistrail/job.py +++ b/vistrails/core/vistrail/job.py @@ -51,12 +51,6 @@ import unittest import weakref -class BaseMonitor(object): - def finished(self): - """Indicates whether the job has completed (module can resume). - """ - raise NotImplementedError - class JobMixin(NotCacheable): """ Mixin for suspendable modules. @@ -64,48 +58,43 @@ class JobMixin(NotCacheable): The package developer needs to implement the sub methods readInputs(), getId(), setResults(), startJob(), getMonitor() and finishJob(). """ - cache = None - params = None def compute(self): - if self.cache is not None: + + jm = self.job_monitor() + + cache = jm.getCache(self.signature) + if cache is not None: # Result is available and cached - self.setResults(self.cache.parameters) + self.setResults(cache.parameters) return - # Start new job - params = self.readInputs() - params = self.startJob(params) - jm = self.job_monitor() - jm.addJob(self.signature, params, self.getName()) + + job = jm.getJob(self.signature) + if job is None: + params = self.readInputs() + params = self.startJob(params) + jm.addJob(self.signature, params, self.getName()) + else: + params = job.parameters + # Might raise ModuleSuspended jm.checkJob(self, self.signature, self.getMonitor(params)) + # Didn't raise: job is finished params = self.finishJob(params) - self.setResults(params) jm.setCache(self.signature, params) - self.cache = jm.getCache(self.signature) + self.setResults(params) def update_upstream(self): + """ Skip upstream if job exists + """ if not hasattr(self, 'signature'): raise ModuleError(self, "Module has no signature") jm = self.job_monitor() - self.cache = jm.getCache(self.signature) - if self.cache is not None: - return # compute() will use self.cache - job = jm.getJob(self.signature) - if job is not None: - # resume job - params = job.parameters - # Might raise ModuleSuspended - jm.checkJob(self, self.signature, self.getMonitor(params)) - # Didn't raise: job is finished - params = self.finishJob(params) - jm.setCache(self.signature, params) - self.cache = jm.getCache(self.signature) - # compute() will set results - # We need to submit a new job - # Update upstream, compute() will need it - super(JobMixin, self).update_upstream() + if not (jm.getCache(self.signature) or jm.getJob(self.signature)): + # We need to submit a new job + # Update upstream, compute() will need it + super(JobMixin, self).update_upstream() def readInputs(self): """ readInputs() -> None @@ -409,17 +398,15 @@ def startWorkflow(self, workflow): def addJobRec(self, obj, parent_id=None): workflow = self.currentWorkflow() - id = obj.signature - if id not in workflow.jobs and parent_id: - id = '%s/%s' % (parent_id, obj.signature) + id = obj.module.signature if obj.children: for child in obj.children: self.addJobRec(child, id) return - if obj.signature in workflow.jobs: + if id in workflow.jobs: # this is an already existing new-style job # mark that it has been used - workflow.jobs[obj.signature].mark() + workflow.jobs[id].mark() return if id in workflow.jobs: # this is an already existing new-style job @@ -510,8 +497,8 @@ def checkJob(self, module, id, monitor): """ if not self.currentWorkflow(): if not monitor or not self.isDone(monitor): - raise ModuleSuspended(module, 'Job is running', monitor=monitor, - job_id=id) + raise ModuleSuspended(module, 'Job is running', + monitor=monitor) job = self.getJob(id) if self.callback: self.callback.checkJob(module, id, monitor) diff --git a/vistrails/gui/job_monitor.py b/vistrails/gui/job_monitor.py index ecebdf621..b9d4c01fe 100644 --- a/vistrails/gui/job_monitor.py +++ b/vistrails/gui/job_monitor.py @@ -229,7 +229,7 @@ def update_jobs(self): continue ret = QtGui.QMessageBox.information(self, "Job Ready", 'Pending Jobs in workflow "%s" have finished, ' - 'continue execution now?' % workflow.name, + 'continue execution now?' % workflow.text(0), QtGui.QMessageBox.Ok, QtGui.QMessageBox.Cancel) if ret == QtGui.QMessageBox.Ok: jm.startWorkflow(workflow.workflow) @@ -339,7 +339,9 @@ def deleteJob(self, id): workflow_item.updateJobs() def addJobRec(self, obj, parent_id=None): - """Recursively adds jobs that are executed by other modules like + """addJobRec(obj: ModuleSuspended, parent_id: signature) -> None + + Recursively adds jobs that are executed by other modules like Groups and Maps. This is only for display purposes. """ workflow = self.jobMonitor.currentWorkflow() @@ -347,9 +349,7 @@ def addJobRec(self, obj, parent_id=None): # top down. Base is assumed to have been added already base = (workflow_item.intermediates[parent_id] if parent_id is not None else workflow_item) - id = obj.signature - if id not in workflow.jobs and parent_id: - id = '%s/%s' % (parent_id, obj.signature) + id = obj.module.signature if obj.children: # add parent items and their children if id not in workflow_item.intermediates: @@ -359,9 +359,9 @@ def addJobRec(self, obj, parent_id=None): for child in obj.children: self.addJobRec(child, id) - elif obj.signature in workflow.jobs: + elif obj.module.signature in workflow.jobs: # this is an already existing new-style job - job = workflow_item.jobs[obj.signature] + job = workflow_item.jobs[obj.module.signature] job.monitor = obj.monitor # need to force takeChild base.addChild(job.parent().takeChild(job.parent().indexOfChild(job))) @@ -392,8 +392,8 @@ def checkJob(self, module, id, monitor): workflow = self.jobMonitor.currentWorkflow() if not workflow: if not monitor or not self.jobMonitor.isDone(monitor): - raise ModuleSuspended(module, 'Job is running', monitor=monitor, - job_id=id) + raise ModuleSuspended(module, 'Job is running', + monitor=monitor) workflow_item = self.workflowItems[workflow.id] item = workflow_item.jobs.get(id, None) item.setText(0, item.job.name) @@ -404,7 +404,7 @@ def checkJob(self, module, id, monitor): workflow = self.jobMonitor.currentWorkflow() workflow_item = self.workflowItems.get(workflow.id, None) workflow_item.updateJobs() - progress = workflow_item.view.controller.progress + progress = self.controller.progress conf = configuration.get_vistrails_configuration() interval = conf.jobCheckInterval @@ -433,7 +433,7 @@ def checkJob(self, module, id, monitor): new_progress.setLabelText(labelText) new_progress.setMinimumDuration(0) new_progress.suspended = True - workflow_item.view.controller.progress = new_progress + self.controller.progress = new_progress progress.hide() progress.deleteLater() progress = new_progress @@ -441,12 +441,10 @@ def checkJob(self, module, id, monitor): QtCore.QCoreApplication.processEvents() raise ModuleSuspended(module, 'Interrupted by user, job' - ' is still running', monitor=monitor, - job_id=id) + ' is still running', monitor=monitor) return if not monitor or not self.jobMonitor.isDone(monitor): - raise ModuleSuspended(module, 'Job is running', monitor=monitor, - job_id=id) + raise ModuleSuspended(module, 'Job is running', monitor=monitor) class QWorkflowItem(QtGui.QTreeWidgetItem): From 724a2d981eb0528b9f807c4a4986fa43d96dd3d0 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 12:47:21 +0200 Subject: [PATCH 158/194] Moved hadoop modules to 'hadoop' namespace Updated to use controllers JobMonitor Bumped version to 0.3.1 and added upgrades --- vistrails/packages/RemoteQ/__init__.py | 2 +- vistrails/packages/RemoteQ/base.py | 2 +- vistrails/packages/RemoteQ/hdfs.py | 21 ++++++++------- vistrails/packages/RemoteQ/init.py | 35 ++++++++++++++++++------- vistrails/packages/RemoteQ/streaming.py | 16 +++++------ 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/vistrails/packages/RemoteQ/__init__.py b/vistrails/packages/RemoteQ/__init__.py index 47d737316..f6b99cb35 100644 --- a/vistrails/packages/RemoteQ/__init__.py +++ b/vistrails/packages/RemoteQ/__init__.py @@ -34,7 +34,7 @@ ############################################################################### from vistrails.core.configuration import ConfigurationObject -version = '0.3' +version = '0.3.1' identifier = 'org.vistrails.vistrails.remoteq' name = 'RemoteQ' diff --git a/vistrails/packages/RemoteQ/base.py b/vistrails/packages/RemoteQ/base.py index 79c725b29..4259fede8 100644 --- a/vistrails/packages/RemoteQ/base.py +++ b/vistrails/packages/RemoteQ/base.py @@ -217,7 +217,7 @@ class PythonSourceToFile(Module): temporary Python file. The code will not be passed around. """ - _settings = ModuleSettings( + _settings = ModuleSettings(namespace='hadoop', configure_widget=PythonSourceToFileConfigurationWidget) _input_ports = [IPort('Input File', File), diff --git a/vistrails/packages/RemoteQ/hdfs.py b/vistrails/packages/RemoteQ/hdfs.py index 9e971baa6..384437a6f 100644 --- a/vistrails/packages/RemoteQ/hdfs.py +++ b/vistrails/packages/RemoteQ/hdfs.py @@ -34,15 +34,15 @@ ############################################################################### """ Wrapper for Hadoop DFS operations """ -from vistrails.core.interpreter.job import JobMonitor +import os +import shutil + from vistrails.core.modules.basic_modules import File, Boolean, String, \ PathObject, Path -from vistrails.core.modules.config import IPort, OPort -from vistrails.core.modules.vistrails_module import Module, NotCacheable, \ - ModuleError +from vistrails.core.modules.config import IPort, OPort, ModuleSettings +from vistrails.core.modules.vistrails_module import ModuleError from base import HadoopBaseModule -import os -import shutil + ################################################################################ class HDFSPut(HadoopBaseModule): @@ -50,6 +50,7 @@ class HDFSPut(HadoopBaseModule): Putting a local file to the Hadoop DFS First copying it to the server """ + _settings = ModuleSettings(namespace='hadoop') _input_ports = [IPort('Local File', File), IPort('Remote Location', String), IPort('Override', Boolean), @@ -63,7 +64,7 @@ def __init__(self): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() id = self.signature job = jm.getCache(id) if not job: @@ -96,6 +97,7 @@ class HDFSGet(HadoopBaseModule): Then getting it from the server """ + _settings = ModuleSettings(namespace='hadoop') _input_ports = [IPort('Local File', Path), IPort('Remote Location', String), IPort('Override', Boolean), @@ -110,7 +112,7 @@ def __init__(self): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() id = self.signature job = jm.getCache(id) if not job: @@ -152,6 +154,7 @@ class HDFSEnsureNew(HadoopBaseModule): Make sure the file is removed """ + _settings = ModuleSettings(namespace='hadoop') _input_ports = [IPort('Name', String), IPort('Machine', '(org.vistrails.vistrails.remoteq:Machine)')] @@ -163,7 +166,7 @@ def __init__(self): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() id = self.signature job = jm.getCache(id) if not job: diff --git a/vistrails/packages/RemoteQ/init.py b/vistrails/packages/RemoteQ/init.py index e58aebe5a..9fe880887 100644 --- a/vistrails/packages/RemoteQ/init.py +++ b/vistrails/packages/RemoteQ/init.py @@ -34,19 +34,19 @@ ############################################################################### from vistrails.core.modules.config import ModuleSettings from vistrails.core.modules.module_registry import get_module_registry -from vistrails.core.modules.vistrails_module import Module, ModuleError, ModuleSuspended +from vistrails.core.modules.vistrails_module import Module, ModuleError, \ + ModuleSuspended from vistrails.core.system import current_user -from vistrails.core.interpreter.job import JobMixin, JobMonitor +from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler +from vistrails.core.vistrail.job import JobMixin from remoteq.pipelines.shell import FileCommander as BQMachine from remoteq.core.stack import select_machine, end_machine, use_machine, \ - current_machine + current_machine from remoteq.batch.commandline import PBS, PBSScript from remoteq.batch.directories import CreateDirectory from remoteq.batch.files import TransferFiles -from remoteq.pipelines.shell.ssh import SSHTerminal -import hashlib class Machine(Module): _input_ports = [('server', '(edu.utah.sci.vistrails.basic:String)', True), @@ -129,7 +129,7 @@ def get_machine(self): def get_job_machine(self): """ Get machine info from job """ - jm = JobMonitor.getInstance() + jm = self.job_monitor() if jm.hasJob(self.getId({})): params = jm.getJob(self.signature).parameters if 'server' in params: @@ -191,7 +191,7 @@ def compute(self): m = current_machine() result = m.remote.send_command(command) end_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() d = {'result':result} self.set_job_machine(d, machine) jm.setCache(self.signature, d, self.getName()) @@ -365,7 +365,7 @@ class SyncDirectories(RQModule): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() cache = jm.getCache(self.signature) if not cache: if not self.has_input('local_directory'): @@ -403,7 +403,7 @@ class CopyFile(RQModule): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() cache = jm.getCache(self.signature) if cache: result = cache.parameters['result'] @@ -428,6 +428,23 @@ def compute(self): self.set_output("machine", machine) self.set_output("output", result) + +def handle_module_upgrade_request(controller, module_id, pipeline): + # prepend 'hadoop|' to hadoop modules < 0.3.1 + reg = get_module_registry() + + hadoop_remaps = ['PythonSourceToFile', 'HDFSPut', 'HDFSGet', + 'HDFSEnsureNew', 'URICreator', 'HadoopStreaming'] + + module_remap = {} + for name in hadoop_remaps: + module_remap[name] = [(None, '0.3.0', "hadoop|%s" % name, {})] + return UpgradeWorkflowHandler.remap_module(controller, + module_id, + pipeline, + module_remap) + + def initialize(): global _modules _modules = [Machine, RQModule, RunPBSScript, RunCommand, diff --git a/vistrails/packages/RemoteQ/streaming.py b/vistrails/packages/RemoteQ/streaming.py index a26b4bd30..51efbcade 100644 --- a/vistrails/packages/RemoteQ/streaming.py +++ b/vistrails/packages/RemoteQ/streaming.py @@ -35,17 +35,15 @@ """ Wrapper for Hadoop Streaming to use with Python mapper/reducer, cache files, etc... """ -import copy -from vistrails.core.interpreter.job import JobMixin, JobMonitor +import os.path + from vistrails.core.modules.basic_modules import File, String -from vistrails.core.modules.config import IPort, OPort -from vistrails.core.modules.vistrails_module import NotCacheable, ModuleError +from vistrails.core.modules.config import IPort, OPort, ModuleSettings +from vistrails.core.modules.vistrails_module import ModuleError from base import HadoopBaseModule -from remoteq.core.stack import select_machine, end_machine, use_machine, \ - current_machine +from remoteq.core.stack import use_machine from remoteq.batch.commandline import Subshell -import os.path ################################################################################ class HadoopStreaming(HadoopBaseModule): """ @@ -53,6 +51,7 @@ class HadoopStreaming(HadoopBaseModule): customized Python Mapper/Reducer/Combiner """ + _settings = ModuleSettings(namespace='hadoop') _input_ports = [IPort('Mapper', File), IPort('Reducer', File), IPort('Combiner', File), @@ -205,6 +204,7 @@ class URICreator(HadoopBaseModule): The class for caching HDFS file onto the TaskNode local drive """ + _settings = ModuleSettings(namespace='hadoop') _input_ports = [IPort('HDFS File/URI', String), IPort('Symlink', String), IPort('Machine', @@ -216,7 +216,7 @@ class URICreator(HadoopBaseModule): def compute(self): machine = self.get_machine() - jm = JobMonitor.getInstance() + jm = self.job_monitor() id = self.signature job = jm.getCache(id) if not job: From 5389c99a6c978cac79f4f4c45d806bf4d5102c4f Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 21:05:05 +0200 Subject: [PATCH 159/194] Fixed job using old workflow version gui/vistrail_controller.py: The old job workflow was used when clicking execute while editing a parameter We now delay the job workflow creation to after all changes have been applied --- vistrails/gui/vistrail_controller.py | 39 +++++++++++++++++----------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index 2c03c1819..bf428f21f 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -148,6 +148,7 @@ def __init__(self, vistrail=None, locator=None, abstractions=None, self.reset_version_view = True self.quiet = False self.progress = None + self.create_job = False self.analogy = {} # if self._auto_save is True, an auto_saving timer will save a temporary @@ -378,6 +379,24 @@ def execute_current_workflow(self, custom_aliases=None, custom_params=None, """ self.flush_delayed_actions() + + if self.create_job: + version_id = self.current_version + # check if a job exist for this workflow + current_workflow = None + for wf in self.jobMonitor.workflows.itervalues(): + try: + wf_version = int(wf.version) + except ValueError: + wf_version = self.vistrail.get_version_number(wf.version) + if version_id == wf_version: + current_workflow = wf + self.jobMonitor.startWorkflow(wf) + if not current_workflow: + current_workflow = JobWorkflow(version_id) + self.jobMonitor.startWorkflow(current_workflow) + self.create_job = False + if self.current_pipeline: locator = self.get_locator() if locator: @@ -404,6 +423,7 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): Execute the current workflow (if exists) and monitors it if it contains jobs """ + # reset job view from vistrails.gui.job_monitor import QJobView jobView = QJobView.instance() @@ -413,25 +433,13 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): return jobView.updating_now = True - if not self.jobMonitor.currentWorkflow(): - version_id = self.current_version - # check if a job exist for this workflow - current_workflow = None - for wf in self.jobMonitor.workflows.itervalues(): - try: - wf_version = int(wf.version) - except ValueError: - wf_version = self.vistrail.get_version_number(wf.version) - if version_id == wf_version: - current_workflow = wf - self.jobMonitor.startWorkflow(wf) - if not current_workflow: - current_workflow = JobWorkflow(version_id) - self.jobMonitor.startWorkflow(current_workflow) try: self.progress = ExecutionProgressDialog(self.vistrail_view) self.progress.show() + if not self.jobMonitor.currentWorkflow(): + self.create_job = True + result = self.execute_current_workflow(reason=reason, sinks=sinks) self.progress.setValue(100) @@ -439,6 +447,7 @@ def execute_user_workflow(self, reason='Pipeline Execution', sinks=None): self.progress.hide() self.progress.deleteLater() self.progress = None + self.create_job = False self.jobMonitor.finishWorkflow() jobView.updating_now = False From 64f7c59971c6f17fe360acd6bf0e57e73f32ccf6 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 21:06:44 +0200 Subject: [PATCH 160/194] Fixes JobView not being updated when executing old job in new workflow core/vistrail/job.py: - JobMixin.compute: Always call addJob or setCache so that the gui gets updated correctly --- vistrails/core/vistrail/job.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/vistrails/core/vistrail/job.py b/vistrails/core/vistrail/job.py index e93e2d92b..d0cdb5858 100644 --- a/vistrails/core/vistrail/job.py +++ b/vistrails/core/vistrail/job.py @@ -56,15 +56,19 @@ class JobMixin(NotCacheable): Provides a compute method implementing job handling. The package developer needs to implement the sub methods readInputs(), - getId(), setResults(), startJob(), getMonitor() and finishJob(). + setResults(), startJob(), getMonitor() and finishJob(). """ def compute(self): + """ Calls user-implemented methods at the right times + It should always call addJob or setCache so that the callback works + """ jm = self.job_monitor() cache = jm.getCache(self.signature) if cache is not None: + jm.setCache(self.signature, cache.parameters) # Result is available and cached self.setResults(cache.parameters) return @@ -73,9 +77,9 @@ def compute(self): if job is None: params = self.readInputs() params = self.startJob(params) - jm.addJob(self.signature, params, self.getName()) else: params = job.parameters + jm.addJob(self.signature, params, self.getName()) # Might raise ModuleSuspended jm.checkJob(self, self.signature, self.getMonitor(params)) @@ -132,6 +136,7 @@ def getId(self, params): """ getId(params: dict) -> job identifier Should return an string completely identifying this job Class name + input values are usually unique + DEPRECATED """ return self.signature @@ -356,7 +361,7 @@ def deleteWorkflow(self, id): # delete jobs that only occur in this workflow for job_id in workflow.jobs: delete = True - for wf in self.workflows: + for wf in self.workflows.values(): if job_id in wf.jobs: delete = False if delete: From 3f9aebd3289d7b27b6bdace29402fc0393685e59 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 21:09:19 +0200 Subject: [PATCH 161/194] Added RemoteQ module RunJob packages/RemoteQ/init.py: - RunJob: *new Whereas RunCommand waits until it finishes, RunJob runs a job over SSH asynchronously. It can be detached, returns stdout/stderr, and fails with a ModuleError if return code is not 0. --- vistrails/packages/RemoteQ/init.py | 84 +++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 2 deletions(-) diff --git a/vistrails/packages/RemoteQ/init.py b/vistrails/packages/RemoteQ/init.py index 9fe880887..caadd5d3e 100644 --- a/vistrails/packages/RemoteQ/init.py +++ b/vistrails/packages/RemoteQ/init.py @@ -43,7 +43,7 @@ from remoteq.pipelines.shell import FileCommander as BQMachine from remoteq.core.stack import select_machine, end_machine, use_machine, \ current_machine -from remoteq.batch.commandline import PBS, PBSScript +from remoteq.batch.commandline import PBS, PBSScript, Subshell from remoteq.batch.directories import CreateDirectory from remoteq.batch.files import TransferFiles @@ -169,6 +169,10 @@ def get_default_machine(self): return server, port, username, password class RunCommand(RQModule): + """ Runs a command over SSH and waits until it finishes + + """ + _input_ports = [('machine', Machine), ('command', '(edu.utah.sci.vistrails.basic:String)',True), ] @@ -198,6 +202,70 @@ def compute(self): self.set_output("output", result) self.set_output("machine", machine) +class RunJob(RQModule): + """ Run an asynchronous command that can be detached and polled. + This is preferable over RunCommand for long-running operations + """ + + _input_ports = [('machine', Machine), + ('command', '(edu.utah.sci.vistrails.basic:String)', True), + ('working_directory', '(edu.utah.sci.vistrails.basic:String)'), + ] + + _output_ports = [('stdout', '(edu.utah.sci.vistrails.basic:String)'), + ('stderr', '(edu.utah.sci.vistrails.basic:String)'), + ] + + job = None + def readInputs(self): + d = {} + if not self.has_input('command'): + raise ModuleError(self, "No command specified") + d['command'] = self.get_input('command').strip() + d['working_directory'] = self.get_input('working_directory') \ + if self.has_input('working_directory') else '.' + return d + + def startJob(self, params): + work_dir = params['working_directory'] + self.machine = self.get_machine() + use_machine(self.machine) + self.job = Subshell("remote", params['command'], work_dir) + self.job.run() + ret = self.job._ret + if ret: + try: + job_id = int(ret.split('\n')[0]) + except ValueError: + end_machine() + raise ModuleError(self, "Error submitting job: %s" % ret) + self.set_job_machine(params, self.machine) + return params + + def getMonitor(self, params): + if not self.job: + self.startJob(params) + return self.job + + def finishJob(self, params): + params['stdout'] = self.job.standard_output() + params['stderr'] = self.job.standard_error() + if self.job.failed(): + self.job._pushw() + code = self.job.terminal.cat("%s.failed" % + self.job._identifier_filename) + self.job._popw() + end_machine() + raise ModuleError(self, + "Command failed with error code %s: %s" % + (code.strip(), params['stderr'].strip())) + end_machine() + return params + + def setResults(self, params): + self.set_output('stdout', params['stdout']) + self.set_output('stderr', params['stderr']) + class PBSJob(RQModule): _input_ports = [('machine', Machine), ('command', '(edu.utah.sci.vistrails.basic:String)', True), @@ -276,6 +344,10 @@ def compute(self): [f.split(' ')[-1] for f in files.split('\n')[1:]]) class RunPBSScript(RQModule): + """ Run a pbs script by submitting it to a PBS scheduler + + """ + _input_ports = [('machine', Machine), ('command', '(edu.utah.sci.vistrails.basic:String)', True), ('working_directory', '(edu.utah.sci.vistrails.basic:String)'), @@ -354,6 +426,10 @@ def setResults(self, params): self.set_output('stderr', params['stderr']) class SyncDirectories(RQModule): + """ Copy all files in a directory to/from a remote server using SFTP + + """ + _input_ports = [('machine', Machine), ('local_directory', '(edu.utah.sci.vistrails.basic:String)'), ('remote_directory', '(edu.utah.sci.vistrails.basic:String)'), @@ -391,6 +467,10 @@ def compute(self): self.set_output("machine", machine) class CopyFile(RQModule): + """ Copy a single file to/from a remote server using SFTP + + """ + _input_ports = [('machine', Machine), ('local_file', '(edu.utah.sci.vistrails.basic:String)'), ('remote_file', '(edu.utah.sci.vistrails.basic:String)'), @@ -447,7 +527,7 @@ def handle_module_upgrade_request(controller, module_id, pipeline): def initialize(): global _modules - _modules = [Machine, RQModule, RunPBSScript, RunCommand, + _modules = [Machine, RQModule, RunPBSScript, RunCommand, RunJob, SyncDirectories, CopyFile] import base import hdfs From 48e459b1cc28cd80ca3121040b54c6896a55bce0 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Tue, 14 Oct 2014 22:23:50 +0200 Subject: [PATCH 162/194] RemoteQ: Check exit code after RunCommand finishes packages/RemoteQ/init.py: - RunCommand: Raise ModuleError if exit code is not 0 Fixed removed self.cache --- vistrails/packages/RemoteQ/init.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vistrails/packages/RemoteQ/init.py b/vistrails/packages/RemoteQ/init.py index caadd5d3e..b49113225 100644 --- a/vistrails/packages/RemoteQ/init.py +++ b/vistrails/packages/RemoteQ/init.py @@ -183,8 +183,11 @@ class RunCommand(RQModule): def compute(self): machine = self.get_machine() - if self.cache: - result = self.cache.parameters['result'] + + jm = self.job_monitor() + cache = jm.getCache(self.signature) + if cache: + result = cache.parameters['result'] else: if not self.has_input('command'): raise ModuleError(self, "No command specified") @@ -194,11 +197,15 @@ def compute(self): use_machine(machine) m = current_machine() result = m.remote.send_command(command) + exitcode = m.remote.last_exitcode() end_machine() - jm = self.job_monitor() - d = {'result':result} - self.set_job_machine(d, machine) - jm.setCache(self.signature, d, self.getName()) + if exitcode != 0: + raise ModuleError(self, + "Command failed with exit code %s: %s" % + (exitcode, result)) + d = {'result':result} + self.set_job_machine(d, machine) + jm.setCache(self.signature, d, self.getName()) self.set_output("output", result) self.set_output("machine", machine) @@ -257,7 +264,7 @@ def finishJob(self, params): self.job._popw() end_machine() raise ModuleError(self, - "Command failed with error code %s: %s" % + "Command failed with exit code %s: %s" % (code.strip(), params['stderr'].strip())) end_machine() return params From e524b97f996f4c61d8b8192fd33057ec9a802d43 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 14 Oct 2014 17:55:25 -0400 Subject: [PATCH 163/194] Expanding/collapsing versions don't change vt --- vistrails/gui/vistrail_controller.py | 16 ---------------- vistrails/gui/vistrails_window.py | 2 +- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index bff16a813..03dc3eb0b 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -872,14 +872,10 @@ def expand_versions(self, v1, v2): """ full = self.vistrail.getVersionGraph() - changed = False p = full.parent(v2) while p>v1: self.vistrail.expandVersion(p) - changed = True p = full.parent(p) - if changed: - self.set_changed(True) self.recompute_terse_graph() self.invalidate_version_tree(False, True) @@ -894,8 +890,6 @@ def collapse_versions(self, v): am = self.vistrail.actionMap tm = self.vistrail.get_tagMap() - changed = False - while 1: try: current=x.pop() @@ -907,15 +901,12 @@ def collapse_versions(self, v): if len(children) > 1: break self.vistrail.collapseVersion(current) - changed = True for child in children: if (not child in tm and # has no Tag child != self.current_version): # not selected x.append(child) - if changed: - self.set_changed(True) self.recompute_terse_graph() self.invalidate_version_tree(False, True) @@ -932,8 +923,6 @@ def expand_or_collapse_all_versions_below(self, v=None, expand=True): am = self.vistrail.actionMap - changed = False - while 1: try: current=x.pop() @@ -946,13 +935,9 @@ def expand_or_collapse_all_versions_below(self, v=None, expand=True): self.vistrail.expandVersion(current) else: self.vistrail.collapseVersion(current) - changed = True for child in children: x.append(child) - - if changed: - self.set_changed(True) self.recompute_terse_graph() self.invalidate_version_tree(False, True) @@ -970,7 +955,6 @@ def collapse_all_versions(self): am = self.vistrail.actionMap for a in am.iterkeys(): self.vistrail.collapseVersion(a) - self.set_changed(True) self.recompute_terse_graph() self.invalidate_version_tree(False, True) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index c892543fd..726a8179c 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -722,7 +722,7 @@ def init_action_list(self): _app.pass_through(self.get_current_controller, 'collapse_all_versions')}), ("hideBranch", "Hide Branch", - {'statusTip': "Hide all versions in the tre including " \ + {'statusTip': "Hide all versions in the tree including " \ "and below the current version", 'enabled': True, 'callback': \ From 09168466b777f775589d7ce9f265426bb691c8c0 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 14 Oct 2014 17:57:35 -0400 Subject: [PATCH 164/194] Removes unused set_num_versions_always_shown() --- vistrails/gui/vistrail_controller.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/vistrails/gui/vistrail_controller.py b/vistrails/gui/vistrail_controller.py index 03dc3eb0b..5cc27a83a 100644 --- a/vistrails/gui/vistrail_controller.py +++ b/vistrails/gui/vistrail_controller.py @@ -958,16 +958,6 @@ def collapse_all_versions(self): self.recompute_terse_graph() self.invalidate_version_tree(False, True) - def set_num_versions_always_shown(self, num): - """ set_num_versions_always_shown(num: int) -> None - - """ - if num <> self.num_versions_always_shown: - self.num_versions_always_shown = num - self.set_changed(True) - self.recompute_terse_graph() - self.invalidate_version_tree(False) - def setSavedQueries(self, queries): """ setSavedQueries(queries: list of (str, str, str)) -> None Set the saved queries of a vistail From a2e7ab2797c4d65e1fcbabf450dec40120a9a7c5 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 16 Oct 2014 20:25:09 +0200 Subject: [PATCH 165/194] Fixed inline widgets sometimes not getting updated gui/pipeline_view.py: - function_changed: self.module does not get updated correctly so get module from controller instead - update_function_values: *new - functions_have_been_deleted: *new - hoverEnterEvent: Set widget on scene instead so that it never gets orphaned - setupScene: Call update_function_values Ticket: 903 --- vistrails/gui/pipeline_view.py | 131 +++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 57 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 2cc7de8fa..845bbe7da 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1079,10 +1079,9 @@ def __init__(self, parent=None, scene=None): self.progressBrush = CurrentTheme.SUCCESS_MODULE_BRUSH self.connectionItems = {} self._cur_function_names = set() - self.function_overview = 'No functions set' + self.function_overview = '' self.show_widgets = get_vistrails_configuration( ).check('showInlineParameterWidgets') - self.function_widget = None self.function_widgets = [] self.functions_widget = None self.edit_rect = QtCore.QRectF(0.0, 0.0, 0.0, 0.0) @@ -1122,6 +1121,10 @@ def module_text_has_changed(m1, m2): self.module.editable_input_ports: # shape has changed so we need to recreate the module return True + + # check for deleted edit widgets + if self.functions_have_been_deleted(core_module): + return True # Check for changed ports # _db_name because this shows up in the profile. cip = sorted([x.key_no_id() for x in self.inputPorts]) @@ -1144,6 +1147,13 @@ def module_text_has_changed(m1, m2): return True return False + def functions_have_been_deleted(self, core_module): + # check if a visible function has been deleted + before = set(f.name for f in + self.module.functions) + after = set(f.name for f in core_module.functions) + return (before - after) & core_module.editable_input_ports + def moduleFunctionsHaveChanged(self, core_module): m1 = self.module m2 = core_module @@ -1190,29 +1200,16 @@ def update_function_ports(self, core_module=None): if item is not None: item.connect() - if core_module.functions: - function_overview = [] - for f in core_module.functions: - if len(f.params)>1: - params = ', '.join([p.strValue for p in f.params]) - elif len(f.params)>0: - params = f.params[0].strValue - else: - params = '' - if len(params)>100: - params = params[:97] + '...' - function_template = "%s(%s)" - function_overview.append(function_template % (f.name, params)) - template = '

%s

' - self.function_overview = template % '
'.join(function_overview) - else: - self.function_overview = 'No functions set' - - self.module = core_module + def update_function_values(self, core_module): + """ Updates widget values if they have changed + """ for function_widget in self.function_widgets: - for f in self.module.functions: + for f in core_module.functions: if f.name == function_widget.function.name: - function_widget.setContents([p.strValue for p in f.params]) + value = [p.strValue for p in f.params] + if function_widget.getContents() != value: + function_widget.setContents(value) + continue def setProgress(self, progress): self.progress = progress @@ -1331,7 +1328,7 @@ def setGhosted(self, ghosted): port.setGhosted(ghosted) for port in self.outputPorts.itervalues(): port.setGhosted(ghosted) - self._needs_state_udpated = True + self._needs_state_updated = True # if ghosted: # self.modulePen = CurrentTheme.GHOSTED_MODULE_PEN @@ -1597,25 +1594,19 @@ def setupModule(self, module, read_only=False): else: self.setInvalid(True) - def value_changed(self, values): - widget, value = values - controller = self.scene().controller - controller.update_function(self.module, 'value', [value]) - self.update_function_ports(controller.current_pipeline.modules[self.module.id]) - if self.isSelected(): - from vistrails.gui.vistrails_window import _app - _app.notify('module_changed', self.module) - def function_changed(self, name, values): """ Called when a function value has changed by the inline edit widget """ controller = self.scene().controller - controller.update_function(self.module, name, values) - self.update_function_ports(controller.current_pipeline.modules[self.module.id]) + # FIXME: Why is self.module not up-to-date? + module = controller.current_pipeline.modules[self.module.id] + controller.update_function(module, name, values) + module = controller.current_pipeline.modules[self.module.id] + if self.isSelected(): from vistrails.gui.vistrails_window import _app - _app.notify('module_changed', self.module) + _app.notify('module_changed', module) def create_shape_from_fringe(self, fringe): left_fringe, right_fringe = fringe @@ -1874,21 +1865,43 @@ def mouseReleaseEvent(self, event): def hoverEnterEvent(self, event): if QtGui.QApplication.keyboardModifiers() == QtCore.Qt.ControlModifier: - if self.function_widget: - self.scene().removeItem(self.function_widget) - self.function_widget = QtGui.QGraphicsTextItem() + + scene = self.scene() + if scene.function_tooltip: + scene.removeItem(scene.function_tooltip) + + module = scene.controller.current_pipeline.modules[self.module.id] + if module.functions: + function_overview = [] + for f in module.functions: + if len(f.params)>1: + params = ', '.join([p.strValue for p in f.params]) + elif len(f.params)>0: + params = f.params[0].strValue + else: + params = '' + if len(params)>100: + params = params[:97] + '...' + function_template = "%s(%s)" + function_overview.append(function_template % (f.name, params)) + template = '

%s

' + self.function_overview = template % '
'.join(function_overview) + else: + self.function_overview = '' + + scene.function_tooltip = QtGui.QGraphicsTextItem() pos = self.paddedRect.bottomLeft()+self.pos() - self.function_widget.setPos(pos) - self.function_widget.setAcceptHoverEvents(False) - self.scene().addItem(self.function_widget) - self.function_widget.setHtml(self.function_overview) - self.function_widget.setZValue(1000000) + scene.function_tooltip.setPos(pos) + scene.function_tooltip.setAcceptHoverEvents(False) + scene.addItem(scene.function_tooltip) + scene.function_tooltip.setHtml(self.function_overview) + scene.function_tooltip.setZValue(1000000) return QtGui.QGraphicsItem.hoverEnterEvent(self, event) def hoverLeaveEvent(self, event): - if self.function_widget: - self.scene().removeItem(self.function_widget) - self.function_widget = None + if self.scene().function_tooltip: + self.scene().removeItem(self.scene().function_tooltip) + self.scene().function_tooltip = None return QtGui.QGraphicsItem.hoverLeaveEvent(self, event) def itemChange(self, change, value): @@ -2050,6 +2063,7 @@ def __init__(self, parent=None): self.current_pipeline = None self.current_version = -1 self.skip_update = False + self.function_tooltip = None self.tmp_module_item = None self.tmp_input_conn = None @@ -2071,6 +2085,7 @@ def addModule(self, module, moduleBrush=None): if self.controller and self.controller.search: moduleQuery = (self.controller.current_version, module) matched = self.controller.search.matchModule(*moduleQuery) + matched = self.controller.search.matchModule(*moduleQuery) moduleItem.setGhosted(not matched) moduleItem.controller = self.controller moduleItem.setupModule(module, self.read_only_mode) @@ -2182,7 +2197,6 @@ def recreate_module(self, pipeline, m_id): Recreates a module on the scene.""" selected = self.modules[m_id].isSelected() - depending_connections = \ [c_id for c_id in self.modules[m_id].dependingConnectionItems()] # old_depending_connections = self.modules[m_id]._old_connection_ids @@ -2203,18 +2217,17 @@ def recreate_module(self, pipeline, m_id): if selected: self.modules[m_id].setSelected(True) - + def update_module_functions(self, pipeline, m_id): + """ Used by ports_pane to update modules + + """ module = pipeline.modules[m_id] - # check if a visible function has been deleted - before = set(f.name for f in - self.controller.current_pipeline.modules[m_id].functions) - after = set(f.name for f in module.functions) - if (before - after) & module.editable_input_ports: - # function deleted so we need to recreate module with empty widget + if self.modules[m_id].functions_have_been_deleted(module): self.recreate_module(pipeline, m_id) return - self.modules[m_id].update_function_ports(pipeline.modules[m_id]) + if self.modules[m_id].moduleFunctionsHaveChanged(module): + self.modules[m_id].update_function_ports(module) def setupScene(self, pipeline): """ setupScene(pipeline: Pipeline) -> None @@ -2278,12 +2291,12 @@ def setupScene(self, pipeline): # Update common modules for m_id in common_modules: tm_item = self.modules[m_id] - tm = tm_item.module nm = pipeline.modules[m_id] if tm_item.moduleHasChanged(nm): self.recreate_module(pipeline, m_id) elif tm_item.moduleFunctionsHaveChanged(nm): tm_item.update_function_ports(pipeline.modules[m_id]) + tm_item.update_function_values(pipeline.modules[m_id]) if tm_item.isSelected(): selected_modules.append(m_id) if self.controller and self.controller.search: @@ -2294,6 +2307,7 @@ def setupScene(self, pipeline): else: tm_item.setGhosted(False) tm_item.setBreakpoint(nm.is_breakpoint) + tm_item.module = nm # create new connection shapes for c_id in connections_to_be_added: @@ -3448,6 +3462,9 @@ def setContents(self, values): for pw, value in zip(self.param_widgets, values): pw.setContents(value, silent=True) + def getContents(self): + return [pw.contents() for pw in self.param_widgets] + def boundingRect(self): return self.bounds From dbde600deb4de865236a19e0addd5d932aba6532 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 17 Oct 2014 14:19:13 -0400 Subject: [PATCH 166/194] Fixes typo in docs --- doc/usersguide/mashups.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usersguide/mashups.rst b/doc/usersguide/mashups.rst index ea220a7fa..e0c81a1fd 100644 --- a/doc/usersguide/mashups.rst +++ b/doc/usersguide/mashups.rst @@ -67,7 +67,7 @@ A Simple Example * Open :vtl:`brain_vistrail.vt` * Choose ``Save As`` and rename the file if you do not want to overwrite the original. - * Select the "counter 4" version + * Select the "contour 4" version * Press execute to ensure any necessary upgrades are made * Select ``Mashup`` from the toolbar. * In the Mashup Pipeline tab, look under ``vtkProperty`` :math:`\rightarrow` ``SetOpacity`` and double-click on ``Float``. From 1a23cd52382b6f84ce3721814ec95fd61961155b Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 17 Oct 2014 14:42:44 -0400 Subject: [PATCH 167/194] Fixes mac_update_bin.sh failing on spaces --- scripts/mac_update_bin.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/mac_update_bin.sh b/scripts/mac_update_bin.sh index 0c504a055..168889582 100755 --- a/scripts/mac_update_bin.sh +++ b/scripts/mac_update_bin.sh @@ -62,27 +62,27 @@ for dir in $OLD_DIRS do if [ -e "$2/$BIN_PATH/$dir" ] then - rm -r $2/$BIN_PATH/$dir + rm -r "$2/$BIN_PATH/$dir" fi done if [ -e "$2/$BIN_PATH/$ROOT_DIR_NAME" ] then - rm -r $2/$BIN_PATH/$ROOT_DIR_NAME + rm -r "$2/$BIN_PATH/$ROOT_DIR_NAME" fi -ln -s -f -F $1/$ROOT_DIR_NAME $2/$BIN_PATH/$ROOT_DIR_NAME +ln -s -f -F "$1/$ROOT_DIR_NAME" "$2/$BIN_PATH/$ROOT_DIR_NAME" if [ -e "$2/$BIN_PATH/../../run.py" ] then - rm $2/$BIN_PATH/../../run.py + rm "$2/$BIN_PATH/../../run.py" fi -ln -s -f -F $1/$ROOT_DIR_NAME/run.py $2/$BIN_PATH/../../run.py +ln -s -f -F "$1/$ROOT_DIR_NAME/run.py" "$2/$BIN_PATH/../../run.py" if [ -e "$2/../$EXAMPLES_DIR_NAME" ] then - rm -r $2/../$EXAMPLES_DIR_NAME + rm -r "$2/../$EXAMPLES_DIR_NAME" fi -ln -s -f -F $1/$EXAMPLES_DIR_NAME $2/../$EXAMPLES_DIR_NAME +ln -s -f -F "$1/$EXAMPLES_DIR_NAME" "$2/../$EXAMPLES_DIR_NAME" exit 0 From 65a6a50d7b7f4b25158b2c3f8024a1ee1df93153 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 17 Oct 2014 14:46:43 -0400 Subject: [PATCH 168/194] Fixes VisTrails.command file --- dist/mac/Input/README | 9 --------- dist/mac/Input/VisTrails.command | 8 +++++--- scripts/update_vistrails_command.py | 20 +++++++++----------- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/dist/mac/Input/README b/dist/mac/Input/README index baa25f76f..c30e91917 100644 --- a/dist/mac/Input/README +++ b/dist/mac/Input/README @@ -13,15 +13,6 @@ To run it, open the folder in finder and double-click on the VisTrails icon. Please see the About Message for Licensing and Disclaimers. -Using VisTrails.command ---------------------------- - -If you would like to see the messages sent to standard output while executing -VisTrails, you may use the VisTrails.command file. If you dragged the VisTrails -folder to a place other than /Applications folder, you might need to execute -path/to/VisTrails/scripts/update_vistrails_command.py script from where your -folder is located. - Release Name: v2.1.4 build 269e4808eca3 from v2.1 branch diff --git a/dist/mac/Input/VisTrails.command b/dist/mac/Input/VisTrails.command index 7a17279df..3de9a4637 100755 --- a/dist/mac/Input/VisTrails.command +++ b/dist/mac/Input/VisTrails.command @@ -2,7 +2,9 @@ #If you get an error saying: #Found another instance of VisTrails running #Sending parameters to main instance [] -#Failed: QLocalSocket::connectToServer: Connection refused +#Failed: QLocalSocket::connectToServer: Connection refused #make sure VisTrails is not already running and simply try to run the script again -#This might indicate that VisTrails did not quit properly -DYLD_LIBRARY_PATH= /Applications/VisTrails/VisTrails.app/Contents/MacOS/vistrails \ No newline at end of file +#This might indicate that VisTrails did not quit properly + +cd "$(dirname "$0")" +DYLD_LIBRARY_PATH= VisTrails.app/Contents/MacOS/vistrails diff --git a/scripts/update_vistrails_command.py b/scripts/update_vistrails_command.py index d59768cd8..d1ecdaf51 100755 --- a/scripts/update_vistrails_command.py +++ b/scripts/update_vistrails_command.py @@ -33,9 +33,9 @@ ## ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ## ############################################################################### -""" This script assumes that VisTrails.command file is located at ../ -Run this script after you copied the VisTrails folder and run from where it -is located. +""" This script assumes that VisTrails.command file is located at ../ +Run this script after you copied the VisTrails folder and run from where it +is located. """ import os, os.path @@ -43,21 +43,19 @@ if __name__ == "__main__": # get VisTrails folder vt_folder = os.path.abspath(os.path.join(os.path.dirname(__file__),'..')) - app_command = os.path.join(vt_folder,'VisTrails.app/Contents/MacOS/vistrails') command_file = os.path.join(vt_folder, 'VisTrails.command') - - file_header = """#This will execute VisTrails in a separate terminal window + + file_contents = """#This will execute VisTrails in a separate terminal window #If you get an error saying: #Found another instance of VisTrails running #Sending parameters to main instance [] -#Failed: QLocalSocket::connectToServer: Connection refused +#Failed: QLocalSocket::connectToServer: Connection refused #make sure VisTrails is not already running and simply try to run the script again -#This might indicate that VisTrails did not quit properly +#This might indicate that VisTrails did not quit properly +cd "$(dirname "$0")" +DYLD_LIBRARY_PATH= VisTrails.app/Contents/MacOS/vistrails """ - file_contents = "DYLD_LIBRARY_PATH= " + app_command f = open(command_file, 'w') - f.write(file_header) f.write(file_contents) f.close() - From 1e234d336e812aafa5a74fb551c92926c3d95edc Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 17 Oct 2014 15:12:36 -0400 Subject: [PATCH 169/194] Deprecates update_vistrails_command.py --- scripts/update_vistrails_command.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/update_vistrails_command.py b/scripts/update_vistrails_command.py index d1ecdaf51..b7a3da0e0 100755 --- a/scripts/update_vistrails_command.py +++ b/scripts/update_vistrails_command.py @@ -39,8 +39,13 @@ """ import os, os.path +import sys if __name__ == "__main__": + sys.stderr.write("Running the update_vistrails_command.py script is not required anymore.\n" + "It will be removed in future releases.\n") + # TODO : Remove this file after 2.2 + # get VisTrails folder vt_folder = os.path.abspath(os.path.join(os.path.dirname(__file__),'..')) command_file = os.path.join(vt_folder, 'VisTrails.command') From 377b80cfb62421819db4f11b8c5e1967e020f628 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 4 Aug 2014 11:40:37 -0400 Subject: [PATCH 170/194] Adds some error checking to the GUI --- vistrails/gui/vistrails_window.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vistrails/gui/vistrails_window.py b/vistrails/gui/vistrails_window.py index 4cf8e4b1c..cd988510c 100644 --- a/vistrails/gui/vistrails_window.py +++ b/vistrails/gui/vistrails_window.py @@ -1634,10 +1634,11 @@ def open_vistrail(self, locator, version=None, is_abstraction=False): """ old_view = self.getViewFromLocator(locator) - self.close_first_vistrail_if_necessary() - get_vistrails_application().open_vistrail(locator, version, - is_abstraction) + if not get_vistrails_application().open_vistrail(locator, version, + is_abstraction): + return None + self.close_first_vistrail_if_necessary() view = self.get_current_view() view.is_abstraction = view.controller.is_abstraction if not old_view: @@ -1745,6 +1746,8 @@ def open_vistrail_without_prompt(self, locator, version=None, if not locator.prompt_autosave(self): locator.clean_temporaries() view = self.open_vistrail(locator, version, is_abstraction) + if view is None: + return view.version_view.select_current_version() conf = get_vistrails_configuration() has_tag = len(view.controller.vistrail.get_tagMap()) > 0 @@ -1823,10 +1826,8 @@ def import_workflow_from_db(self): self.import_workflow(DBLocator) def open_workflow(self, locator): - self.close_first_vistrail_if_necessary() - get_vistrails_application().open_workflow(locator) - + self.close_first_vistrail_if_necessary() self.qactions['pipeline'].trigger() def close_vistrail(self, current_view=None, quiet=False): From d2ee4a438cff48e460847a16b372ae99ae937510 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 20 Oct 2014 15:08:53 +0200 Subject: [PATCH 171/194] Fixed interactive mode not working on Linux gui/application.py: init: Fixed typo "elif", should be "if". --- vistrails/gui/application.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index d40d5d50a..fd8d09b50 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -233,7 +233,7 @@ def init(self, optionsDict=None, args=[]): if not linux_default_application_set(): self.ask_update_default_application() - elif interactive: + if interactive: self.interactiveMode() else: r = self.noninteractiveMode() From 37eaf1dd4fac03b3f867ed155b7dd2098a21aab4 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Mon, 20 Oct 2014 18:07:52 +0200 Subject: [PATCH 172/194] Removed faulty upgrades in examples/usersguide/mashups.vt Ticket: 906 --- examples/usersguide/mashups.vt | Bin 540420 -> 527322 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/usersguide/mashups.vt b/examples/usersguide/mashups.vt index 3d0ad449b52f005fc1658613efbaf10eecc567e8..7722f63a2f6c33c8275831a2bb858bc7949223dd 100644 GIT binary patch delta 8452 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 From 0ade6e5580a1f37432083b127b74e38e4b8cb74e Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 17 Oct 2014 14:19:13 -0400 Subject: [PATCH 173/194] Fixes typo in docs --- doc/usersguide/mashups.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usersguide/mashups.rst b/doc/usersguide/mashups.rst index dc7461975..a2f0ac2d7 100644 --- a/doc/usersguide/mashups.rst +++ b/doc/usersguide/mashups.rst @@ -67,7 +67,7 @@ A Simple Example * Open :vtl:`brain_vistrail.vt` * Choose ``Save As`` and rename the file if you do not want to overwrite the original. - * Select the "counter 4" version + * Select the "contour 4" version * Press execute to ensure any necessary upgrades are made * Select ``Mashup`` from the toolbar. * In the Mashup Pipeline tab, look under ``vtkProperty`` :math:`\rightarrow` ``SetOpacity`` and double-click on ``Float``. From 03155bed629b0903be04331947695a9d0aebe6b0 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 20 Oct 2014 14:27:50 -0400 Subject: [PATCH 174/194] Adds missing tag "contour 4" to mashups.vt --- examples/usersguide/mashups.vt | Bin 527322 -> 527175 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/usersguide/mashups.vt b/examples/usersguide/mashups.vt index 7722f63a2f6c33c8275831a2bb858bc7949223dd..706857b77b321e300d71a0dbfc903ab3a162411b 100644 GIT binary patch delta 8009 zcmZXZbx_2A(;fF00m*Vd3ZiSYG(&Acl(W1qn$YQ7O z_s5wtbCStq=AP?GCX>vQOz!0j`r&l?kO-s*VUP_i z2=td334{p(fxPWKJl!qqoyJTIJhtTtg7@@GFJ8-#+U-G*aoS$Hk=TB7@6}wBx5iD# zYo_tOJf$@FHQii%kp2b>O~(==zP$h7z|p^3`pKtjF4o| zo}CYm54pD7pZ9D(egyRXz=u}g7k77m9-pqamRdwUu33MyZeKE$CXPF|1p=Spd>IXw zIYUvSe_i_Do9*t|Za()f()2yJcyujBA${AP@9~M!tX5xIfzRKuo#y5R^>%X8iuD*C z!E#ZzkK`t#Nw(r*acuZHrKMG}3ku*amq0&OfAeLFNgo$$FmU_mlJT*iAgZI`^g=h7 zqJ_fi%i0nCXRJiJr+(n#es2$W@=H7A?HFCz;sc&2>EG9$39u*XXLKh7=-hP-Zt`@2U^u45OLPTZG}g(cSv-=^QG zfITH~B0S%2$uT$Ksgm-L+5qr6{F?bGy&x2O?7_e;;~nV;e2c+x-UoYEtuS!aVcC4^ zKmjc0`mQ}o|8aiFvduUG%TojJX?wQ&BIf7@>sh!560?7vz+!0!ALcDPdV6ne`c3K^ z@VT!ZBuDdiK9Y-c)CArfadPjq`~j{TOo3r2x1L>+uM!h&{g1=W9jcL`SMJp|V!IAkSD z#lsPZZ&^)s1%9whb}pnCl-zDysRZ~la;zb51?7Caxp@`tyfRmbCv2JBs>x%2X_a~F z4gjnDFc0@*v8;()9a#%2BJ3PK{hXmEcE|T0FtDzik!=j8Y;dm3TrNj@<}L4McUAkO zw3s5(@HHyCUkPUs1V|BIhuJt~%Hx4u4X=P94g~30ps!w7JK-=&!w2O2p(84+-~Oqx zL?^w_d-Bo#Cv5QEUe5f7SV5Og
c?x9?Vbnv1c7i#Sp$#po*1Owq^+jC3-^7cge3 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 delta 8154 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 Date: Mon, 20 Oct 2014 22:29:04 +0200 Subject: [PATCH 175/194] Usersguide: Use "contour 3" in mashups example --- doc/usersguide/mashups.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usersguide/mashups.rst b/doc/usersguide/mashups.rst index a2f0ac2d7..63e87bb9a 100644 --- a/doc/usersguide/mashups.rst +++ b/doc/usersguide/mashups.rst @@ -67,7 +67,7 @@ A Simple Example * Open :vtl:`brain_vistrail.vt` * Choose ``Save As`` and rename the file if you do not want to overwrite the original. - * Select the "contour 4" version + * Select the "contour 3" version * Press execute to ensure any necessary upgrades are made * Select ``Mashup`` from the toolbar. * In the Mashup Pipeline tab, look under ``vtkProperty`` :math:`\rightarrow` ``SetOpacity`` and double-click on ``Float``. From 2f7069316eccd0a9742caf8adb6841d5712bd3ab Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 20 Oct 2014 17:03:05 -0400 Subject: [PATCH 176/194] Fixes VisTrails messages hitting the root logger New IPython version might set up a root logger. Its StreamHandler would thus handle VisTrails messages alongside our own handlers. --- vistrails/core/debug.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/core/debug.py b/vistrails/core/debug.py index d48826b2f..b53aec986 100644 --- a/vistrails/core/debug.py +++ b/vistrails/core/debug.py @@ -150,6 +150,7 @@ def make_logger(self, f=None): self.console.setFormatter(self.format) self.console.setLevel(logging.WARNING) self.logger.addHandler(self.console) + self.logger.propagate = False # if system.python_version() <= (2,4,0,'',0): # raise VersionTooLow('Python', '2.4.0') From 0614299178cd1bcd79a716ee353dfe5588f5e77d Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 22 Oct 2014 12:07:25 +0200 Subject: [PATCH 177/194] Fixed "Go to pipeline" in provenance view gui/collection/vis_log.py: - openVersion: The method had been moved but not changed to work at the new location. Ticket: 913 --- vistrails/gui/collection/vis_log.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/vistrails/gui/collection/vis_log.py b/vistrails/gui/collection/vis_log.py index bea40791b..bb3c22cfa 100644 --- a/vistrails/gui/collection/vis_log.py +++ b/vistrails/gui/collection/vis_log.py @@ -284,9 +284,15 @@ def addButtonsToToolbar(self): self.openVersionAction) def openVersion(self): - if not hasattr(self.parentItem, 'item'): + + parent = self.executionList.selectedItems() + if len(parent) != 1: return - version = self.parentItem.item.wf_item.parent_version + parent = parent[0] + while not isinstance(parent.execution, WorkflowExec): + parent = parent.parent() + + version = parent.execution.parent_version from vistrails.gui.vistrails_window import _app _app.get_current_view().version_selected(version, True) self.controller.recompute_terse_graph() From 2b36fb21dcb69aa40c11148c021c7caa6ee89923 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 22 Oct 2014 12:24:22 +0200 Subject: [PATCH 178/194] list-handling.py: Updated log version 1.0.4 --- examples/list-handling.vt | Bin 2995 -> 2995 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/list-handling.vt b/examples/list-handling.vt index fb58d142a52ecde60a485bf61311a9905f420b43..54d7bd517dc1dc64f96f9cab67a79be6c3c394af 100644 GIT binary patch delta 1646 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 Date: Wed, 22 Oct 2014 12:25:32 +0200 Subject: [PATCH 179/194] translateLog: Use the log id_scope and not the global vistrail scope --- vistrails/db/versions/v1_0_4/translate/v1_0_3.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py index 53b7d70e1..b5a626c2d 100644 --- a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py +++ b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py @@ -89,7 +89,7 @@ def update_workflow(old_obj, translate_dict): return workflow def translateLog(_log): - global id_scope + id_scope = _log.id_scope def update_loop_execs(old_obj, translate_dict): if len(old_obj.db_loop_execs) == 0: return [] @@ -107,6 +107,7 @@ def update_loop_execs(old_obj, translate_dict): item_execs.append(DBGroupExec.update_version(item_exec, translate_dict)) # skip DBLoopExecs + print "new_iter", loop_exec.db_iteration new_iter = DBLoopIteration(item_execs=item_execs, id=id_scope.getNewId(DBLoopIteration.vtType), ts_start=loop_exec.db_ts_start, From c814111037bc9e865b08624d1597c325e20bc744 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Wed, 22 Oct 2014 13:48:13 +0200 Subject: [PATCH 180/194] Removes print statement --- vistrails/db/versions/v1_0_4/translate/v1_0_3.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py index b5a626c2d..2c4484e93 100644 --- a/vistrails/db/versions/v1_0_4/translate/v1_0_3.py +++ b/vistrails/db/versions/v1_0_4/translate/v1_0_3.py @@ -107,7 +107,6 @@ def update_loop_execs(old_obj, translate_dict): item_execs.append(DBGroupExec.update_version(item_exec, translate_dict)) # skip DBLoopExecs - print "new_iter", loop_exec.db_iteration new_iter = DBLoopIteration(item_execs=item_execs, id=id_scope.getNewId(DBLoopIteration.vtType), ts_start=loop_exec.db_ts_start, From 8679363df0aa4578a1b53554d9b5fdf1854353bd Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Thu, 23 Oct 2014 19:46:56 +0200 Subject: [PATCH 181/194] Fixed ports not being marked as set We cannot compare with the current module because it is mutable. This also created problems with updating the inline widgets. gui/pipeline_view.py: - functions_have_been_deleted: - moduleFunctionsHaveChanged: Compare using stored function names - function_changed: Update ports - update_module_functions: Update widget values --- vistrails/gui/pipeline_view.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/vistrails/gui/pipeline_view.py b/vistrails/gui/pipeline_view.py index 845bbe7da..15a18092d 100644 --- a/vistrails/gui/pipeline_view.py +++ b/vistrails/gui/pipeline_view.py @@ -1149,17 +1149,14 @@ def module_text_has_changed(m1, m2): def functions_have_been_deleted(self, core_module): # check if a visible function has been deleted - before = set(f.name for f in - self.module.functions) + before = self._cur_function_names after = set(f.name for f in core_module.functions) return (before - after) & core_module.editable_input_ports def moduleFunctionsHaveChanged(self, core_module): - m1 = self.module m2 = core_module - f1_names = set(f.name for f in m1.functions) f2_names = set(f.name for f in m2.functions) - return (len(f1_names ^ f2_names) > 0) + return (len(self._cur_function_names ^ f2_names) > 0) def update_function_ports(self, core_module=None): if core_module is None: @@ -1199,6 +1196,8 @@ def update_function_ports(self, core_module=None): item = self.getInputPortItem(f_spec) if item is not None: item.connect() + self.module = core_module + def update_function_values(self, core_module): """ Updates widget values if they have changed @@ -1599,13 +1598,15 @@ def function_changed(self, name, values): """ controller = self.scene().controller - # FIXME: Why is self.module not up-to-date? module = controller.current_pipeline.modules[self.module.id] controller.update_function(module, name, values) - module = controller.current_pipeline.modules[self.module.id] + + if self.moduleFunctionsHaveChanged(module): + self.update_function_ports(module) if self.isSelected(): from vistrails.gui.vistrails_window import _app + module = controller.current_pipeline.modules[self.module.id] _app.notify('module_changed', module) def create_shape_from_fringe(self, fringe): @@ -2226,6 +2227,9 @@ def update_module_functions(self, pipeline, m_id): if self.modules[m_id].functions_have_been_deleted(module): self.recreate_module(pipeline, m_id) return + + self.modules[m_id].update_function_values(module) + if self.modules[m_id].moduleFunctionsHaveChanged(module): self.modules[m_id].update_function_ports(module) @@ -2294,6 +2298,7 @@ def setupScene(self, pipeline): nm = pipeline.modules[m_id] if tm_item.moduleHasChanged(nm): self.recreate_module(pipeline, m_id) + tm_item = self.modules[m_id] elif tm_item.moduleFunctionsHaveChanged(nm): tm_item.update_function_ports(pipeline.modules[m_id]) tm_item.update_function_values(pipeline.modules[m_id]) @@ -2307,7 +2312,6 @@ def setupScene(self, pipeline): else: tm_item.setGhosted(False) tm_item.setBreakpoint(nm.is_breakpoint) - tm_item.module = nm # create new connection shapes for c_id in connections_to_be_added: From 9cf0aabed7d698e6342b52abbc68ea9866890770 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 24 Oct 2014 12:45:33 +0200 Subject: [PATCH 182/194] Removed package JobSubmission --- vistrails/packages/JobSubmission/__init__.py | 34 -- .../JobSubmission/common_definitions.py | 51 --- vistrails/packages/JobSubmission/init.py | 315 ------------------ vistrails/packages/JobSubmission/machine.py | 31 -- 4 files changed, 431 deletions(-) delete mode 100644 vistrails/packages/JobSubmission/__init__.py delete mode 100644 vistrails/packages/JobSubmission/common_definitions.py delete mode 100644 vistrails/packages/JobSubmission/init.py delete mode 100644 vistrails/packages/JobSubmission/machine.py diff --git a/vistrails/packages/JobSubmission/__init__.py b/vistrails/packages/JobSubmission/__init__.py deleted file mode 100644 index 1f1fefb8f..000000000 --- a/vistrails/packages/JobSubmission/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -import sys -import vistrails.core -## -# TODO list: -# (V) 1) Write the JobInfo module -# (V) 2) Make implement generator functionality -# (V) 4) write generator and exporter functions -# (V) 9) Move generators.py, exporters.py -> containers.py -# (V) 10) auto_generated_types -> generator_definitions -# (V) 11) Local file transfer fails when no visible files are present -# 12) Qprint -> annotate -# 13) Disconnect and kill process if queue exist -# 14) Write the clean up and add it to run job -# 15) There is an error with terminal selection - - -## TODO: -# 1) Fix the last things whatever they are -# 9) Pull the git repository -# 10) Add the package and update - - -### TESTING -# 1) Test collective operations -# 2) check wether it uploads anything -# 3) Try to see what happens when things are connected different from what you are supposed to do -# 4) Test queue reusing - something tells me that this might fail -version = '0.2' -identifier = 'org.comp-phys.batchq' -name = 'Job Submission' - -def package_requirements(): - from vistrails.core.requirements import require_python_module - require_python_module('batchq') diff --git a/vistrails/packages/JobSubmission/common_definitions.py b/vistrails/packages/JobSubmission/common_definitions.py deleted file mode 100644 index b1ede6d0b..000000000 --- a/vistrails/packages/JobSubmission/common_definitions.py +++ /dev/null @@ -1,51 +0,0 @@ -from batchq import queues -from batchq.core.batch import BatchQ -from batchq.queues import containers - -from vistrails.core.modules.basic_modules import File, Directory -from vistrails.core.system import get_vistrails_basic_pkg_id - -### -# Categories -categories = { -'basic_submission': 'Basic Submission', -'job_collective_operations': "Collective operations", -'low_level': "Low-level operations" -} -## -# Helper functions -name_formatter = lambda x: x -capitalise = lambda x: x[0].upper() + x[1:].lower() -remove_underscore = lambda j, name: j.join([capitalise(a) for a in name.split("_")]) - -basic_pkg = get_vistrails_basic_pkg_id() -type_conversion = {str:'(%s:String)' % basic_pkg, bool:'(%s:Boolean)' % basic_pkg, int:'(%s:Integer)' % basic_pkg, float:'(%s:Float)' % basic_pkg} - -batch_queue_list = [(a, getattr(queues,a)) for a in dir(queues) if isinstance(getattr(queues,a),type) and issubclass(getattr(queues,a),BatchQ) ] - - -def create_directory(self, generator = None): - x = self.interpreter.filePool.create_directory() - return x.name - -def create_file(self, contents, generator = None): - ext='' - if not generator is None: - ext = generator.extension - f = self.interpreter.filePool.create_file(suffix=ext) - h = open(f.name,'w') - h.write(contents) - h.close() - return f, f.name - -def directory_wrapper(self, path, generator = None): - ret = Directory.translate_to_python(path) - return ret - - -generator_definitions = { containers.DirectoryName:create_directory } - -exporter_definitions = { containers.TextFile: ('(%s:File)' % basic_pkg, - create_file), - containers.DirectoryName: ('(%s:Directory)' % basic_pkg, - directory_wrapper)} diff --git a/vistrails/packages/JobSubmission/init.py b/vistrails/packages/JobSubmission/init.py deleted file mode 100644 index fb4fd01e2..000000000 --- a/vistrails/packages/JobSubmission/init.py +++ /dev/null @@ -1,315 +0,0 @@ -from common_definitions import categories, capitalise, \ - type_conversion, batch_queue_list, remove_underscore, name_formatter, \ - generator_definitions, exporter_definitions -from vistrails.core.modules.vistrails_module import Module, ModuleError, \ - NotCacheable, InvalidOutput, ModuleSuspended -from batchq.core.batch import BatchQ, Function, Property, FunctionMessage, \ - Collection, Exportable -from batchq.queues import NoHUP -import copy -from machine import module_definitions, Machine -_modules = module_definitions - - - -####################################### -## Creating queues/"machines" -####################################### - -## Stores exportable properties -## (property_name, vistrails_type, port visibility) for -## each key = property_name -exp_job_properties = {} - -## Stores all non-auto-generated -## properties (property_name, vistrails type, port visibility) -## for each key = property_name -in_job_properties = {} - -## Stores property for each key = property_name -job_properties = {} - -## Stores (property_name, vistrails type, generator) -## for each key = property_name -auto_job_properties = {} - -operations = {} -operations_types = {} -operations_highlevel = {} -for queue_name, queue in batch_queue_list: - - ## Generating queue classes - properties = [] - for prop_name in dir(queue): - if isinstance(getattr(queue,prop_name), Property): - attr = getattr(queue,prop_name) - - ## Properties which are machine dependent - if attr.verbose and attr.invariant: - properties.append( (prop_name,type_conversion[attr.type]) ) - - ## Properties which are job dependent - if not attr.password and not attr.invariant: - job_properties[prop_name] = attr - - # Sorting auto generated fields - if attr.generator is None: - in_job_properties[prop_name] = (prop_name, - type_conversion[attr.type], - not attr.verbose) - elif attr.generator.type in generator_definitions: - - auto_job_properties[prop_name] = (prop_name, - type_conversion[attr.type], - generator_definitions[attr.generator.type]) - - # Sorting exportable fields - if attr.exporter is None: - exp_job_properties[prop_name] = (prop_name,type_conversion[attr.type], - not attr.verbose) - else: - t, _ = exporter_definitions[attr.exporter.type] - exp_job_properties[prop_name] = (prop_name, t, not attr.verbose) - - ## Definiting machines/queuing systems - members = { '_input_ports' : [('inherits', - '(org.comp-phys.batchq:Machine)', - True)] + properties, - 'queue_cls' : queue, - '_output_ports': [('machine', - '(org.comp-phys.batchq:Machine)')], - 'queue' : None - } - - if hasattr(queue, "__descriptive_name__"): - descriptive_name = queue.__descriptive_name__ - else: - descriptive_name = capitalise(queue_name) - - cls = type(name_formatter(descriptive_name), (Machine,), members) - - ## Extracing all functions from the queues - these will be used later - ## for module generation - functions = [(a,getattr(queue,a)) for a in dir(queue) - if isinstance(getattr(queue,a), Function) and - not a.startswith("_") and getattr(queue,a).enduser ] - - for f, fnc in functions: - t = fnc.type - if not f in operations: - operations[f] = [] - operations_types[f] = [] - operations_highlevel[f] = False - - operations[f].append(queue_name) - operations_highlevel[f] = operations_highlevel[f] or fnc.highlevel - - if not t in operations_types[f]: operations_types[f].append(t) - - _modules.append((cls,{'namespace':categories['basic_submission']})) - -functions = dict(functions) - -####################################### -## Basic Job and Job creation module -####################################### -class Job(Machine): - pass -_modules.append((Job, {'abstract':True})) - - -def compute_jobpreparation(self): - mac = self.get_input("machine") - queue, cls = mac.queue, mac.queue_cls - kwargs = self.get_kwargs(cls) - - for f, t, generator in auto_job_properties.itervalues(): - kwargs[f] = generator(self) - - self.queue = cls(queue, **kwargs) - - self.set_output("job", self) - -dct = {'_input_ports' : [b for b in in_job_properties.itervalues()] \ - + [('machine', '(org.comp-phys.batchq:Machine)'),], - '_output_ports' : [('job', '(org.comp-phys.batchq:Job)'),], - 'compute' : compute_jobpreparation - } - -PrepareJob = type(name_formatter("Prepare Job"), (Job,), dct) - -_modules += [(PrepareJob, {'namespace':categories['basic_submission']})] - -####################################### -## Creating functions -####################################### -class JobOperation(NotCacheable,Module): - pass - -def joboperation_compute(self): - if self.has_input("job"): - job = self.get_input('job') - queue = job.queue -# print "TERMINAL ID", id(queue.terminal), id(queue.local_terminal) - self.anno_counter = 1 - self.anno_dict = {} - def annotate(fncself, *args, **kwargs): - if len(args) == 1: - self.anno_dict.update( {"note%d"%self.anno_counter: args[0]} ) - elif len(kwargs) == 0: - self.anno_dict.update( {"note%d"%self.anno_counter:" ".join(args)} ) - else: - self.anno_dict.updateself.annotate( kwargs ) - self.anno_counter +=1 - return None - function = getattr(queue, self.function_name) - pnt = function.Qprint - function.Qprint = annotate - ret = function().val() - function.Qprint = pnt - - ## TODO: annotate does not seem to work - self.annotate(self.anno_dict) - - if isinstance(ret, FunctionMessage) and ret.code != 0: - raise ModuleSuspended(self, ret.message, queue) if ret.code > 0 \ - else ModuleError(self,ret.message) - - self.set_output("job", job) - self.set_output("result", ret) - self.set_output("string", str(ret)) - self.set_output("operation", self) - -_modules+=[(JobOperation,{'abstract':True})] - -members = [ ('_input_ports', [('job', '(org.comp-phys.batchq:Job)'),] ), - ('_output_ports', [('job', '(org.comp-phys.batchq:Job)')] ), - ('compute', joboperation_compute)] - -low_level_functions = {} -high_level_functions = {} -high_level_modules = [] -for name in operations.iterkeys(): - for t in operations_types[name]: - dct = dict(copy.deepcopy(members)+[('function_name',name)]) - if not t is None and not t in [FunctionMessage]: - dct['_output_ports'].append( ('result', type_conversion[t]) ) - - # TODO: Multiple types yet to be implemented - ## append = "" if len(operations_types[name]) == 1 else capiltalise(str(t)) - namespace = categories['low_level'] - - descriptive_name = remove_underscore(" ",name) - if t in [str,int, float, bool]: - if functions[name].exporter is None: - low_level_functions[name] = (name,type_conversion[t]) - else: - tt, _ = exporter_definitions[functions[name].exporter.type] - low_level_functions[name] = (name,tt) - - if t in [bool]: - descriptive_name = "Is" + remove_underscore("",name) - else: - descriptive_name = "Get" + remove_underscore("",name) - - if not operations_highlevel[name]: - dct['_output_ports'].append( ('operation', '(org.comp-phys.batchq:JobOperation)') ) - cls = ( type(name_formatter(descriptive_name), - (JobOperation,),dct), - {'namespace': namespace} ) - _modules.append(cls) - else: - namespace = categories['basic_submission'] - if t in type_conversion: - high_level_functions[name] = (name,type_conversion[t]) - else: - high_level_functions[name] = (name,None) - high_level_modules.append((descriptive_name, dct, namespace)) -# namespace = categories['basic_submission'] - - -def jobinfo_compute(self): - job = self.get_input("job") - queue = job.queue - for function in self.queue_functions: - name = function[0] - function =getattr(queue, name) - ret =function().val() - if function.exporter is None: - self.set_output(name, ret) - else: - ## If the field is exported to a vistrails - ## type the conversion is done here - exporter = function.exporter - _, exp = exporter_definitions[exporter.type] - ret = function.exporter.as_str() - self.set_output(name, exp(self,ret)) - - for prop in self.queue_properties: - name = prop[0] - field = queue.fields[name] - ret = field.get() - if field.exporter is None: - self.set_output(name, ret) - else: - exporter = field.exporter - _, exp = exporter_definitions[exporter.type] - - ret = exporter.as_str() - self.set_output(name, exp(self,ret)) - - self.set_output("job", job) - - -queue_properties = [b for b in exp_job_properties.itervalues()] -queue_functions = [b for b in low_level_functions.itervalues()] -dct = {'_input_ports': [('job', '(org.comp-phys.batchq:Job)'),], - '_output_ports': queue_properties + queue_functions, - 'compute': jobinfo_compute, - 'queue_properties': queue_properties, - 'queue_functions': queue_functions} -JobInfo = type(name_formatter("Job Info"), (NotCacheable,Job,), dct) - -_modules += [(JobInfo, {'namespace':categories['basic_submission']})] - -#### -# High-level function -def highlevel_compute(self): - joboperation_compute(self) - jobinfo_compute(self) - -for descriptive_name, dct, namespace in high_level_modules: - dct['compute'] = highlevel_compute - dct['is_cacheable'] = lambda self: True - _modules.append((type(name_formatter(descriptive_name), (JobInfo,),dct), {'namespace': namespace} )) - -###### -## Creating collective operations -class CollectiveOperation(NotCacheable,Module): - pass -_modules.append((CollectiveOperation, {'abstract':True})) - -def collective_compute(self): - job = self.get_input('job') - operation = self.get_input('operation') - col = Collection() - col += job.queue - - col2 = getattr(col, self.collection_name)() - rets = getattr(col2, operation.function_name)().as_list() - ## TODO: ad results - self.set_output('job', job) - -collective = dict([(name,getattr(Collection, name)) for name in dir(Collection) if isinstance(getattr(Collection, name),Exportable)]) -members = [ ('_input_ports', [('operation', '(org.comp-phys.batchq:JobOperation)'),('job', '(org.comp-phys.batchq:Job)')] ), - ('_output_ports', [('job', '(org.comp-phys.batchq:Job)')] ), - ('compute', collective_compute ), - ('collection_name', name)] # FIXME : there is no way "name" is what you meant here -namespace = categories['job_collective_operations'] -for name, func in collective.iteritems(): - dct = dict(members) - _modules.append((type( "".join([capitalise(a) for a in name.split("_")]) , (CollectiveOperation,),dct),{'namespace':namespace} )) - - - -_modules = _modules diff --git a/vistrails/packages/JobSubmission/machine.py b/vistrails/packages/JobSubmission/machine.py deleted file mode 100644 index 46f69d3c8..000000000 --- a/vistrails/packages/JobSubmission/machine.py +++ /dev/null @@ -1,31 +0,0 @@ -from vistrails.core.modules.vistrails_module import Module -from batchq.core.batch import Property -QUEUE_REGISTER = {} -#### -# Machine definition -class Machine(Module): - def get_kwargs(self, cls): - - ret = dict([(a[0],self.get_input(a[0])) for a in self._input_ports if self.has_input(a[0]) and a[0] in cls.__new_fields__ and isinstance(cls.__new_fields__[a[0]],Property)]) - ret.update({'q_interact': False}) - return ret - - def compute(self): - global QUEUE_REGISTER - kwargs = self.get_kwargs(self.queue_cls) - inherits = self.get_input('inherits').queue if self.has_input('inherits') else None - -# never disconnect because we want to check jobs later -# if self.signature in QUEUE_REGISTER: -# q = QUEUE_REGISTER[self.signature] -# if hasattr(q, "disconnect"): -# q.disconnect() - - - self.queue = self.queue_cls(**kwargs) if inherits is None else self.queue_cls(inherits, **kwargs) - - QUEUE_REGISTER[str(self.signature)] = self.queue - - self.set_output("machine", self) - -module_definitions = [(Machine,{'abstract':True})] From ebc1f060f5dc8110a2e3e4637eca2a5384b34a44 Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 24 Oct 2014 14:20:18 +0200 Subject: [PATCH 183/194] Fixed get_module_package not working on dynamic packages core/modules/module_registry.py: - get_module_package: prefix and codepath can be None for dynamic packages --- vistrails/core/modules/module_registry.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vistrails/core/modules/module_registry.py b/vistrails/core/modules/module_registry.py index f695a15b4..57898feff 100644 --- a/vistrails/core/modules/module_registry.py +++ b/vistrails/core/modules/module_registry.py @@ -2034,7 +2034,9 @@ def get_module_package(self, identifier, name, namespace): def get_configuration_widget(self, identifier, name, namespace): descriptor = self.get_descriptor_by_name(identifier, name, namespace) package = self.get_package_by_name(identifier) - prefix = package.prefix + package.codepath + prefix = None + if package.prefix is not None and package.codepath is not None: + prefix = package.prefix + package.codepath cls = descriptor.configuration_widget() return vistrails.core.modules.utils.load_cls(cls, prefix) From cf9646962a39adb8abb44846b39af28d3f2ad9ed Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 24 Oct 2014 16:53:17 +0200 Subject: [PATCH 184/194] Moved non-working Web Service examples to examples-internal --- .../EMBOSS_webservices.vt | Bin {examples => examples-internal}/KEGGPathway.vt | Bin .../KEGG_SearchEntities_webservice.vt | Bin {examples => examples-internal}/KEGG_webservices.vt | Bin 4 files changed, 0 insertions(+), 0 deletions(-) rename {examples => examples-internal}/EMBOSS_webservices.vt (100%) rename {examples => examples-internal}/KEGGPathway.vt (100%) rename {examples => examples-internal}/KEGG_SearchEntities_webservice.vt (100%) rename {examples => examples-internal}/KEGG_webservices.vt (100%) diff --git a/examples/EMBOSS_webservices.vt b/examples-internal/EMBOSS_webservices.vt similarity index 100% rename from examples/EMBOSS_webservices.vt rename to examples-internal/EMBOSS_webservices.vt diff --git a/examples/KEGGPathway.vt b/examples-internal/KEGGPathway.vt similarity index 100% rename from examples/KEGGPathway.vt rename to examples-internal/KEGGPathway.vt diff --git a/examples/KEGG_SearchEntities_webservice.vt b/examples-internal/KEGG_SearchEntities_webservice.vt similarity index 100% rename from examples/KEGG_SearchEntities_webservice.vt rename to examples-internal/KEGG_SearchEntities_webservice.vt diff --git a/examples/KEGG_webservices.vt b/examples-internal/KEGG_webservices.vt similarity index 100% rename from examples/KEGG_webservices.vt rename to examples-internal/KEGG_webservices.vt From 3b359b736602106169d88d9f370d449e9313508c Mon Sep 17 00:00:00 2001 From: Tommy Ellqvist Date: Fri, 24 Oct 2014 16:53:34 +0200 Subject: [PATCH 185/194] chebi_webservice.vt: Use List and not Module when connecting to List. Module type now have list depth 0, so it cannot take a List. --- examples/chebi_webservice.vt | Bin 62684 -> 269647 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/chebi_webservice.vt b/examples/chebi_webservice.vt index 88dcaf12052e9c8e2216a5b0304d1c19e7d1b387..1138dc7bd5ed24c4a2e95a19d26f2bd01a2b6394 100644 GIT binary patch literal 269647 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
  • VJB0^lNc2Suz2?Hp51)p2GfOYCt7 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 literal 62684 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
    X#;JWz!t?;#5rBKR;vR`?~ky+oWbA->F9#*C514 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 O(fYjx;BNnM^}hgMY7j91 From 5a07ed5eeab0d4e03887921e4d5c44def3c36ef5 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 27 Oct 2014 16:38:51 -0400 Subject: [PATCH 186/194] Removes some scary str() calls --- vistrails/core/interpreter/cached.py | 2 +- vistrails/core/vistrail/job.py | 4 ++-- vistrails/gui/job_monitor.py | 2 +- vistrails/gui/module_options.py | 11 +++++------ 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/vistrails/core/interpreter/cached.py b/vistrails/core/interpreter/cached.py index 94b90c4e7..1689a569f 100644 --- a/vistrails/core/interpreter/cached.py +++ b/vistrails/core/interpreter/cached.py @@ -128,7 +128,7 @@ def _handle_suspended(self, obj, error): name = reg.get_descriptor(obj.__class__).name iteration = self.log.get_iteration_from_module(obj) if iteration is not None: - name += '/' + str(iteration) + name += '/%d' % iteration # add to parent list for computing the module tree later error.name = name jm.addParent(error) diff --git a/vistrails/core/vistrail/job.py b/vistrails/core/vistrail/job.py index d0cdb5858..c21595f18 100644 --- a/vistrails/core/vistrail/job.py +++ b/vistrails/core/vistrail/job.py @@ -172,7 +172,7 @@ def __init__(self, version, name='untitled', id=None, user=None, self.name = name self.id = id if id else str(uuid1()) self.user = getpass.getuser() - self.start = start if start else str(datetime.datetime.now()) + self.start = start if start else datetime.datetime.now().isoformat() self.jobs = jobs if jobs else {} # parent modules are stored as temporary exceptions self.parents = {} @@ -231,7 +231,7 @@ def __init__(self, id, parameters, name='', start=None, finished=False): self.id = id self.parameters = parameters self.name = name - self.start = start if start else str(datetime.datetime.now()) + self.start = start if start else datetime.datetime.now().isoformat() self.finished = finished self.updated = True diff --git a/vistrails/gui/job_monitor.py b/vistrails/gui/job_monitor.py index b9d4c01fe..2a4ea61d4 100644 --- a/vistrails/gui/job_monitor.py +++ b/vistrails/gui/job_monitor.py @@ -348,7 +348,7 @@ def addJobRec(self, obj, parent_id=None): workflow_item = self.workflowItems[workflow.id] # top down. Base is assumed to have been added already base = (workflow_item.intermediates[parent_id] if parent_id is not None - else workflow_item) + else workflow_item) id = obj.module.signature if obj.children: # add parent items and their children diff --git a/vistrails/gui/module_options.py b/vistrails/gui/module_options.py index 6cdb4e14a..43ed178db 100644 --- a/vistrails/gui/module_options.py +++ b/vistrails/gui/module_options.py @@ -383,17 +383,16 @@ def updateVistrail(self): _while and self.feedOutputEdit.text())) jobCache = self.jobCacheButton.isChecked() values.append((ModuleControlParam.JOB_CACHE_KEY, - jobCache and str(jobCache))) + [False, 'true'][jobCache])) for name, value in values: if value: - if not self.module.has_control_parameter_with_name(name) or \ - value != \ - self.module.get_control_parameter_by_name(name).value: + if (not self.module.has_control_parameter_with_name(name) or + value != self.module.get_control_parameter_by_name(name).value): if self.module.has_control_parameter_with_name(name): self.controller.delete_control_parameter(name, - self.module.id) + self.module.id) self.controller.add_control_parameter((name, value), - self.module.id) + self.module.id) elif self.module.has_control_parameter_with_name(name): self.controller.delete_control_parameter(name, self.module.id) return True From d76a9fdbc640475fc70f2b1d0c9a9cb44643cfae Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Mon, 27 Oct 2014 17:21:41 -0400 Subject: [PATCH 187/194] Removes __magic__ methods --- vistrails/core/configuration.py | 18 +++++++++--------- vistrails/core/modules/config.py | 3 +-- vistrails/core/vistrail/controller.py | 2 +- vistrails/core/vistrail/job.py | 12 ++++++------ 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/vistrails/core/configuration.py b/vistrails/core/configuration.py index 6ec364a87..cc27bc534 100644 --- a/vistrails/core/configuration.py +++ b/vistrails/core/configuration.py @@ -1235,7 +1235,7 @@ def __init__(self, **kwargs): self.db_add_config_key(key) # InstanceObject.__init__(self, *args, **kwargs) - self.__subscribers__ = {} + self._subscribers = {} self.vistrails = [] def __copy__(self): @@ -1247,7 +1247,7 @@ def do_copy(self, new_ids=False, id_scope=None, id_remap=None): cp._in_init = False cp.__class__ = ConfigurationObject cp._unset_keys = copy.copy(self._unset_keys) - cp.__subscribers__ = copy.copy(self.__subscribers__) + cp._subscribers = copy.copy(self._subscribers) cp.vistrails = copy.copy(self.vistrails) return cp @@ -1257,7 +1257,7 @@ def convert(_config_obj): _config_obj.__class__ = ConfigurationObject for _key in _config_obj.db_config_keys: ConfigKey.convert(_key) - _config_obj.__subscribers__ = {} + _config_obj._subscribers = {} _config_obj._unset_keys = {} _config_obj.vistrails = [] @@ -1283,7 +1283,7 @@ def __getattr__(self, name): raise AttributeError(name) def __setattr__(self, name, value): - if name == '__subscribers__' or name == '_unset_keys' or name == '_in_init' or name == 'is_dirty' or name == 'vistrails' or self._in_init: + if name == '_subscribers' or name == '_unset_keys' or name == '_in_init' or name == 'is_dirty' or name == 'vistrails' or self._in_init: object.__setattr__(self, name, value) else: if name in self.db_config_keys_name_index: @@ -1307,16 +1307,16 @@ def __setattr__(self, name, value): del self._unset_keys[name] config_key = ConfigKey(name=name, value=value) self.db_add_config_key(config_key) - if name in self.__subscribers__: + if name in self._subscribers: to_remove = [] - for subscriber in self.__subscribers__[name]: + for subscriber in self._subscribers[name]: obj = subscriber() if obj: obj(name, value) else: to_remove.append(obj) for ref in to_remove: - self.__subscribers__[name].remove(ref) + self._subscribers[name].remove(ref) def __eq__(self, other): if type(self) != type(other): @@ -1360,13 +1360,13 @@ def update(self, other): def unsubscribe(self, field, callable_): """unsubscribe(field, callable_): remove observer from subject """ - self.__subscribers__[field].remove(weakref.ref(callable_)) + self._subscribers[field].remove(weakref.ref(callable_)) def subscribe(self, field, callable_): """subscribe(field, callable_): call observer callable_ when self.field is set. """ - append_to_dict_of_lists(self.__subscribers__, field, + append_to_dict_of_lists(self._subscribers, field, Ref(callable_)) def has(self, key): diff --git a/vistrails/core/modules/config.py b/vistrails/core/modules/config.py index 3d2471519..af503f36f 100644 --- a/vistrails/core/modules/config.py +++ b/vistrails/core/modules/config.py @@ -44,8 +44,7 @@ def get_field_name(v): return v[0] def namedtuple(typename, fields): - field_names = [f[0][0] if isinstance(f[0], tuple) else f[0] - for f in fields] + field_names = [get_field_name(f) for f in fields] default_values = [] default_found = False field_types = [] diff --git a/vistrails/core/vistrail/controller.py b/vistrails/core/vistrail/controller.py index 4ad80e07e..9d152fb15 100644 --- a/vistrails/core/vistrail/controller.py +++ b/vistrails/core/vistrail/controller.py @@ -3657,7 +3657,7 @@ def write_vistrail(self, locator, version=None, export=False): # Save jobs as annotation if self.jobMonitor.workflows: self.vistrail.set_annotation('__jobs__', - self.jobMonitor.__serialize__()) + self.jobMonitor.serialize()) else: self.vistrail.set_annotation('__jobs__', '') # FIXME create this on-demand? diff --git a/vistrails/core/vistrail/job.py b/vistrails/core/vistrail/job.py index c21595f18..458eb9880 100644 --- a/vistrails/core/vistrail/job.py +++ b/vistrails/core/vistrail/job.py @@ -281,7 +281,7 @@ def __init__(self, json_string=None): self.jobs = {} self.callback = None if json_string is not None: - self.__unserialize__(json_string) + self.unserialize(json_string) def setCallback(self, callback=None): """ setCallback(callback: class) -> None @@ -293,8 +293,8 @@ def setCallback(self, callback=None): ############################################################################## # Running Workflows - def __serialize__(self): - """ __serialize__() -> None + def serialize(self): + """ serialize() -> None serializes the running jobs to json """ @@ -312,8 +312,8 @@ def __serialize__(self): return json.dumps(_dict) - def __unserialize__(self, s): - """ __unserialize__(s: str) -> None + def unserialize(self, s): + """ unserialize(s: str) -> None unserializes the running jobs from json """ @@ -614,7 +614,7 @@ def test_job(self): # test serialization jm.addWorkflow(workflow1) jm.addWorkflow(workflow2) - jm.__unserialize__(jm.__serialize__()) + jm.unserialize(jm.serialize()) self.assertIn(workflow1.id, jm.workflows) self.assertIn(workflow2.id, jm.workflows) self.assertEqual(workflow1, jm.workflows[workflow1.id]) From 06e8235834480a6c18d1bb81b1479a94bb3b2eac Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 29 Oct 2014 14:46:47 -0400 Subject: [PATCH 188/194] Fixes types in vistrails_module.py doc Fixes 241a7700. PyCharm no longers highlight every parameter passed to these Module methods. --- vistrails/core/modules/vistrails_module.py | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/vistrails/core/modules/vistrails_module.py b/vistrails/core/modules/vistrails_module.py index 78f6afb58..416e5e1cd 100644 --- a/vistrails/core/modules/vistrails_module.py +++ b/vistrails/core/modules/vistrails_module.py @@ -1169,9 +1169,9 @@ def get_input(self, port_name, allow_default=True): """Returns the value coming in on the input port named **port_name**. :param port_name: the name of the input port being queried - :type port_name: String + :type port_name: str :param allow_default: whether to return the default value if it exists - :type allow_default: Boolean + :type allow_default: bool :returns: the value being passed in on the input port :raises: ``ModuleError`` if there is no value on the port (and no default value if allow_default is True) @@ -1214,7 +1214,7 @@ def get_input_list(self, port_name): this method obtains all the values being passed in. :param port_name: the name of the input port being queried - :type port_name: String + :type port_name: str :returns: a list of all the values being passed in on the input port :raises: ``ModuleError`` if there is no value on the port """ @@ -1277,7 +1277,7 @@ def set_output(self, port_name, value): """This method is used to set a value on an output port. :param port_name: the name of the output port to be set - :type port_name: String + :type port_name: str :param value: the value to be assigned to the port """ @@ -1288,7 +1288,7 @@ def check_input(self, port_name): Raises an exception if the input port named *port_name* is not set. :param port_name: the name of the input port being checked - :type port_name: String + :type port_name: str :raises: ``ModuleError`` if there is no value on the port """ if not self.has_input(port_name): @@ -1299,8 +1299,8 @@ def has_input(self, port_name): the input port named **port_name**. :param port_name: the name of the input port being queried - :type port_name: String - :rtype: Boolean + :type port_name: str + :rtype: bool """ return port_name in self.inputPorts @@ -1310,7 +1310,7 @@ def force_get_input(self, port_name, default_value=None): returns a user-specified default_value or None. :param port_name: the name of the input port being queried - :type port_name: String + :type port_name: str :param default_value: the default value to be used if there is \ no value on the input port :returns: the value being passed in on the input port or the default @@ -1327,7 +1327,7 @@ def force_get_input_list(self, port_name): exist, it returns an empty list :param port_name: the name of the input port being queried - :type port_name: String + :type port_name: str :returns: a list of all the values being passed in on the input port """ @@ -1400,7 +1400,7 @@ def annotate(self, d): might add the seed that was used to initialize the generator. :param d: a dictionary where both the keys and values are strings - :type d: Dictionary + :type d: dict """ @@ -1519,10 +1519,10 @@ def set_streaming_output(self, port, generator, size=0): """This method is used to set a streaming output port. :param port: the name of the output port to be set - :type port: String + :type port: str :param generator: An iterator object supporting .next() :param size: The number of values if known (default=0) - :type size: Integer + :type size: int """ from vistrails.core.modules.basic_modules import Generator module = copy.copy(self) From 09db33daa78a005a179a9ce76486060fff8b8413 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 30 Oct 2014 15:28:26 -0400 Subject: [PATCH 189/194] Makes AssertEqual print reprs --- vistrails/core/modules/basic_modules.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vistrails/core/modules/basic_modules.py b/vistrails/core/modules/basic_modules.py index 51b65326a..566665757 100644 --- a/vistrails/core/modules/basic_modules.py +++ b/vistrails/core/modules/basic_modules.py @@ -1234,7 +1234,11 @@ def compute(self): values = (self.get_input('value1'), self.get_input('value2')) if values[0] != values[1]: - raise ModuleError(self, "AssertEqual: values are different", + reprs = tuple(repr(v) for v in values) + reprs = tuple('%s...' % v[:17] if len(v) > 20 else v + for v in reprs) + raise ModuleError(self, "AssertEqual: values are different: " + "%r, %r" % reprs, abort=True) ############################################################################## From 2d6d4c4a4bf89b828c931e070ed6db2817a78c79 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Tue, 4 Nov 2014 17:56:32 -0500 Subject: [PATCH 190/194] Removes deprecated setResult() calls in matplotlib --- vistrails/packages/matplotlib/artists.py | 102 +++++++++--------- .../matplotlib/artists_template.py.mako | 2 +- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/vistrails/packages/matplotlib/artists.py b/vistrails/packages/matplotlib/artists.py index 03bb16f60..b2aed8613 100644 --- a/vistrails/packages/matplotlib/artists.py +++ b/vistrails/packages/matplotlib/artists.py @@ -99,7 +99,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplArtistProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplProperties.compute(self, artist) if self.has_input('picker'): @@ -201,7 +201,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = Mpl_AxesImageBaseProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('origin'): @@ -283,7 +283,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAxesImageProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) Mpl_AxesImageBaseProperties.compute(self, artist) if self.has_input('origin'): @@ -359,7 +359,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplNonUniformImageProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplAxesImageProperties.compute(self, artist) if self.has_input('norm'): @@ -435,7 +435,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplBboxImageProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) Mpl_AxesImageBaseProperties.compute(self, artist) if self.has_input('origin'): @@ -518,7 +518,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPcolorImageProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('A'): @@ -594,7 +594,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplFigureImageProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('origin'): @@ -739,7 +739,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('transOffset'): @@ -835,7 +835,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPathCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('paths'): @@ -889,7 +889,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPolyCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('paths'): @@ -946,7 +946,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplBrokenBarHCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPolyCollectionProperties.compute(self, artist) if self.has_input('xranges'): @@ -998,7 +998,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplRegularPolyCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('numsides'): @@ -1053,7 +1053,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplStarPolygonCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplRegularPolyCollectionProperties.compute(self, artist) if self.has_input('numsides'): @@ -1108,7 +1108,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAsteriskPolygonCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplRegularPolyCollectionProperties.compute(self, artist) if self.has_input('numsides'): @@ -1191,7 +1191,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplLineCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('paths'): @@ -1263,7 +1263,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplCircleCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('sizes'): @@ -1317,7 +1317,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplEllipseCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('units'): @@ -1381,7 +1381,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPatchCollectionProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('paths'): @@ -1439,7 +1439,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplTriMeshProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('triangulation'): @@ -1526,7 +1526,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplQuadMeshProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplCollectionProperties.compute(self, artist) if self.has_input('paths'): @@ -1605,7 +1605,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPatchProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('edgecolor'): @@ -1678,7 +1678,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplShadowProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('patch'): @@ -1743,7 +1743,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplRectangleProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('bounds'): @@ -1807,7 +1807,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplRegularPolygonProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('xy'): @@ -1865,7 +1865,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplCirclePolygonProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplRegularPolygonProperties.compute(self, artist) if self.has_input('radius'): @@ -1917,7 +1917,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPathPatchProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('path'): @@ -1967,7 +1967,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplPolygonProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('xy'): @@ -2037,7 +2037,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplFancyArrowProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPolygonProperties.compute(self, artist) if self.has_input('length_includes_head'): @@ -2113,7 +2113,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplWedgeProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('theta2'): @@ -2177,7 +2177,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplArrowProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('y'): @@ -2246,7 +2246,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplYAArrowProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('xytip'): @@ -2310,7 +2310,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplEllipseProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('width'): @@ -2366,7 +2366,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplCircleProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplEllipseProperties.compute(self, artist) if self.has_input('xy'): @@ -2433,7 +2433,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplArcProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplEllipseProperties.compute(self, artist) if self.has_input('theta2'): @@ -2516,7 +2516,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplFancyBboxPatchProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('mutation_scale'): @@ -2610,7 +2610,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplFancyArrowPatchProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplPatchProperties.compute(self, artist) if self.has_input('connectionstyle'): @@ -2727,7 +2727,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplConnectionPatchProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplFancyArrowPatchProperties.compute(self, artist) if self.has_input('connectionstyle'): @@ -2868,7 +2868,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplLine2DProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('picker'): @@ -3010,7 +3010,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplTextProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('rotation_mode'): @@ -3184,7 +3184,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplTextWithDashProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplTextProperties.compute(self, artist) if self.has_input('dashpush'): @@ -3361,7 +3361,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplTickProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('label1On'): @@ -3487,7 +3487,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplXTickProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplTickProperties.compute(self, artist) if self.has_input('label1On'): @@ -3600,7 +3600,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplYTickProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplTickProperties.compute(self, artist) if self.has_input('label1On'): @@ -3735,7 +3735,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAxisProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('pickradius'): @@ -3835,7 +3835,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplXAxisProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplAxisProperties.compute(self, artist) if self.has_input('view_interval'): @@ -3907,7 +3907,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplYAxisProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplAxisProperties.compute(self, artist) if self.has_input('offset_position'): @@ -4053,7 +4053,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplLegendProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('fancybox'): @@ -4280,7 +4280,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAxesProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('adjustable'): @@ -4423,7 +4423,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAxesSubplotProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplAxesProperties.compute(self, artist) if self.has_input('fig'): @@ -4507,7 +4507,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplFigureProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplArtistProperties.compute(self, artist) if self.has_input('edgecolor'): @@ -4596,7 +4596,7 @@ def update_kwargs(self, kwargs): def compute(self, artist=None): if artist is None: artist = MplAnnotationProperties.Artist() - self.setResult("value", artist) + self.set_output("value", artist) MplTextProperties.compute(self, artist) if self.has_input('xycoords'): diff --git a/vistrails/packages/matplotlib/artists_template.py.mako b/vistrails/packages/matplotlib/artists_template.py.mako index 8fb09b43b..2e5ff9a2f 100644 --- a/vistrails/packages/matplotlib/artists_template.py.mako +++ b/vistrails/packages/matplotlib/artists_template.py.mako @@ -112,7 +112,7 @@ class ${spec.name}(${spec.superklass}): def compute(self, artist=None): if artist is None: artist = ${spec.name}.Artist() - self.setResult("value", artist) + self.set_output("value", artist) % if spec.get_compute_before(): ${spec.get_compute_before()} From 4fd2885dc3a54b54a4562c86dbbf186eebcc74ec Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 6 Nov 2014 12:03:53 -0500 Subject: [PATCH 191/194] Fixes CLTools not setting stdout/stderr if empty Returning None instead of a file breaks type safety and will make pipeline fails. --- vistrails/packages/CLTools/init.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vistrails/packages/CLTools/init.py b/vistrails/packages/CLTools/init.py index 5c66aa2f4..2e4efb01c 100644 --- a/vistrails/packages/CLTools/init.py +++ b/vistrails/packages/CLTools/init.py @@ -326,7 +326,7 @@ def compute(self): f.close() if not file_std: - if stdout and "stdout" in self.conf: + if "stdout" in self.conf: name, type, options = self.conf["stdout"] type = type.lower() if "file" == type: @@ -340,7 +340,7 @@ def compute(self): self.setResult(name, stdout) else: raise ValueError - if stderr and "stderr" in self.conf: + if "stderr" in self.conf: name, type, options = self.conf["stderr"] type = type.lower() if "file" == type: From 57250143345da5fd4b1557759818b1d4a4ba38b3 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 6 Nov 2014 13:45:53 -0500 Subject: [PATCH 192/194] Fixes code issues in gui.application Still missing VistrailController import. --- vistrails/core/application.py | 2 +- vistrails/gui/application.py | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/vistrails/core/application.py b/vistrails/core/application.py index 6511611f6..1fa408048 100644 --- a/vistrails/core/application.py +++ b/vistrails/core/application.py @@ -357,7 +357,7 @@ def ensure_vistrail(self, locator): """ raise NotImplementedError("Subclass must implement ensure_vistrail") - def select_version(self, version=None): + def select_version(self, version): """select_version changes the version of the currently open vistrail to the specified version. diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index fd8d09b50..c159c27c0 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -50,6 +50,7 @@ from vistrails.core import debug from vistrails.core import system from vistrails.core.application import APP_SUCCESS, APP_FAIL, APP_DONE +from vistrails.core.db.io import load_vistrail from vistrails.core.db.locator import FileLocator, DBLocator import vistrails.core.requirements from vistrails.db import VistrailsDBException @@ -526,7 +527,7 @@ def noninteractiveMode(self): results = vistrails.core.console_mode.get_wf_graph(w_list, workflow_graph, self.temp_configuration.graphsAsPdf) for r in results: - if r[0] == False: + if r[0] is False: errs.append("Error generating workflow graph: %s" % \ r[1]) debug.critical("*** Error in get_wf_graph: %s" % r[1]) @@ -536,7 +537,7 @@ def noninteractiveMode(self): results = vistrails.core.console_mode.get_vt_graph(vt_list, evolution_graph, self.temp_configuration.graphsAsPdf) for r in results: - if r[0] == False: + if r[0] is False: errs.append("Error generating vistrail graph: %s" % \ r[1]) debug.critical("*** Error in get_vt_graph: %s" % r[1]) @@ -820,7 +821,7 @@ def linux_update_default_application(): output = [] try: result = system.execute_cmdline(command, output) - except OSError, e: + except OSError: result = None if result != 0: debug.warning("Error running xdg-mime") @@ -830,7 +831,7 @@ def linux_update_default_application(): output = [] try: result = system.execute_cmdline(command, output) - except OSError, e: + except OSError: result = None if result != 0: debug.warning("Error running update-mime-database") @@ -846,7 +847,7 @@ def linux_update_default_application(): output = [] try: result = system.execute_cmdline(command, output) - except OSError, e: + except OSError: result = None if result != 0: debug.warning("Error running xdg-icon-resource") @@ -874,7 +875,7 @@ def linux_update_default_application(): output = [] try: result = system.execute_cmdline(command, output) - except OSError, e: + except OSError: result = None if result != 0: debug.warning("Error running update-desktop-database") From 61af793796c6dae42bf208647680a4bd374e5e24 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 6 Nov 2014 14:17:25 -0500 Subject: [PATCH 193/194] Adds context menu to reload CLTools modules --- vistrails/packages/CLTools/init.py | 62 ++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/vistrails/packages/CLTools/init.py b/vistrails/packages/CLTools/init.py index a4d2d2e46..926fdab2c 100644 --- a/vistrails/packages/CLTools/init.py +++ b/vistrails/packages/CLTools/init.py @@ -82,7 +82,7 @@ def _eintr_retry_call(func, *args): raise -def add_tool(path): +def _add_tool(path): # first create classes tool_name = os.path.basename(path) if not tool_name.endswith(SUFFIX): # pragma: no cover @@ -407,6 +407,16 @@ def to_vt_type(s): cl_tools[tool_name] = M +def add_tool(path): + try: + _add_tool(path) + except Exception as exc: # pragma: no cover + import traceback + debug.critical("Package CLTools failed to create module " + "from '%s': %s" % (path, exc), + traceback.format_exc()) + + def initialize(*args, **keywords): reload_scripts(initial=True) @@ -417,9 +427,15 @@ def remove_all_scripts(): del cl_tools[tool_name] reg.delete_module(identifiers.identifier, tool_name) -def reload_scripts(initial=False): +def reload_scripts(initial=False, name=None): + reg = vistrails.core.modules.module_registry.get_module_registry() if not initial: - remove_all_scripts() + if name is None: + remove_all_scripts() + else: + del cl_tools[name] + reg.delete_module(identifiers.identifier, name) + if "CLTools" == identifiers.name: # this is the original package location = os.path.join(vistrails.core.system.current_dot_vistrails(), @@ -430,25 +446,25 @@ def reload_scripts(initial=False): debug.log("Creating CLTools directory...") os.mkdir(location) except Exception, e: - debug.critical("""Could not create CLTools directory. Make - sure '%s' does not exist and parent directory is writable""" % location, e) + debug.critical("Could not create CLTools directory. Make " + "sure '%s' does not exist and parent directory " + "is writable" % location, + e) sys.exit(1) - else: # pragma: no cover + else: # pragma: no cover # this is a standalone package so modules are placed in this directory location = os.path.dirname(__file__) if initial: - reg = vistrails.core.modules.module_registry.get_module_registry() reg.add_module(CLTools, abstract=True) - for path in os.listdir(location): - if path.endswith(SUFFIX): # pragma: no branch - try: + if name is None: + for path in os.listdir(location): + if path.endswith(SUFFIX): # pragma: no branch add_tool(os.path.join(location, path)) - except Exception as exc: # pragma: no cover - import traceback - debug.critical("Package CLTools failed to create module " - "from '%s': %s" % (os.path.join(location, path), exc), - traceback.format_exc()) + else: + path = os.path.join(location, name + SUFFIX) + if os.path.exists(path): + add_tool(path) if not initial: from vistrails.core.interpreter.cached import CachedInterpreter @@ -489,6 +505,20 @@ def finalize(): pass +def contextMenuName(name): + if "CLTools" == name: + return "Reload All Scripts" + else: + return "Reload Script" + + +def callContextMenu(name): + if "CLTools" == name: + reload_scripts() + else: + reload_scripts(name=name) + + ############################################################################### import unittest @@ -508,7 +538,7 @@ def setUpClass(cls): for name in os.listdir(cls.testdir): if not name.endswith(SUFFIX): continue - add_tool(os.path.join(cls.testdir, name)) + _add_tool(os.path.join(cls.testdir, name)) toolname = os.path.splitext(name)[0] cls._tools[toolname] = cl_tools[toolname] cls._old_dir = os.getcwd() From 43bd26730c9f9da1dc302e5c00c939ac5d1bf090 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Fri, 7 Nov 2014 17:27:08 -0500 Subject: [PATCH 194/194] Adds missing import in gui.application --- vistrails/gui/application.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vistrails/gui/application.py b/vistrails/gui/application.py index c159c27c0..5c7f0ce9c 100644 --- a/vistrails/gui/application.py +++ b/vistrails/gui/application.py @@ -53,6 +53,7 @@ from vistrails.core.db.io import load_vistrail from vistrails.core.db.locator import FileLocator, DBLocator import vistrails.core.requirements +from vistrails.core.vistrail.controller import VistrailController from vistrails.db import VistrailsDBException from vistrails.db.services.io import test_db_connection from vistrails.gui import qt