Advance Guide

StateField

StateField is a model field defined in django-river, which prepares everything for you. Whenever you put this field into a model object, the model converts into a workflow model. The model have some workflow specialized properties, methods and relations.

Arguments

Arguments Description
state_model You can change your state model. State model in django-river is used as default. It is recomended to use default one.

The Model Injections

django-river injects some properties, relations and methods into your model class. This means, ther is gonna be special workflow properties, relations and methods in your model objects. Assume that your model class is Ticket; When you have a ticket object, you can access the injections like ticket.any_injection_below or ticket.any_injection_below.all() or ticket.any_injection_below().

Properties:

Name Return Type Description
on_initial_state: boolean Defines your model object is on initial states or not.
on_final_state: boolean Defines your model object is on final states or not.
on_initial_proceedings: Proceeding Queryset Returns initial proceeding objects.
on_final_proceedings: Proceeding Queryset Returns final proceeding objects.
next_proceedings: Proceeding Queryset Returns next proceedings objects according to the current state.

Methods:

Name Return Type Parameters Description
proceed: boolean ``user``(must): User is gonna proceed, ``next_state``(not always) Defines your model object is on initial states or not.

Relations:

Name Type Description
proceedings: GenericRelation To Proceeding model.
proceeding_tract: ForeignKey To Proceeding Track model

Signals

pre_transition: it is fired before any transition occured.

Args Description
workflow_object Your object on transition
field Field which you registered object for
source_state Transition source state object
destination_state Transition destination state object
proceeder Proceeding object

post_transition: it is fired before any transition occured.

Args Description
workflow_object Your object on transition
field Field which you registered object for
source_state Transition source state object
destination_state Transition destination state object
proceeder Proceeding object

pre_proceeded: it is fired before any is proceeded. Transition does not have to be occured.

Args Description
workflow_object Your object proceeded
field Field which you registered object for
proceeder Proceeding object
track Proceeding track object

post_proceeded: it is fired before any is proceeded. Transition does not have to be occured.

Args Description
workflow_object Your object proceeded
field Field which you registered object for
proceeder Proceeding object
track Proceeding track object

pre_final: it is fired before any workflow is completed.

Args Description
workflow_object Your object on final
field Field which you registered object for

post_final: it is fired before any workflow is completed.

Args Description
workflow_object Your object on final
field Field which you registered object for

Handlers

Handlers are different from django-river. These are for spesific object, spesific source_state, spesific destination_state etc. It is fired when the condition is matched.

PreCompletedHandler

Before an object is on final state, if the condition is match; means object is suitable, it is fired;

from river.handlers.completed import PreCompletedHandler

def handler(my_object,field,*args,**kwargs):
        do_something_with(object,field)

PreCompletedHandler.register(handler,my_object,'my_state_field')

register method parameter**

Args Description  
workflow_object Your object Required
field Field which you registered object for Required

PostCompletedHandler

After an object is on final state, if the condition is match; means object is suitable, it is fired;

from river.handlers.completed import PostCompletedHandler

def handler(my_object,field,*args,**kwargs):
    do_something_with(object,field)

PostCompletedHandler.register(handler,my_object,'my_state_field')

`register` method parameter

Args Description  
workflow_object Your object Required
field Field which you registered object for Required

PreTransitionHandler

Before any transition occurred, if the condition is match; means object, source_state,destination state are suitable, it is fired;

from river.handlers.transition import PreTransitionHandler

def handler(my_object,field,*args,**kwargs):
    do_something_with(object,field)

PreTransitionHandler.register(handler,my_object,'my_state_field')

`register` method parameter

Args Description  
workflow_object Your object proceeded Required
field Field which you registered object for Required
source_state Source state of the tranition Optional
desination_satte Destinatio state of the tranition Optional

PostTransitionHandler

After any transition occurred, if the condition is match; means object, source_state,destination state are suitable, it is fired;

from river.handlers.transition import PostTransitionHandler

def handler(my_object,field,*args,**kwargs):
    do_something_with(object,field)

PostTransitionHandler.register(handler,my_object,'my_state_field')

`register` method parameter

Args Description  
workflow_object Your object proceeded Required
field Field which you registered object for Required
source_state Source state of the tranition Optional
desination_satte Destinatio state of the tranition Optional

Handler Backends

Handlers can be persisted into different sources. This functionality is added for multiprocessing. Now, backends supports multiprocessing can be implemented.

Backend Multiprocessing Path
MemoryHandlerBackend No river.handlers.backends.memory.MemoryHandlerBackend
DatabaseHandlerBackend Yes river.handlers.backends.database.DatabaseHandlerBackend

Default backend is MemoryHandlerBackend which does not supports multiprocessing. It can be updated in settings file;

RIVER_HANDLER_BACKEND = {
    'backend':'river.handlers.backends.database.DatabaseHandlerBackend'
}