Finite State Machine framework with data modes, resource management, and streaming support.
pip install dataknobs-fsm
from dataknobs_fsm import SimpleFSM
from dataknobs_fsm.core.data_modes import DataHandlingMode
# Define configuration
config = {
"name": "data_pipeline",
"states": [
{"name": "start", "is_start": True},
{"name": "process"},
{"name": "end", "is_end": True}
],
"arcs": [
{
"from": "start",
"to": "process",
"transform": {
"type": "inline",
"code": "lambda data, ctx: {**data, 'processed': True}"
}
},
{"from": "process", "to": "end"}
]
}
# Create and run FSM
fsm = SimpleFSM(config, data_mode=DataHandlingMode.COPY)
result = fsm.process({"input": "data"})
print(f"Result: {result['data']}")
from dataknobs_fsm import AdvancedFSM, ExecutionMode
import asyncio
async def debug_example():
# Create FSM with debug mode
fsm = AdvancedFSM(
"config.yaml",
execution_mode=ExecutionMode.DEBUG
)
# Add breakpoint
fsm.add_breakpoint("process")
# Create context and run
context = fsm.create_context({"input": "data"})
await fsm.run_until_breakpoint(context)
print(f"Stopped at: {context.current_state}")
# Continue execution
await fsm.step(context)
asyncio.run(debug_example())
The examples/
directory contains comprehensive examples:
# Navigate to the FSM package
cd packages/fsm
# Run the database ETL example
uv run python examples/database_etl.py
# Run the data processing pipeline
uv run python examples/data_pipeline_example.py
# Run streaming example
uv run python examples/end_to_end_streaming.py
# Run with custom parameters
uv run python examples/database_etl.py --batch-size 500
The FSM framework provides three data handling modes:
from dataknobs_fsm import SimpleFSM
from dataknobs_fsm.core.data_modes import DataHandlingMode
# Use COPY mode for safety
fsm = SimpleFSM(config, data_mode=DataHandlingMode.COPY)
# Use REFERENCE mode for large datasets
fsm = SimpleFSM(config, data_mode=DataHandlingMode.REFERENCE)
# Use DIRECT mode for performance
fsm = SimpleFSM(config, data_mode=DataHandlingMode.DIRECT)
For detailed documentation, see:
Run the tests with:
cd packages/fsm
uv run pytest tests/ -v
This package is part of the DataKnobs ecosystem. For development setup and guidelines, see the main repository README.
Licensed under the same terms as the DataKnobs project.