Motia framework for III Engine
Project description
Motia Framework for Python
High-level framework for building workflows with the III Engine.
Installation
uv pip install motia
Usage
Defining a Step
from motia import FlowContext, queue
config = {
"name": "process-data",
"triggers": [queue("data.created")],
"enqueues": ["data.processed"],
}
async def handler(data: dict, ctx: FlowContext) -> None:
ctx.logger.info("Processing data", data)
await ctx.enqueue({"topic": "data.processed", "data": data})
API Steps
from motia import ApiRequest, ApiResponse, FlowContext, http
config = {
"name": "create-item",
"triggers": [http("POST", "/items")],
"emits": ["item.created"],
}
async def handler(req: ApiRequest, ctx: FlowContext) -> ApiResponse:
ctx.logger.info("Creating item", req.body)
await ctx.enqueue({"topic": "item.created", "data": req.body})
return ApiResponse(status=201, body={"id": "123"})
Channel-based HTTP (Streaming)
import json
from typing import Any
from motia import FlowContext, MotiaHttpArgs, http
config = {
"name": "HttpChannelEcho",
"triggers": [http("POST", "/http-channel/echo")],
}
async def handler(args: MotiaHttpArgs[Any], ctx: FlowContext[Any]) -> None:
request = args.request
response = args.response
chunks: list[bytes] = []
async for chunk in request.request_body.stream:
chunks.append(chunk if isinstance(chunk, bytes) else str(chunk).encode("utf-8"))
await response.status(200)
await response.headers({"content-type": "application/json"})
response.writer.stream.write(json.dumps({"receivedBytes": len(b"".join(chunks))}).encode("utf-8"))
response.close()
Streams
from motia import Stream
# Define a stream
todo_stream = Stream[dict]("todos")
# Use the stream
item = await todo_stream.get("group-1", "item-1")
await todo_stream.set("group-1", "item-1", {"title": "Buy milk"})
await todo_stream.delete("group-1", "item-1")
items = await todo_stream.get_group("group-1")
Build & Publish
python -m build
uv publish --index cloudsmith dist/*
Features
- Event-driven step definitions
- API route handlers
- Cron job support
- Stream-based state management
- Type-safe context with logging
Testing
-
Install dev dependencies:
uv sync --extra dev
-
Run the unit test suite:
uv run pytest -m "not integration"
-
Run the unit test suite with coverage:
uv run pytest -m "not integration" --cov=src/motia --cov-report=term-missing
Running Integration Tests
Integration tests require a running III Engine instance on the test ports below.
uv run pytest -m integration
Test Configuration
Tests use non-default ports to avoid conflicts:
- Engine WebSocket:
ws://localhost:49199 - HTTP API:
http://localhost:3199
Set III_ENGINE_PATH environment variable to point to the III engine binary.
Test Coverage
The coverage command above measures the unit-testable Python package code under src/motia.
The integration test suite covers:
- Bridge connection and function registration
- API triggers (HTTP endpoints)
- PubSub messaging
- Logging module
- Motia framework integration
- Stream operations (when available)
- State management (when available)
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file motia-1.0.4rc1.tar.gz.
File metadata
- Download URL: motia-1.0.4rc1.tar.gz
- Upload date:
- Size: 127.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19a3fbb0c7133fe010b9ca435c0bb2665867670dc6c9fcdd2f41dca7cd691959
|
|
| MD5 |
0a80a8be349c3542b593908ccd62762b
|
|
| BLAKE2b-256 |
ec7eab87d1f208fdc4830538873ca26dd786a08e50d593d2138b7cc87bf55176
|
File details
Details for the file motia-1.0.4rc1-py3-none-any.whl.
File metadata
- Download URL: motia-1.0.4rc1-py3-none-any.whl
- Upload date:
- Size: 34.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82c68c97413ea94833bc67501fa44c6122f6e0c63f9ce5c121d54ee20a034c00
|
|
| MD5 |
dd16576202147589bf492e93a2868a1d
|
|
| BLAKE2b-256 |
c72e64cc16b2b72da1121d668ecf4ab567027c19285f83554676dec137011a11
|