def test_manager_add_duplicate_error(self): """ Test duplicate name exception """ with pytest.raises(KeyError): wf_spec1 = WorkflowSpec(name = 'TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec1) wf_spec2 = WorkflowSpec(name = 'TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec2)
def test_manager_add_duplicate_error(self): """ Test duplicate name exception """ with pytest.raises(KeyError): wf_spec1 = WorkflowSpec(name='TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec1) wf_spec2 = WorkflowSpec(name='TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec2)
def main(): def event_log(event): print " -> spec %s, %s" % (event.task.get_name(), event.type) CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec("SplitWorkflow") workflow_spec.on("executed", event_log) workflow_spec.on("enter", event_log) workflow_spec.on("ready", event_log) workflow_spec.on("completed", event_log) workflow = Workflow(workflow_spec) workflow.start() workflow.run()
def setup(self): import os locate_dir = os.path.dirname(__file__) os.chdir(locate_dir) os.chdir('test_project') from uliweb.manage import make_simple_application app = make_simple_application(apps_dir='./apps') spec_dir = "test_project/apps/specapp/workflow_specs/" CoreWFManager.reset() storage = WFConfigStorage() config_file = join(dirname(__file__), spec_dir + "TestWorkflow.spec") storage.load_config_file(config_file) CoreWFManager.set_storage(storage)
def setup(self): locate_dir = os.path.dirname(__file__) os.chdir(locate_dir) os.chdir('test_project') self.reset_database() manage.call('uliweb syncspec') self.path = os.getcwd() from uliweb.manage import make_simple_application app = make_simple_application(apps_dir='./apps') print app from uliweb import settings print settings.SPECS from redbreast.core.spec import WFDatabaseStorage CoreWFManager.reset()
def after_init_apps(sender): # set workflow engine to load spec from database LOG.info(" * Initialize CoreWFManager with database storage") from redbreast.core.spec import CoreWFManager from redbreast.core.spec import WFDatabaseStorage from uliweb import settings storage = WFDatabaseStorage() CoreWFManager.set_storage(storage) bindable = settings.get_var('REDBREAST/ENABLE_EVENT_BIND', True) if bindable: LOG.info(" * Setup EVENT_BIND for CoreWFManage") from redbreast.core.spec import CoreWFManager, WFManagerBindPlugin plugin = WFManagerBindPlugin() d = settings.get('REDBREAST_BINDS', {}) for bind_name, args in d.items(): plugin.bind(args[0], args[1], args[2]) CoreWFManager.register_plugin(plugin)
def main(): CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec('MultiChoiceWorkflow') count = [0, 0, 0] for i in range(0, 100): workflow = Workflow(workflow_spec) workflow.start() workflow.run() flows = workflow.get_data("flows") for flow in flows: if flow == "A": count[0] = count[0] + 1 elif flow == "B": count[1] = count[1] + 1 elif flow == "C": count[2] = count[2] + 1 print count
def deserialize(self, obj): from redbreast.core.spec import CoreWFManager from uliweb.orm import get_model from uliweb.utils.common import Serial WFTask = get_model('workflow_task') WFTrans = get_model('workflow_trans') self.obj = obj if obj: workflow_spec = CoreWFManager.get_workflow_spec(obj.spec_name) self.spec = workflow_spec self.state = obj.state self.data = Serial.load(obj.data) self.ref_unique_id = obj.ref_unique_id #DEBUG ------------------------- if __DEBUG__: print 'workflow deserialize -----------------------------(1)' print 'ref_unique_id: %s-%s' % (self.ref_unique_id, obj.ref_unique_id) print 'spec_name: %s' % self.spec.name print 'state: %s' % self.state print 'workflow deserialize -----------------------------(2)' #DEBUG start_task_obj = None task_list = {} for task_obj in obj.tasks.order_by(WFTask.c.id): if not start_task_obj: start_task_obj = task_obj task_list[task_obj.id] = self.Task( self, self.spec.get_task_spec(task_obj.alias_name), state=None) task_list[task_obj.id].deserialize(task_obj) #DEBUG ------------------------- if __DEBUG__: for a in task_list: print a, task_list[a] print "----------------------------------------------" print task_list[start_task_obj.id] print "----------------------------------------------" #DEBUG ------------------------- self.task_tree = task_list[start_task_obj.id] for trans_obj in obj.trans.order_by(WFTrans.c.id): from_task_id = trans_obj._from_task_ to_task_id = trans_obj._to_task_ if from_task_id and to_task_id: task_list[from_task_id].children.append(task_list[to_task_id]) task_list[to_task_id].parents.append(task_list[from_task_id])
def load(workflow_id, operator=None): from uliweb.orm import get_model from redbreast.core.spec import CoreWFManager WF = get_model('workflow') obj = WF.get(WF.c.id == workflow_id) if obj: workflow_spec = CoreWFManager.get_workflow_spec(obj.spec_name) instance = WorkflowDB(workflow_spec, operator=operator, deserializing=True) instance.deserialize(obj) instance.deserializing = False return instance return None
def deserialize(self, obj): from redbreast.core.spec import CoreWFManager from uliweb.orm import get_model from uliweb.utils.common import Serial WFTask = get_model("workflow_task") WFTrans = get_model("workflow_trans") self.obj = obj if obj: workflow_spec = CoreWFManager.get_workflow_spec(obj.spec_name) self.spec = workflow_spec self.state = obj.state self.data = Serial.load(obj.data) self.ref_unique_id = obj.ref_unique_id # DEBUG ------------------------- if __DEBUG__: print "workflow deserialize -----------------------------(1)" print "ref_unique_id: %s-%s" % (self.ref_unique_id, obj.ref_unique_id) print "spec_name: %s" % self.spec.name print "state: %s" % self.state print "workflow deserialize -----------------------------(2)" # DEBUG start_task_obj = None task_list = {} for task_obj in obj.tasks.order_by(WFTask.c.id): if not start_task_obj: start_task_obj = task_obj task_list[task_obj.id] = self.Task(self, self.spec.get_task_spec(task_obj.alias_name), state=None) task_list[task_obj.id].deserialize(task_obj) # DEBUG ------------------------- if __DEBUG__: for a in task_list: print a, task_list[a] print "----------------------------------------------" print task_list[start_task_obj.id] print "----------------------------------------------" # DEBUG ------------------------- self.task_tree = task_list[start_task_obj.id] for trans_obj in obj.trans.order_by(WFTrans.c.id): from_task_id = trans_obj._from_task_ to_task_id = trans_obj._to_task_ if from_task_id and to_task_id: task_list[from_task_id].children.append(task_list[to_task_id]) task_list[to_task_id].parents.append(task_list[from_task_id])
def main(): def event_log(event): print " -> spec %s, %s" % (event.task.get_name(), event.type) CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec('ChoiceWorkflow01') count = [0, 0] for i in range(0, 100): workflow = Workflow(workflow_spec) workflow.start() workflow.run() flow = workflow.get_data("flow") if flow == "A": count[0] = count[0] + 1 else: count[1] = count[1] + 1 print "flow A: %d" % count[0] print "flow B: %d" % count[1]
def test_workflow(self): workflow_spec = CoreWFManager.get_workflow_spec('TestWorkflow') workflow = Workflow(workflow_spec) def event_log(event): print "Event ... %s " % event.type print " .... spec %s" % event.task.get_name() workflow_spec.on("ready", event_log) workflow_spec.on("executed", event_log) workflow_spec.on("completed", event_log) workflow.start()
def test_storage_in_project(self): output_text = """A (SimpleTask-Start) --> B (SimpleTask) | --> C (SimpleTask) | --> G (JoinTask) | --> H (SimpleTask-End) --> D (SimpleTask) --> E (SimpleTask) --> F (SimpleTask) --> [shown earlier] G (JoinTask) """ workflow_spec = CoreWFManager.get_workflow_spec('TestWorkflow') workflow_spec.dump(verbose=False) assert workflow_spec.get_dump(verbose=False) == output_text
def test_storage_config(self): output_text = """A (SimpleTask-Start) --> B (SimpleTask) | --> C (SimpleTask) | --> G (JoinTask) | --> H (SimpleTask-End) --> D (SimpleTask) --> E (SimpleTask) --> F (SimpleTask) --> [shown earlier] G (JoinTask) """ workflow_spec = CoreWFManager.get_workflow_spec('TestWorkflow') workflow_spec.dump(verbose=False) assert workflow_spec.get_dump(verbose=False) == output_text
from redbreast.core.spec import CoreWFManager from redbreast.core.spec import * from redbreast.core import Workflow, Task from os.path import dirname, join def event_log(event): print " --> spec %s, %s" % (event.task.get_name(), event.type) CoreWFManager.reset() storage = WFConfigStorage() CoreWFManager.set_storage(storage) config_file = join(dirname(__file__), "data/Sandbox2.config") storage.load_config_file(config_file) workflow_spec = CoreWFManager.get_workflow_spec('TestWorkflow') #workflow_spec.on("ready", event_log) workflow_spec.on("executed", event_log) #workflow_spec.on("completed", event_log) print "--------Workflow Spec Dump ----------------------" workflow_spec.dump() workflow = Workflow(workflow_spec) print "---------START-------------------" workflow.start() workflow.run() print "---------RUN-------------------" workflow.task_tree.dump()
def test_manager_load_spec(self): CoreWFManager.storage.set_folder("data") wf_spec = CoreWFManager.get_workflow_spec('SimpleWorkflow') assert wf_spec != None assert wf_spec.name == "SimpleWorkflow"
def setup(self): CoreWFManager.reset()
def test_manager_add(self): #add workflow_spec by api wf_spec = WorkflowSpec(name='TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec) assert wf_spec == CoreWFManager.get_workflow_spec('TestWorkFlow')
def test_manager_add(self): #add workflow_spec by api wf_spec = WorkflowSpec(name = 'TestWorkFlow') CoreWFManager.add_workflow_spec(wf_spec) assert wf_spec == CoreWFManager.get_workflow_spec('TestWorkFlow')
from redbreast.serializable import Workflow, Task import os from os.path import dirname, join def event_log(event): print " --> spec %s, %s" % (event.task.get_name(), event.type) locate_dir = os.path.dirname(__file__) os.chdir(locate_dir) os.chdir('test_project') from uliweb.manage import make_simple_application app = make_simple_application(apps_dir='./apps') CoreWFManager.reset() storage = WFDatabaseStorage() CoreWFManager.set_storage(storage) workflow_spec = CoreWFManager.get_workflow_spec('TestWorkflow') workflow_spec.on("enter", event_log) workflow_spec.on("ready", event_log) workflow_spec.on("executed", event_log) workflow_spec.on("completed", event_log) print "--------Workflow Spec Dump ----------------------" workflow_spec.dump() workflow = Workflow(workflow_spec) print "---------START-------------------" workflow.start()
from redbreast.core.spec import CoreWFManager from redbreast.core import Task, Workflow def event_log(event): print " -> spec %s, %s" % (event.task.get_name(), event.type) print "\n---- Workflow01 ------------------------------" CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec("BatchWorkflow01") workflow_spec.on("executed", event_log) workflow = Workflow(workflow_spec) workflow.start() workflow.run() print "\n---- Workflow02 ------------------------------" CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec("BatchWorkflow02") workflow = Workflow(workflow_spec) workflow.start() workflow.run() print "\n---- Workflow03 ------------------------------" CoreWFManager.reset() workflow_spec = CoreWFManager.get_workflow_spec("BatchWorkflow03") workflow = Workflow(workflow_spec) workflow.start()
def create(klass, wf_spec_name, **kwargs): from redbreast.core.spec import CoreWFManager spec = CoreWFManager.get_workflow_spec(wf_spec_name) return klass(spec, **kwargs)