Skip to main content

A frontend for the state machine library transitions

Project description

transitions-gui - A frontend for transitions state machines

An extension for the transitions state machine package. transitions-gui uses tornado as a web server and cytoscape for graph drawing and manipulation. For information about the javascript workflow head to frontend. The server (including the state machine) and client (your web browser) communicate via WebSockets.


Feedback wanted: Things do not work out of the box? You are not a big fan of the chosen icons, colours, layouts or styles? Now is the time to speak up and file a new issue.


Installation

Install transitions-gui from PyPI

pip install transitions-gui

or clone the GitHub repo

# clone the repository
git clone https://github.com/pytransitions/transitions-gui.git
cd transitions-gui
# install transitions-gui and all dependencies
python setup.py install

Quickstart

Let's begin by creating a simple circular state machine. Running python examples/simple.py will execute the following code:

from transitions_gui import WebMachine
import time

states = ['A', 'B', 'C', 'D', 'E', 'F']
# initializing the machine will also start the server (default port is 8080)
machine = WebMachine(states=states, initial='A', name="Simple Machine",
                     ordered_transitions=True,
                     ignore_invalid_triggers=True,
                     auto_transitions=False)

try:
    while True:
        time.sleep(5)
        machine.next_state()
except KeyboardInterrupt:  # Ctrl + C will shutdown the machine
    machine.stop_server()

This will create a simple transitions state machine 'ordered' (as in circular) transitions. The name of the machine will be Simple Machine and it will act as its own model which is the default behaviour. The initial state is state A and every 5 seconds, the state will be changed. Next, open your favourite yet up-to-date web browser and head to localhost:8080. You should see something similar to this: initial view

The GUI is rather simplistic and contains only two buttons which you can see on the top left:

  • pencil - toggles between Event Mode and Edit Mode
  • save - saves the current layout

Event Mode

The GUI always starts in Event Mode which is represented by the pencil's white background. In this mode, the graph can be moved around by clicking and dragging but nodes cannot be moved individually. Clicking an edge/transition in Event Mode will dispatch the related trigger to the machine. Give it a try! Clicking any edge should trigger an instant state change. Since all edges trigger the next_state event it does not matter which edge you click here.

Edit Mode

Now let's rearrange some state nodes, shall we? Click the pencil symbol to switch to Edit Mode (the pencil's background changes its background) and start dragging that nodes like this:

In Edit Mode clicking edges will not trigger an event. However, the machine's model state will be updated regardlessly. When you are done, switch back to Event Mode. Or don't. The mode does not matter for the next step. We will save that layout for the next time we want to run our state machine. Clicking the save button () will store the nodes' current positions in the browser's local storage. Layouts are stored by their name. If you plan to use transitions-gui with multiple state machines, it is recommended to make them distinguishable by name. Now reload your browser tab. Your node arangement should be recreated. Dragging nodes around will not alter the saved layout unless you save it again.

About layouts

When a transition state machine configuration is sent to the browser, the browser will determine the layout based on the following priority list:

  • value of the passed URL argument layout
  • layout stored in the browsers local storage
  • default layout
    • the machine contains nested states -> dagre
    • otherwise -> concentric

transitions-gui might not choose the right layout for your graph right away. By passing different layout values, you can check which arrangement suits your needs the best. Additionally, you can 'reset' the layout if you want your graph to be automatically arranged again. When layout=<value> is passed, the manually stored arrangement is ignored. Check the simple machine with an improved version of the CoSE arangement by opening the GUI with localhost:8080?layout=bilkent. This should look like this:

bilkent

The currently supported layout values are:

This functionality is provided by cytoscape.js. If you think transitions-gui should support more layouts, feel free to open an issue to propose your favourite layout.

I have a [bug report/issue/question]...

For bug reports and other issues, please open an issue on GitHub.

Project details


Download files

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

Source Distribution

transitions-gui-0.0.5.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

transitions_gui-0.0.5-py2.py3-none-any.whl (755.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file transitions-gui-0.0.5.tar.gz.

File metadata

  • Download URL: transitions-gui-0.0.5.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.19.1 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for transitions-gui-0.0.5.tar.gz
Algorithm Hash digest
SHA256 5de9b6b94600fb7a6419085b15d0c3362bf6fc3946850d4024a993b2567d9f6f
MD5 c968116cf4e45b91fd26eabe5b3edbb8
BLAKE2b-256 e51bb6be14f796b4836e9ff93d1c435853a5e9ef7b7936001cda7bf31248ba8e

See more details on using hashes here.

File details

Details for the file transitions_gui-0.0.5-py2.py3-none-any.whl.

File metadata

  • Download URL: transitions_gui-0.0.5-py2.py3-none-any.whl
  • Upload date:
  • Size: 755.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.4.2 requests/2.19.1 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.3

File hashes

Hashes for transitions_gui-0.0.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cf3b98748707d4b1e213fcbcd1da1156278c7f6f01e49ead33688ad34f53c5d3
MD5 6cd8cfc1e61c526e532e44cbcab85258
BLAKE2b-256 f8cf5b5f425123914b702138effe2da3ba0228cea81dcafbec7feb78d60cdb7e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page