From 8ccc9b01d76b479074ed772b365594bf1e684018 Mon Sep 17 00:00:00 2001 From: vlado Date: Tue, 30 Oct 2012 23:03:25 -0400 Subject: [PATCH] Doc updated #6. --- doc/api.rst | 10 ++++++++++ doc/pics/perm_workflow.png | Bin 27149 -> 28635 bytes doc/workflow.rst | 35 ++++++++++++++++++----------------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/doc/api.rst b/doc/api.rst index 1c78f97..9a8a059 100644 --- a/doc/api.rst +++ b/doc/api.rst @@ -130,6 +130,16 @@ Logout +Object State Switching +====================== +All possible states object (article, photo etc.) can be switched to (with respect +to used workflow), are accessible via "states" resource field. +When creating new object in admin, "states" sent in login response content for particular +resource should be used. These "states" are states object can switch to from initial state. +Object state can be switched simply setting "state" resource field to state codename in POST/PUT/PATCH request. + + + Generic API for all resources ============================= diff --git a/doc/pics/perm_workflow.png b/doc/pics/perm_workflow.png index ddf4840bb045c4ba274ad4413e2020e014dabdb8..86ced59a85519327a3a24b7f6e85197a7321ac5e 100644 GIT binary patch literal 28635 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 diff --git a/doc/workflow.rst b/doc/workflow.rst index caf73da..cc961e3 100644 --- a/doc/workflow.rst +++ b/doc/workflow.rst @@ -30,6 +30,9 @@ Class diagram Workflow models =============== +``Workflow`` is made of directed graph, nodes are modelled by ``State`` instances +and edges are modelled by ``Transition`` instances. + **Workflow** model - Workflow instance can be added to any model: @@ -41,14 +44,14 @@ Workflow models wf.set_to_model(CommonArticle) -**State** model - State instance can be added to more workflow instances: +**State** model :: state = State("Epic out-of-space state") state.workflow = workflow -**Transition** model - transitions are connections between nodes(states), you can add more transitions to one state ofc.: +**Transition** model - transitions are connections between nodes (states), you can add more transitions to one state ofc.: :: @@ -84,20 +87,21 @@ can in state "Corrected" publish an article (has "can_publish" permission): can_publish = Permission(titile="Can publish", codename="can_publish") editor_in_chief = Role(title="Editor in chief") - spr = StatePermissionRelation(state=corr_state, permission=can_publish, role=editor_in_chief) + relation = StatePermissionRelation(state=corr_state, permission=can_publish, role=editor_in_chief) -*StateModelRelation* - is mapping a given state to a given model content_type: +*StateObjectRelation* - is mapping a given state to a given model object: :: - from ella_hub.models import State, StateModelRelation, CommonArticle + from ella_hub.models import State, StateObjectRelation, CommonArticle from django.contrib.contenttypes.models import ContentType state = State(title="Some state") ct = ContentType.objects.get_for_model(CommonArticle) - smr = StateModelRelation(state=state, content_type=ct) + article = CommonArticle(title="Awesome article", ...) + relation = StateObjectRelation(state=state, content_type=ct, content_id=article.id) *WorkflowPermissionRelation* - is mapping a given permission to a given workflow, permissions @@ -110,7 +114,7 @@ system independency. wf = Workflow(title="Epic workflow") can_publish = Permission(title="Can publish", codename="can_publish") - wpr = WorkflowPermissionRelation(permission=can_publish, workflow=wf) + relation = WorkflowPermissionRelation(permission=can_publish, workflow=wf) @@ -158,9 +162,9 @@ Permission models from django.contrib.auth.models import User, Group editor = Role(title="Editor") - nixxon = User(username="richy_nixxon") - prr = PrincipalRoleRelation(role=editor) - prr.set_principal(nixxon) + userko = User(username="Userko") + relation = PrincipalRoleRelation(role=editor) + relation.set_principal(userko) ------------- @@ -168,7 +172,7 @@ Ella workflow ------------- -Publishable States +States ================== * added - Added/Vložen @@ -179,9 +183,6 @@ Publishable States * deleted - Deleted/Smazán -Roles definition -================ -* editor in chief -* editor -* photographer -* ... +Testing Ella-workflow implementation +==================================== +*TODO*