Skip to main content

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 API class with resource registration
  • Built-in filtering, sorting, pagination, and search
  • Support for:
  • Swagger/OpenAPI autodocumentation
  • Works with asyncio, Trio, and Curio

Tests Status PyPI Version Python Versions

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, filtering
  • POST /api/users/ — create
  • GET /api/users/{id}/ — retrieve
  • PUT /api/users/{id}/ — replace
  • PATCH /api/users/{id}/ — update
  • DELETE /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.md for 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

muffin_rest-13.3.3.tar.gz (23.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

muffin_rest-13.3.3-py3-none-any.whl (36.5 kB view details)

Uploaded Python 3

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

Hashes for muffin_rest-13.3.3.tar.gz
Algorithm Hash digest
SHA256 fe7a4c7b686e891bbebb714bac8a9df155c0adf89c147ca68b05a22df98dc94a
MD5 be3fee88250a1f0a2e87eed5bc24f71d
BLAKE2b-256 a4adc1ddf30edc79a8e5a079255034158709d35a698d2546e10986624aeaf207

See more details on using hashes here.

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

Hashes for muffin_rest-13.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 42c394152051d7d40155b8d71bf30462a879c2e67bf813b02c5b25a481d4ce90
MD5 3d79c6bc63571e39e56d8dcb2884cc11
BLAKE2b-256 8402aed56c3b9fd164b5c5d306fbb3a0dd9ba691916fab4009824bf1c328482c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page