Skip to main content
# 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..

```python
system = System(name='Example 1')
system.save()

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

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

# Time passes..
time.sleep(2)

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

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

```python
from sts.contextmanagers import transition

with transition('Example 1', 'Door Closed', event='Close Door Slowly'):
time.sleep(2)
```

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

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

`System` objects have a few extra conveniences:

```python
# 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):

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

door = Door()
door.save()
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.

[1]: http://en.wikipedia.org/wiki/State_transition_system

Download files

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

Source Distribution

django-sts-0.7.3.tar.gz (14.0 kB view details)

Uploaded Source

File details

Details for the file django-sts-0.7.3.tar.gz.

File metadata

  • Download URL: django-sts-0.7.3.tar.gz
  • Upload date:
  • Size: 14.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-sts-0.7.3.tar.gz
Algorithm Hash digest
SHA256 539c6721c377355b377b3df5bd2249b61035c8c30352cd294b3ff8895e5f3b19
MD5 3692660aa691155a68c6fce5744285e1
BLAKE2b-256 c3dd5d29c7b7e7685bebcae9cefaa90d171799bf985ca472504d54cdb0ba5a3c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.7.3 This release

1 file

0.7.2

1 file

0.7.1

1 file

0.7

1 file

0.6

1 file

0.5

1 file

0.4

1 file

0.3

1 file

0.2

1 file

0.1

1 file

0.1b1

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page