Metadata-Version: 2.4
Name: mm-web
Version: 0.1.0
Summary: MetaMessage protocol integrations for Python web frameworks
Project-URL: Homepage, https://github.com/metamessage/mm-web-py
Project-URL: Documentation, https://github.com/metamessage/mm-web-py#readme
Project-URL: Repository, https://github.com/metamessage/mm-web-py
Project-URL: Issues, https://github.com/metamessage/mm-web-py/issues
Author: mm-web-py contributors
License: MIT
Keywords: fastapi,flask,metamessage,mm,protocol,serialization
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Classifier: Programming Language :: Python :: 3.16
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: django>=5.2.15
Requires-Dist: fastapi>=0.136.3
Requires-Dist: httpx>=0.24.0
Requires-Dist: metamessage>=0.2.7
Requires-Dist: uvicorn>=0.49.0
Provides-Extra: dev
Requires-Dist: django>=3.2.0; extra == 'dev'
Requires-Dist: fastapi>=0.128.8; extra == 'dev'
Requires-Dist: flask>=2.0.0; extra == 'dev'
Requires-Dist: httpx>=0.24.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Requires-Dist: starlette>=0.27.0; extra == 'dev'
Provides-Extra: django
Requires-Dist: django>=3.2.0; extra == 'django'
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.128.8; extra == 'fastapi'
Requires-Dist: starlette>=0.27.0; extra == 'fastapi'
Provides-Extra: flask
Requires-Dist: flask>=2.0.0; extra == 'flask'
Description-Content-Type: text/markdown

# mm-web

MetaMessage protocol integrations for Python web frameworks.

This monorepo provides three packages:

- **[mm-core](src/mm_core/)** - Shared types, errors, and HTTP client SDK (framework-agnostic)
- **[mm-fastapi](src/mm_fastapi/)** - FastAPI integration with `MMRouter`, `MMMiddleware`, and route decorators
- **[mm-flask](src/mm_flask/)** - Flask integration with `MMFlask`, `MMMiddleware`, and route decorators

## What is MetaMessage?

[MetaMessage](https://github.com/metamessage/metamessage) is a binary serialization protocol that provides efficient encoding/decoding of structured data. It follows the convention:

- **GET/DELETE** requests: Parameters are hex-encoded as `?data=<hex>` query parameter
- **POST/PUT/PATCH** requests: Body is binary MetaMessage
- **Responses**: Always binary MetaMessage

## Packages

### mm-core

Shared framework-agnostic code:

- `CONTENT_TYPE_METAMESSAGE` - Content type constant (`application/metamessage`)
- `MMEncoderError` / `MMDecoderError` - Encoding/decoding error classes
- `MMClient` / `AsyncMMClient` - Synchronous and asynchronous HTTP clients

### mm-fastapi

```python
from fastapi import FastAPI
from mm_fastapi import MMRouter

app = FastAPI()
router = MMRouter(app)

@router.get("/users")
async def list_users(req: User) -> User:
    return User(name=req.name, age=req.age)

@router.post("/users")
async def create_user(req: User) -> User:
    return User(name=req.name, age=req.age)
```

### mm-flask

```python
from flask import Flask
from mm_flask import MMFlask, MMMiddleware

app = Flask(__name__)
MMMiddleware(app)
mm = MMFlask(app)

@mm.get("/users")
def list_users(req: User) -> User:
    return User(name=req.name, age=req.age)

@mm.post("/users")
def create_user(req: User) -> User:
    return User(name=req.name, age=req.age)
```

## Installation

### Install all packages

```bash
pip install -e ".[dev]"
```

### Install specific framework extras

```bash
# FastAPI
pip install -e ".[fastapi]"

# Flask
pip install -e ".[flask]"
```

## Testing

```bash
pip install -e ".[dev]"
pytest tests/ -v
```

## Project Structure

```
src/
├── mm_core/           # Shared types, errors, client SDK
├── mm_fastapi/        # FastAPI integration
└── mm_flask/          # Flask integration
tests/
├── mm-fastapi/        # FastAPI tests
└── mm-flask/          # Flask tests
examples/
├── mm-fastapi/        # FastAPI examples
└── mm-flask/          # Flask examples
```

## License

MIT License