Skip to main content

Action decomposition and execution framework

Project description

Action Trees

Source Code: https://gitlab.com/roxautomation/action-trees


Summary

Action Trees is an asyncio-based Python library for managing hierarchical and asynchronous tasks. It breaks down complex tasks into simpler, independent steps that can be run sequentially or in parallel.

Functionality

  • ActionItem Class: Central class for representing tasks, supporting states like INITIALIZING, RUNNING, PAUSED, and FAILED.
  • Task Management: Provides APIs to start, pause, resume, and cancel tasks asynchronously.
  • Hierarchical Actions: Actions can have child actions, supporting structured, tree-like task management.
  • Parallel Execution: Supports running child tasks concurrently using asyncio.
  • State and Exception Handling: Handles task state transitions and exceptions, ensuring proper state flow.

Example

The following example illustrates a high-level task to prepare and make a cappuccino using the ActionItem class:

import asyncio
from action_trees import ActionItem

class AtomicAction(ActionItem):
    """Basic machine action with no children."""
    def __init__(self, name: str, duration: float = 0.1):
        super().__init__(name=name)
        self._duration = duration

    async def _on_run(self) -> None:
        await asyncio.sleep(self._duration)

class PrepareMachineAction(ActionItem):
    """Prepare the machine."""
    def __init__(self) -> None:
        super().__init__(name="prepare")
        self.add_child(AtomicAction(name="initialize"))
        self.add_child(AtomicAction(name="clean"))

    async def _on_run(self) -> None:
        for child in self.children:
            await child.start()

class MakeCappuccinoAction(ActionItem):
    """Make cappuccino."""
    def __init__(self) -> None:
        super().__init__(name="make_cappuccino")
        self.add_child(AtomicAction(name="boil_water"))
        self.add_child(AtomicAction(name="grind_coffee"))

    async def _on_run(self) -> None:
        await self.run_children_parallel()

class CappuccinoOrder(ActionItem):
    """High-level action to make a cappuccino."""
    def __init__(self) -> None:
        super().__init__(name="cappuccino_order")
        self.add_child(PrepareMachineAction())
        self.add_child(MakeCappuccinoAction())

    async def _on_run(self) -> None:
        for child in self.children:
            await child.start()

async def main() -> None:
    order = CappuccinoOrder()
    await order.start()
    order.display_tree()

if __name__ == "__main__":
    asyncio.run(main())

This code creates a hierarchical task to prepare a machine and make a cappuccino, with some actions running sequentially and others in parallel.

More examples : see examples

State transitions

ActionItem contains a state machine with these transitions. (spec from VDA5050)

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

action_trees-2.0.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

action_trees-2.0.0-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file action_trees-2.0.0.tar.gz.

File metadata

  • Download URL: action_trees-2.0.0.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.3

File hashes

Hashes for action_trees-2.0.0.tar.gz
Algorithm Hash digest
SHA256 5755c525be547d7bfdb47b42758436a2b21a4ead130fc1792d7f78cfef640dfd
MD5 42db1bdab7894a553106af5af0bc8cdd
BLAKE2b-256 405d3ede5e2deec7468d455f6fa4466ddee72a717c981837c3b1132b5f80ce78

See more details on using hashes here.

File details

Details for the file action_trees-2.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for action_trees-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a73f2d7ac1b9c89a60544b30d27f5f933cd1f03bf42cbc50f4485addc4c481b5
MD5 94071bd7eed5669b4108c32947a3c084
BLAKE2b-256 82628d1f4f21c84e3a5830514876f3f357e6c53c103d1de66abb6ce57e6b8c89

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