skip to navigation
skip to content

Not Logged In

django-sts 0.4

State Transition System for Django

Latest Version: 0.7.3

# State Transition System (STS) for Django

[State Transition Systems][1] have less constraints than Finite State
Automata, and can be utilized for various use cases.

The core components include:

- State
- Event
- Transition
- System

**Events** cause a **transition** from some **state** to a new state within
a given **system**.

The API supports defining _immediate_ transitions and _long-running_
transitions. Now, for a riveting example..

system = System(name='Example 1')

# Immediate transition.. event => state
system.transition('Open Door', 'Door Opened')

# 'Long-running' transitions.. event happens
system.start_transition('Close Door Slowly')

# Time passes..

# The resulting state..
system.end_transition('Door Closed')

A model object can be associated directly with a `System` using Django's
ContentTypes framework generic foreign keys.

door = Door.objects.get(name='Door #1')
system = System(content_object=door)
# ...

`System` objects have a few extra conveniences:

# number of transitions
len(system) == system.length

# iteration starting with the first transition
for trans in system:

# indexing and slices
system[:3] # first 3 transitions
system[-3:] # last 3 transitions
system[:-3] # all except the last 3 transitions
system[1:3] # arbitrary slice
system[2] # specific transition

This enables bringing in django-sts to an existing model to begin tracking
states of objects.

It even comes with an abstract `STSModel` that augments a model with the above
methods for seamless integration (it does not add any model fields):

class Door(STSModel):
name = models.CharField(max_length=20)

door = Door()
door.transition('Close Door', 'Door Closed')

The library leaves it up to the application to implement the constraints of a
finite state automata/machine.

File Type Py Version Uploaded on Size
django-sts-0.4.tar.gz (md5) Source 2013-01-17 6KB
  • Downloads (All Versions):
  • 42 downloads in the last day
  • 213 downloads in the last week
  • 663 downloads in the last month