Skip to main content

Hat statechart engine

Project description

This library is part of Hat Open project - open-source framework of tools and libraries for developing applications used for remote monitoring, control and management of intelligent electronic devices such as IoT devices, PLCs, industrial automation or home automation systems.

Development of Hat Open and associated repositories is sponsored by Končar - Power Plant and Electric Traction Engineering Inc. (Končar KET - https://www.koncar-ket.hr).

For more information see:

About

Hierarchical state machine library with support for SCXML and Graphviz visualization:

EventName = str
"""Event name"""

StateName = str
"""State name"""

ActionName = str
"""Action name"""

ConditionName = str
"""Condition name"""

class Event(typing.NamedTuple):
    name: EventName
    payload: typing.Any = None

class Transition(typing.NamedTuple):
    event: EventName
    target: typing.Optional[StateName]
    actions: typing.List[ActionName] = []
    conditions: typing.List[ConditionName] = []
    internal: bool = False

class State(typing.NamedTuple):
    name: StateName
    children: typing.List['State'] = []
    transitions: typing.List[Transition] = []
    entries: typing.List[ActionName] = []
    exits: typing.List[ActionName] = []
    final: bool = False

Action = typing.Callable[[typing.Optional[Event]], None]
"""Action function"""

Condition = typing.Callable[[typing.Optional[Event]], bool]
"""Condition function"""

class Statechart:
    """Statechart engine"""

    def __init__(self,
                 states: typing.Iterable[State],
                 actions: typing.Dict[str, Action],
                 conditions: typing.Dict[str, Condition] = {}): ...

    @property
    def state(self) -> typing.Optional[StateName]:
        """Current state"""

    def register(self, event: Event):
        """Add event to queue"""

    async def run(self):
        """Run statechart"""

def parse_scxml(scxml: typing.Union[typing.TextIO, pathlib.Path]
                ) -> typing.List[State]:
    """Parse SCXML"""


def create_dot_graph(states: typing.Iterable[State]) -> str:
    """Create DOT representation of statechart"""

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

hat_stc-0.4.1.dev20210215-cp39-none-any.whl (5.7 kB view details)

Uploaded CPython 3.9

File details

Details for the file hat_stc-0.4.1.dev20210215-cp39-none-any.whl.

File metadata

  • Download URL: hat_stc-0.4.1.dev20210215-cp39-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.1 requests-toolbelt/0.9.1 tqdm/4.55.1 CPython/3.9.1

File hashes

Hashes for hat_stc-0.4.1.dev20210215-cp39-none-any.whl
Algorithm Hash digest
SHA256 729ebfe4c0fe45d3706ce28064760e7d4a264e27998c09d94da9465df39a175b
MD5 c1627e1dc864010501e6b8c5a5240d48
BLAKE2b-256 358d4b35b17e8ebf95e3223bdb44d6f0e09a02068626d22939e34b4fb140d8ee

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