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

Metadata

Release files for django-sts 0.7.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-sts 0.7.3
File Size Uploaded
django-sts-0.7.3.tar.gz 14.0 kB Details

Release files / django-sts-0.7.3.tar.gz

Download URL django-sts-0.7.3.tar.gz
Size 14.0 kB
Tags Source
SHA-256 checksum
How to use checksums
539c6721c377355b377b3df5bd2249b61035c8c30352cd294b3ff8895e5f3b19
BLAKE2b-256 checksum
How to use checksums
c3dd5d29c7b7e7685bebcae9cefaa90d171799bf985ca472504d54cdb0ba5a3c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.7.3 This release

1 release file

0.7.2

1 release file

0.7.1

1 release file

0.7

1 release file

0.6

1 release file

0.5

1 release file

0.4

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

0.1b1

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page