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)
Esempio n. 3
0
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):

        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()
Esempio n. 7
0
    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)
Esempio n. 9
0
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)
Esempio n. 10
0
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
Esempio n. 11
0
    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])
Esempio n. 12
0
 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
Esempio n. 13
0
 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
Esempio n. 14
0
    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])
Esempio n. 15
0
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()
Esempio n. 17
0
    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
    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()
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')
 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"
Esempio n. 26
0
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()
Esempio n. 27
0
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 setup(self):
     CoreWFManager.reset()
Esempio n. 29
0
 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)