Metadata-Version: 2.3
Name: powertools-request-binding
Version: 0.1.0
Summary: An extension for AWS Lambda Powertools that provides model binding for request bodies, query parameters and path parameters.
License: MIT
Author: Alejandro
Author-email: clandro89@gmail.com
Requires-Python: >=3.10,<4.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: aws-lambda-powertools (>=3.29.0,<4.0.0)
Requires-Dist: modmex (>=1.1.3,<2.0.0)
Description-Content-Type: text/markdown

# powertools-request-binding

Middleware for AWS Lambda Powertools Event Handler that validates and injects route arguments using Modmex models instead of Pydantic.

## Why

Powertools request validation currently requires Pydantic. This package provides a lightweight alternative for request binding in REST API and HTTP API handlers when your project uses Modmex.

## Installation

```bash
poetry add powertools-request-binding modmex
```

## Usage

```python
from typing import Annotated

from modmex import BaseModel
from aws_lambda_powertools.event_handler import APIGatewayRestResolver

from powertools_request_binding import Body, Query, RequestBindingMiddleware


class CreateTodoRequest(BaseModel):
	title: str
	completed: bool


app = APIGatewayRestResolver()
app.use(middlewares=[RequestBindingMiddleware()])


@app.post("/todos/<todo_id>")
def create_todo(
	todo_id: int,
	payload: Annotated[CreateTodoRequest, Body()],
	source: Annotated[str | None, Query()] = None,
):
	return {
		"todo_id": todo_id,
		"title": payload.title,
		"completed": payload.completed,
		"source": source,
	}
```

## Supported Input Sources

- Path parameters
- Query parameters
- Headers
- JSON body

## Notes

- This package focuses on request argument binding only.
- Powertools `Depends(...)` support remains native and should be used directly from Powertools when needed.

