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 likeINITIALIZING
,RUNNING
,PAUSED
, andFAILED
.- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5755c525be547d7bfdb47b42758436a2b21a4ead130fc1792d7f78cfef640dfd |
|
MD5 | 42db1bdab7894a553106af5af0bc8cdd |
|
BLAKE2b-256 | 405d3ede5e2deec7468d455f6fa4466ddee72a717c981837c3b1132b5f80ce78 |
File details
Details for the file action_trees-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: action_trees-2.0.0-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a73f2d7ac1b9c89a60544b30d27f5f933cd1f03bf42cbc50f4485addc4c481b5 |
|
MD5 | 94071bd7eed5669b4108c32947a3c084 |
|
BLAKE2b-256 | 82628d1f4f21c84e3a5830514876f3f357e6c53c103d1de66abb6ce57e6b8c89 |