state_machine/_docs_/state_machine.html
2025-08-17 11:18:44 +02:00

544 lines
37 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" data-content_root="./">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>state_machine package &#8212; state_machine documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/classic.css?v=67a6116b" />
<link rel="stylesheet" type="text/css" href="_static/pydoctheme.css?v=5ff89526" />
<link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="_static/pygments_dark.css?v=5349f25f" />
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" /><link rel="stylesheet" href="_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
<link rel="shortcut icon" type="image/png" href="_static/py.svg">
<script type="text/javascript" src="_static/copybutton.js"></script>
<script type="text/javascript" src="_static/menu.js"></script>
<script type="text/javascript" src="_static/search-focus.js"></script>
<script type="text/javascript" src="_static/themetoggle.js"></script>
</head>
<body>
<div class="mobile-nav">
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu">
<nav class="nav-content" role="navigation">
<label for="menuToggler" class="toggler__label">
<span></span>
</label>
<span class="nav-items-wrapper">
<a href="https://www.python.org/" class="nav-logo">
<img src="_static/py.svg" alt="Python logo">
</a>
<span class="version_switcher_placeholder"></span>
<form role="search" class="search" action="search.html" method="get">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
<path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
</svg>
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q">
<input type="submit" value="Go">
</form>
</span>
</nav>
<div class="menu-wrapper">
<nav class="menu" role="navigation" aria-label="main navigation">
<div class="language_switcher_placeholder"></div>
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label>
<div>
<h3><a href="#">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">state_machine package</a><ul>
<li><a class="reference internal" href="#state-machine-state-machine">state_machine (State Machine)</a></li>
<li><a class="reference internal" href="#state_machine.state_machine"><code class="docutils literal notranslate"><span class="pre">state_machine</span></code></a><ul>
<li><a class="reference internal" href="#state_machine.state_machine.LOG_PREFIX"><code class="docutils literal notranslate"><span class="pre">state_machine.LOG_PREFIX</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.TRANSITIONS"><code class="docutils literal notranslate"><span class="pre">state_machine.TRANSITIONS</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.last_transition_condition"><code class="docutils literal notranslate"><span class="pre">state_machine.last_transition_condition()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.last_transition_condition_was"><code class="docutils literal notranslate"><span class="pre">state_machine.last_transition_condition_was()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state_duration"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state_duration()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state_was"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state_was()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.register_state_change_callback"><code class="docutils literal notranslate"><span class="pre">state_machine.register_state_change_callback()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state_duration"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state_duration()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state_is"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state_is()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.work"><code class="docutils literal notranslate"><span class="pre">state_machine.work()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/state_machine.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</nav>
</div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><img src="_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
<a href="index.html">state_machine documentation</a> &#187;
</li>
<li class="nav-item nav-item-this"><a href="">state_machine package</a></li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="search.html" method="get">
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box">
<input type="submit" value="Go">
</form>
</div>
|
</li>
<li class="right">
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label> |</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-state_machine">
<span id="state-machine-package"></span><h1>state_machine package<a class="headerlink" href="#module-state_machine" title="Link to this heading"></a></h1>
<section id="state-machine-state-machine">
<h2>state_machine (State Machine)<a class="headerlink" href="#state-machine-state-machine" title="Link to this heading"></a></h2>
<p><strong>Author:</strong></p>
<ul class="simple">
<li><p>Dirk Alders &lt;<a class="reference external" href="mailto:sudo-dirk&#37;&#52;&#48;mount-mockery&#46;de">sudo-dirk<span>&#64;</span>mount-mockery<span>&#46;</span>de</a>&gt;</p></li>
</ul>
<p><strong>Description:</strong></p>
<blockquote>
<div><p>This Module helps implementing state machines.</p>
</div></blockquote>
<p><strong>Submodules:</strong></p>
<ul class="simple">
<li><p><a class="reference internal" href="#state_machine.state_machine" title="state_machine.state_machine"><code class="xref py py-class docutils literal notranslate"><span class="pre">state_machine.state_machine</span></code></a></p></li>
</ul>
<p><strong>Unittest:</strong></p>
<blockquote>
<div><p>See also the <a class="reference download internal" download="" href="_downloads/4079615d9c3d6839bdbc63a9084d6376/unittest.pdf"><code class="xref download docutils literal notranslate"><span class="pre">unittest</span></code></a> documentation.</p>
</div></blockquote>
<p><strong>Module Documentation:</strong></p>
</section>
<dl class="py class">
<dt class="sig sig-object py" id="state_machine.state_machine">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">state_machine.</span></span><span class="sig-name descname"><span class="pre">state_machine</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">default_state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">log_lvl</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>default_state</strong> The default state which is set on initialisation.</p></li>
<li><p><strong>log_lvl</strong> The log level, this Module logs to (see Loging-Levels of Module <code class="xref py py-mod docutils literal notranslate"><span class="pre">logging</span></code>)</p></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Additional keyword parameters well be stored as varibles of the instance (e.g. to give variables or methods for transition condition calculation).</p>
</div>
<p>A state machine class can be created by deriving it from this class. The transitions are defined by overriding the variable <cite>TRANSITIONS</cite>.
This Variable is a dictionary, where the key is the start-state and the content is a tuple or list of transitions. Each transition is a tuple or list
including the following information: (condition-method (str), transition-time (number), target_state (str)).</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The condition-method needs to be implemented as part of the new class.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>It is usefull to define the states as variables of this class.</p>
</div>
<p><strong>Example:</strong></p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: UTF-8 -*-</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span> <span class="c1"># nopep8</span>
<span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39;../..&#39;</span><span class="p">)</span> <span class="c1"># nopep8</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">report</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">state_machine</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">report</span><span class="o">.</span><span class="n">default_logging_config</span><span class="p">()</span>
<span class="k">class</span><span class="w"> </span><span class="nc">trafic_lights</span><span class="p">(</span><span class="n">state_machine</span><span class="o">.</span><span class="n">state_machine</span><span class="p">):</span>
<span class="n">LOG_PREFIX</span> <span class="o">=</span> <span class="s1">&#39;TraficLights:&#39;</span>
<span class="n">STATE_RED</span> <span class="o">=</span> <span class="s1">&#39;state_red&#39;</span>
<span class="n">STATE_GREEN</span> <span class="o">=</span> <span class="s1">&#39;state_green&#39;</span>
<span class="n">CONDITION_TRUE</span> <span class="o">=</span> <span class="s1">&#39;condition_true&#39;</span>
<span class="n">CONDITION_PEDASTRIAN_REQUEST</span> <span class="o">=</span> <span class="s1">&#39;condition_pedastrian_request&#39;</span>
<span class="n">TRANSITIONS</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">STATE_RED</span><span class="p">:</span> <span class="p">(</span>
<span class="p">(</span><span class="n">CONDITION_PEDASTRIAN_REQUEST</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">STATE_GREEN</span><span class="p">),</span>
<span class="p">),</span>
<span class="n">STATE_GREEN</span><span class="p">:</span> <span class="p">(</span>
<span class="p">(</span><span class="n">CONDITION_TRUE</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="n">STATE_RED</span><span class="p">),</span>
<span class="p">)</span>
<span class="p">}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">condition_true</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span><span class="w"> </span><span class="nf">set_padestrian_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__log_lvl__</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> Pedestrian gave state change request.&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">LOG_PREFIX</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pedastrian_request</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">def</span><span class="w"> </span><span class="nf">condition_pedastrian_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">pedastrian_request</span>
<span class="n">sm</span> <span class="o">=</span> <span class="n">trafic_lights</span><span class="p">(</span><span class="n">trafic_lights</span><span class="o">.</span><span class="n">STATE_RED</span><span class="p">,</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">,</span> <span class="n">pedastrian_request</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">sm</span><span class="o">.</span><span class="n">register_state_change_callback</span><span class="p">(</span><span class="n">sm</span><span class="o">.</span><span class="n">STATE_GREEN</span><span class="p">,</span> <span class="n">sm</span><span class="o">.</span><span class="n">CONDITION_PEDASTRIAN_REQUEST</span><span class="p">,</span> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">,</span>
<span class="s1">&#39;Callback information: Traffic light had been changed to green caused by pedastrian request&#39;</span><span class="p">)</span>
<span class="k">while</span> <span class="ow">not</span> <span class="n">sm</span><span class="o">.</span><span class="n">previous_state_was</span><span class="p">(</span><span class="n">sm</span><span class="o">.</span><span class="n">STATE_GREEN</span><span class="p">):</span>
<span class="k">if</span> <span class="n">sm</span><span class="o">.</span><span class="n">this_state_is</span><span class="p">(</span><span class="n">sm</span><span class="o">.</span><span class="n">STATE_RED</span><span class="p">)</span> <span class="ow">and</span> <span class="n">sm</span><span class="o">.</span><span class="n">this_state_duration</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mf">0.2</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">sm</span><span class="o">.</span><span class="n">condition_pedastrian_request</span><span class="p">():</span>
<span class="n">sm</span><span class="o">.</span><span class="n">set_padestrian_request</span><span class="p">()</span>
<span class="n">sm</span><span class="o">.</span><span class="n">work</span><span class="p">()</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">INFO</span> <span class="o">-</span> <span class="n">state_machine</span> <span class="o">-</span> <span class="n">TraficLights</span><span class="p">:</span> <span class="n">State</span> <span class="n">change</span> <span class="p">(</span><span class="s1">&#39;__init__&#39;</span><span class="p">):</span> <span class="kc">None</span> <span class="o">-&gt;</span> <span class="s1">&#39;state_red&#39;</span>
<span class="n">INFO</span> <span class="o">-</span> <span class="n">main</span> <span class="o">-</span> <span class="n">TraficLights</span><span class="p">:</span> <span class="n">Pedestrian</span> <span class="n">gave</span> <span class="n">state</span> <span class="n">change</span> <span class="n">request</span><span class="o">.</span>
<span class="n">INFO</span> <span class="o">-</span> <span class="n">state_machine</span> <span class="o">-</span> <span class="n">TraficLights</span><span class="p">:</span> <span class="n">State</span> <span class="n">change</span> <span class="p">(</span><span class="s1">&#39;condition_pedastrian_request&#39;</span><span class="p">):</span> <span class="s1">&#39;state_red&#39;</span> <span class="o">-&gt;</span> <span class="s1">&#39;state_green&#39;</span>
<span class="n">DEBUG</span> <span class="o">-</span> <span class="n">state_machine</span> <span class="o">-</span> <span class="n">Executing</span> <span class="n">callback</span> <span class="mi">0</span> <span class="o">-</span> <span class="n">logging</span><span class="o">.</span><span class="n">info</span>
<span class="n">INFO</span> <span class="o">-</span> <span class="n">main</span> <span class="o">-</span> <span class="n">Callback</span> <span class="n">information</span><span class="p">:</span> <span class="n">Traffic</span> <span class="n">light</span> <span class="n">had</span> <span class="n">been</span> <span class="n">changed</span> <span class="n">to</span> <span class="n">green</span> <span class="n">caused</span> <span class="n">by</span> <span class="n">pedastrian</span> <span class="n">request</span>
<span class="n">INFO</span> <span class="o">-</span> <span class="n">state_machine</span> <span class="o">-</span> <span class="n">TraficLights</span><span class="p">:</span> <span class="n">State</span> <span class="n">change</span> <span class="p">(</span><span class="s1">&#39;condition_true&#39;</span><span class="p">):</span> <span class="s1">&#39;state_green&#39;</span> <span class="o">-&gt;</span> <span class="s1">&#39;state_red&#39;</span>
</pre></div>
</div>
<dl class="py attribute">
<dt class="sig sig-object py" id="state_machine.state_machine.LOG_PREFIX">
<span class="sig-name descname"><span class="pre">LOG_PREFIX</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">'StateMachine:'</span></em><a class="headerlink" href="#state_machine.state_machine.LOG_PREFIX" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="state_machine.state_machine.TRANSITIONS">
<span class="sig-name descname"><span class="pre">TRANSITIONS</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{}</span></em><a class="headerlink" href="#state_machine.state_machine.TRANSITIONS" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.last_transition_condition">
<span class="sig-name descname"><span class="pre">last_transition_condition</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.last_transition_condition" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The last transition condition.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>str</p>
</dd>
</dl>
<p>This method returns the last transition condition.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.last_transition_condition_was">
<span class="sig-name descname"><span class="pre">last_transition_condition_was</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">condition</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.last_transition_condition_was" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>condition</strong> (<em>str</em>) The condition to be checked</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>True if the given condition was the last transition condition, else False.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bool</p>
</dd>
</dl>
<p>This methods returns the boolean information if the last transition condition is equivalent to the given condition.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.previous_state">
<span class="sig-name descname"><span class="pre">previous_state</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.previous_state" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The previous state.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>str</p>
</dd>
</dl>
<p>This method returns the previous state of the state machine.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.previous_state_duration">
<span class="sig-name descname"><span class="pre">previous_state_duration</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.previous_state_duration" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The time how long the previous state was active.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>float</p>
</dd>
</dl>
<p>This method returns the time how long the previous state was active.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.previous_state_was">
<span class="sig-name descname"><span class="pre">previous_state_was</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">state</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.previous_state_was" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>state</strong> (<em>str</em>) The state to be checked</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>True if the given state was previously active, else False.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bool</p>
</dd>
</dl>
<p>This methods returns the boolean information if the state machine was previously in the given state.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.register_state_change_callback">
<span class="sig-name descname"><span class="pre">register_state_change_callback</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">state</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">condition</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">callback</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.register_state_change_callback" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>state</strong> (<em>str</em>) The target state. The callback will be executed, if the state machine changes to this state. None means all states.</p></li>
<li><p><strong>condition</strong> (<em>str</em>) The transition condition. The callback will be executed, if this condition is responsible for the state change. None means all conditions.</p></li>
<li><p><strong>callback</strong> The callback to be executed.</p></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Additional arguments and keyword parameters are supported. These arguments and parameters will be used as arguments and parameters for the callback execution.</p>
</div>
<p>This methods allows to register callbacks which will be executed on state changes.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.this_state">
<span class="sig-name descname"><span class="pre">this_state</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.this_state" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The current state.</p>
</dd>
</dl>
<p>This method returns the current state of the state machine.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.this_state_duration">
<span class="sig-name descname"><span class="pre">this_state_duration</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.this_state_duration" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p>The time how long the current state is active.</p>
</dd>
<dt class="field-even">Return type<span class="colon">:</span></dt>
<dd class="field-even"><p>float</p>
</dd>
</dl>
<p>This method returns the time how long the current state is active.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.this_state_is">
<span class="sig-name descname"><span class="pre">this_state_is</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">state</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.this_state_is" title="Link to this definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>state</strong> (<em>str</em>) The state to be checked</p>
</dd>
<dt class="field-even">Returns<span class="colon">:</span></dt>
<dd class="field-even"><p>True if the given state is currently active, else False.</p>
</dd>
<dt class="field-odd">Return type<span class="colon">:</span></dt>
<dd class="field-odd"><p>bool</p>
</dd>
</dl>
<p>This methods returns the boolean information if the state machine is currently in the given state.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="state_machine.state_machine.work">
<span class="sig-name descname"><span class="pre">work</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#state_machine.state_machine.work" title="Link to this definition"></a></dt>
<dd><p>This Method needs to be executed cyclicly to enable the state machine.</p>
</dd></dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<div>
<h3><a href="#">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">state_machine package</a><ul>
<li><a class="reference internal" href="#state-machine-state-machine">state_machine (State Machine)</a></li>
<li><a class="reference internal" href="#state_machine.state_machine"><code class="docutils literal notranslate"><span class="pre">state_machine</span></code></a><ul>
<li><a class="reference internal" href="#state_machine.state_machine.LOG_PREFIX"><code class="docutils literal notranslate"><span class="pre">state_machine.LOG_PREFIX</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.TRANSITIONS"><code class="docutils literal notranslate"><span class="pre">state_machine.TRANSITIONS</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.last_transition_condition"><code class="docutils literal notranslate"><span class="pre">state_machine.last_transition_condition()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.last_transition_condition_was"><code class="docutils literal notranslate"><span class="pre">state_machine.last_transition_condition_was()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state_duration"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state_duration()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.previous_state_was"><code class="docutils literal notranslate"><span class="pre">state_machine.previous_state_was()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.register_state_change_callback"><code class="docutils literal notranslate"><span class="pre">state_machine.register_state_change_callback()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state_duration"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state_duration()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.this_state_is"><code class="docutils literal notranslate"><span class="pre">state_machine.this_state_is()</span></code></a></li>
<li><a class="reference internal" href="#state_machine.state_machine.work"><code class="docutils literal notranslate"><span class="pre">state_machine.work()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/state_machine.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><img src="_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"></li>
<li><a href="https://www.python.org/">Python</a> &#187;</li>
<li class="switchers">
<div class="language_switcher_placeholder"></div>
<div class="version_switcher_placeholder"></div>
</li>
<li>
<a href="index.html">state_machine documentation</a> &#187;
</li>
<li class="nav-item nav-item-this"><a href="">state_machine package</a></li>
<li class="right">
<div class="inline-search" role="search">
<form class="inline-search" action="search.html" method="get">
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box">
<input type="submit" value="Go">
</form>
</div>
|
</li>
<li class="right">
<label class="theme-selector-label">
Theme
<select class="theme-selector" oninput="activateTheme(this.value)">
<option value="auto" selected>Auto</option>
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label> |</li>
</ul>
</div>
<div class="footer">
&copy;
Copyright
2025, Dirk Alders.
<br>
This page is licensed under the Python Software Foundation License Version 2.
<br>
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
<br>
<br>
The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br>
<br>
<br>
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>