The package provides enhanced support for writing REST APIs with Muffin framework
Project description
Muffin‑REST
Muffin‑REST simplifies building RESTful APIs with Muffin by offering:
- Declarative
APIclass with resource registration - Built-in filtering, sorting, pagination, and search
- Support for:
- Peewee ORM via
PeeweeEndpoint - SQLAlchemy Core via
SAEndpoint - MongoDB via
MongoEndpoint
- Peewee ORM via
- Swagger/OpenAPI autodocumentation
- Works with asyncio, Trio, and Curio
Requirements
- Python >= 3.10
- Trio requires Peewee backend
Installation
Install core package:
pip install muffin-rest
Add optional backend support:
- SQLAlchemy Core:
pip install muffin-rest[sqlalchemy] - Peewee ORM:
pip install muffin-rest[peewee] - YAML support for Swagger:
pip install muffin-rest[yaml]
Quickstart (Peewee example)
from muffin import Application
from muffin_rest import API
from muffin_rest.peewee import PeeweeEndpoint
from models import User # your Peewee model
app = Application("myapp")
api = API(title="User Service", version="1.0")
@api.route
class UsersEndpoint(PeeweeEndpoint):
class Meta:
model = User
lookup_field = "id"
filters = ["name", "email"]
ordering = ["-created_at"]
api.setup(app, prefix="/api", swagger=True)
Endpoints available:
GET /api/users/— list with pagination, search, filteringPOST /api/users/— createGET /api/users/{id}/— retrievePUT /api/users/{id}/— replacePATCH /api/users/{id}/— updateDELETE /api/users/{id}/— remove- Docs:
/api/docs/, OpenAPI spec:/api/openapi.json
Usage with SQLAlchemy
from muffin_rest import API
from muffin_rest.sqlalchemy import SAEndpoint
from models import my_table, db_engine
api = API()
@api.route
class MySAEndpoint(SAEndpoint):
class Meta:
table = my_table
database = db_engine
api.setup(app)
Usage with MongoDB
from muffin_rest import API
from muffin_rest.mongo import MongoEndpoint
from models import mongo_collection
api = API()
@api.route
class MyMongoEndpoint(MongoEndpoint):
class Meta:
collection = mongo_collection
api.setup(app)
Advanced Configuration
Customize Swagger and routes via constructor:
api = API(
title="Service API",
version="2.1",
swagger_ui=True,
openapi_path="/api/openapi.json",
docs_path="/api/docs/"
)
Contributing & Examples
- See
examples/for live application demos - Tests in
tests/focus on filtering, pagination, status codes - Check
CHANGELOG.mdfor latest changes
Bug Tracker
Report bugs or request features: https://github.com/klen/muffin-rest/issues
Contributing
Repo: https://github.com/klen/muffin-rest Pull requests, example additions, docs improvements welcome!
Contributors
- klen (Kirill Klenov)
License
Licensed under the MIT license.
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 muffin_rest-13.3.3.tar.gz.
File metadata
- Download URL: muffin_rest-13.3.3.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fe7a4c7b686e891bbebb714bac8a9df155c0adf89c147ca68b05a22df98dc94a
|
|
| MD5 |
be3fee88250a1f0a2e87eed5bc24f71d
|
|
| BLAKE2b-256 |
a4adc1ddf30edc79a8e5a079255034158709d35a698d2546e10986624aeaf207
|
File details
Details for the file muffin_rest-13.3.3-py3-none-any.whl.
File metadata
- Download URL: muffin_rest-13.3.3-py3-none-any.whl
- Upload date:
- Size: 36.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42c394152051d7d40155b8d71bf30462a879c2e67bf813b02c5b25a481d4ce90
|
|
| MD5 |
3d79c6bc63571e39e56d8dcb2884cc11
|
|
| BLAKE2b-256 |
8402aed56c3b9fd164b5c5d306fbb3a0dd9ba691916fab4009824bf1c328482c
|