Skip to content
This repository has been archived by the owner on May 13, 2020. It is now read-only.

Commit

Permalink
start simple documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
goschtl committed Apr 12, 2012
1 parent 878574b commit 2778a2a
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions README.txt
Expand Up @@ -5,3 +5,64 @@ A library for creating background threads that can talk to the ZODB and use
local site components.

We're probably reinventing Celery.


Example
-------

Let's assume we have a DMS with a simple publication workflow. We
have two states "DRAFT" and "PUBLISH". The Problem in this example
is: that the transition form "DRAFT" to "PUBLISH" takes some minutes,
and we don't want the user to be waiting.

First we have create a WorkflowTransition-BackgroundThread:

.. code-block:: python

class MyWorkflowTransition(BackgroundWorkerThread):
execute = True
description = "background worker thread (%(class_name)s) for %(site_name)s User %(user_name)s"

def __init__(self, site_db, site_oid, site_name, user_name, daemon=True, object_oid=None):
self.object_oid = object_oid
super(MyWorker, self).__init__(site_db, site_oid, site_name, user_name, daemon=True)

def scheduleNextWork(self):
return self.execute

def getObjectFromOID(self):
conn = getSite()._p_jar
return conn.get(self.object_oid)

def doWork(self):
sleep(15) # This is our long TASK
self.execute = False
document = self.getObjectFromOID()
document.wf_status = "PUBLISHED"


We have a simple Document with an initial Workflow-State draft.

.. code-block:: python

class Document(Persistent):
wf_state = "DRAFT"


Now we have to call our WorkflowTransition.

.. code-block:: python

def setWorkflow(site, document_oid, user_name):
worker = MyWorkflowTransition(
site_db = site._p_jar.db(),
site_oid = site._p_oid,
site_name = site.__name__,
user_name = user_name,
object_oid = document_oid,
)
worker.start()

When calling worker.start() the thread goes into "Background" and the user
don't have to wait until the Transition is finished.

0 comments on commit 2778a2a

Please sign in to comment.