Moved the generation of workflow list from dialogs.py to workflow.py, as
a step in the process of making command line options to the program.
This commit is contained in:
parent
cfbb76f25a
commit
32fdca837a
|
@ -32,50 +32,15 @@ class CreateProjectDruid(gtk.Window):
|
||||||
self.wf_info = gtk.TextBuffer()
|
self.wf_info = gtk.TextBuffer()
|
||||||
self['workflow_info'].set_buffer(self.wf_info)
|
self['workflow_info'].set_buffer(self.wf_info)
|
||||||
|
|
||||||
def workflow_classes(self, modname):
|
|
||||||
"""Returns a list of all subclasses of Workflow in a given module"""
|
|
||||||
workflow_classes = []
|
|
||||||
|
|
||||||
__import__('workflows.%s' % modname)
|
|
||||||
module = sys.modules['workflows.%s' % modname]
|
|
||||||
|
|
||||||
d = module.__dict__
|
|
||||||
for wf in d.values():
|
|
||||||
try:
|
|
||||||
if issubclass(wf, workflow.Workflow):
|
|
||||||
workflow_classes.append(wf)
|
|
||||||
except TypeError, e:
|
|
||||||
pass
|
|
||||||
return workflow_classes
|
|
||||||
|
|
||||||
def make_workflow_list(self):
|
|
||||||
"""Returns a ListStore containing all new workflows"""
|
|
||||||
store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
|
|
||||||
|
|
||||||
# List all .py files that can contain workflow classes
|
|
||||||
wf_path = sys.modules['workflows'].__path__
|
|
||||||
wf_files = []
|
|
||||||
|
|
||||||
for dir in wf_path:
|
|
||||||
for fn in os.listdir(dir):
|
|
||||||
if fn.endswith('.py') and ('#' not in fn) :
|
|
||||||
wf_files.append(fn[:-3])
|
|
||||||
|
|
||||||
# Try to load each file and look for Workflow derived classes
|
|
||||||
for fn in wf_files:
|
|
||||||
try:
|
|
||||||
wf_info = self.workflow_classes(fn)
|
|
||||||
for wf in wf_info:
|
|
||||||
store.insert_after(None, (getattr(wf, 'name'), wf))
|
|
||||||
except Exception, e:
|
|
||||||
wf_info = self.workflow_classes(fn)
|
|
||||||
logger.log('warning', 'Cannot load workflow: %s' % fn)
|
|
||||||
|
|
||||||
return store
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return self.widget_tree.get_widget(key)
|
return self.widget_tree.get_widget(key)
|
||||||
|
|
||||||
|
def make_workflow_list(self):
|
||||||
|
store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
|
||||||
|
for wf in workflow.workflow_list():
|
||||||
|
store.insert_after(None, (wf.name, wf))
|
||||||
|
return store
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self['workflow_list'].set_model(self.workflows)
|
self['workflow_list'].set_model(self.workflows)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,48 @@
|
||||||
|
|
||||||
import gtk
|
import gtk
|
||||||
import logger
|
import logger
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
def _workflow_classes(modname):
|
||||||
|
"""Returns a list of all subclasses of Workflow in a given module"""
|
||||||
|
workflow_classes = []
|
||||||
|
|
||||||
|
__import__('workflows.%s' % modname)
|
||||||
|
module = sys.modules['workflows.%s' % modname]
|
||||||
|
|
||||||
|
d = module.__dict__
|
||||||
|
for wf in d.values():
|
||||||
|
try:
|
||||||
|
if issubclass(wf, Workflow):
|
||||||
|
workflow_classes.append(wf)
|
||||||
|
except TypeError, e:
|
||||||
|
pass
|
||||||
|
return workflow_classes
|
||||||
|
|
||||||
|
def workflow_list():
|
||||||
|
"""Returns a ListStore containing all new workflows"""
|
||||||
|
retval = []
|
||||||
|
|
||||||
|
# List all .py files that can contain workflow classes
|
||||||
|
wf_path = sys.modules['workflows'].__path__
|
||||||
|
wf_files = []
|
||||||
|
|
||||||
|
for dir in wf_path:
|
||||||
|
for fn in os.listdir(dir):
|
||||||
|
if fn.endswith('.py') and ('#' not in fn):
|
||||||
|
wf_files.append(fn[:-3])
|
||||||
|
|
||||||
|
# Try to load each file and look for Workflow derived classes
|
||||||
|
for fn in wf_files:
|
||||||
|
try:
|
||||||
|
for wf in _workflow_classes(fn):
|
||||||
|
retval.append(wf)
|
||||||
|
except Exception, e:
|
||||||
|
logger.log('warning', 'Cannot load workflow: %s' % fn)
|
||||||
|
logger.log('warning', e)
|
||||||
|
|
||||||
|
return retval
|
||||||
|
|
||||||
class Workflow:
|
class Workflow:
|
||||||
"""Defines a workflow that contains a set of analysis stages.
|
"""Defines a workflow that contains a set of analysis stages.
|
||||||
|
|
Reference in New Issue