Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

State Transition System for Django

Project Description
# 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('Door Opened', event='Open Door')

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

# Time passes..

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

To remove the boilerplate from the above example, use the `transition`
context manager instead:

from sts.contextmanagers import transition

with transition('Example 1', 'Door Closed', event='Close Door Slowly'):

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('Door Closed', event='Close Door')

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

Release History

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
django-sts-0.7.3.tar.gz (14.0 kB) Copy SHA256 Checksum SHA256 Source Jun 4, 2013

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting