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.11
- 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.
Metadata
Release files for muffin-rest 14.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| muffin_rest-14.2.0.tar.gz | 26.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| muffin_rest-14.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 64.2 kB
Release files / muffin_rest-14.2.0.tar.gz
| Download URL | muffin_rest-14.2.0.tar.gz |
|---|---|
| Size | 26.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1630da1101455682c87c1b4a022c90ed94630977b3040d9ee17e3527a1ffc8ce
|
|
BLAKE2b-256 checksum How to use checksums |
ad934fc82c5003220991c1b599b994f64c732ef38a70398ec1f972fa02717ead
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}
|
Release files / muffin_rest-14.2.0-py3-none-any.whl
| Download URL | muffin_rest-14.2.0-py3-none-any.whl |
|---|---|
| Size | 37.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
321c35d1d75815817d7a7ce4b354d27be333ec1624793d5bc564935984b40aae
|
|
BLAKE2b-256 checksum How to use checksums |
d21b59c7b4ac3587afcb149d08b3b7aecabff1de1d99fb9d1d40ed79a4ecee6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","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}
|
Security for muffin-rest 14.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.