Skip to main content

Peewee-AIO integration for Muffin framework

Project description

muffin-peewee-aio — Asynchronous Peewee ORM integration for the Muffin framework.

Tests Status PYPI Version Python Versions

Requirements

  • Python >= 3.10

Installation

Install via pip:

$ pip install muffin-peewee-aio

You can include an async database driver as needed:

$ pip install muffin-peewee-aio[aiosqlite]
$ pip install muffin-peewee-aio[aiopg]
$ pip install muffin-peewee-aio[asyncpg]
$ pip install muffin-peewee-aio[aiomysql]

Usage

from muffin import Application
from muffin_peewee import Plugin as Peewee

# Create the application
app = Application("example")

# Initialize the plugin
db = Peewee()
db.setup(app, PEEWEE_CONNECTION="postgresql://postgres:postgres@localhost:5432/database")

# Or: db = Peewee(app, **options)

Configuration

You can provide options either at initialization or through the application config.

Name

Default

Description

CONNECTION

sqlite:///db.sqlite

Database connection URL

CONNECTION_PARAMS

{}

Extra options passed to the database backend

REPLICAS

None

List of read-replica connection URLs

AUTO_CONNECTION

True

Automatically acquire a DB connection per request

AUTO_TRANSACTION

True

Automatically wrap each request in a transaction

MIGRATIONS_ENABLED

True

Enable the migration engine

MIGRATIONS_PATH

"migrations"

Path to store migration files

PYTEST_SETUP_DB

True

Manage DB setup and teardown in pytest

You can also define options in the Application config using the PEEWEE_ prefix:

PEEWEE_CONNECTION = "postgresql://..."

Note: Muffin application config is case-insensitive.

Models and Queries

Define your model:

class Test(db.Model):
    data = peewee.CharField()

Query the database:

@app.route("/")
async def view(request):
    return [t.data async for t in Test.select()]

Connection Management

By default, connections and transactions are managed automatically. To manage them manually, disable the config flags and use context managers:

@app.route("/")
async def view(request):
    async with db.connection():
        async with db.transaction():
            # Perform DB operations here
            ...

Read Replicas

You can configure read replicas via the REPLICAS option:

db.setup(
    app,
    PEEWEE_CONNECTION="postgresql://...",
    PEEWEE_REPLICAS=[
        "postgresql://replica1/...",
        "postgresql://replica2/...",
    ],
)

Use db.replica() to open a read-only connection to a replica backend:

@app.route("/")
async def view(request):
    async with db.replica():
        return [t.data async for t in Test.select()]

Migrations

Create a migration:

$ muffin example:app peewee-create [NAME] [--auto]

Run migrations:

$ muffin example:app peewee-migrate [NAME] [--fake]

Rollback the latest migration:

$ muffin example:app peewee-rollback

List all migrations:

$ muffin example:app peewee-list

Clear migration history from the database:

$ muffin example:app peewee-clear

Merge all migrations into one:

$ muffin example:app peewee-merge

Testing Support

You can use the conftest() context manager to auto-manage schema setup and teardown during testing:

import pytest

@pytest.mark.asyncio
async def test_example():
    async with db.conftest():
        # Tables are created and dropped automatically
        ...

Bug Tracker

Found a bug or have a suggestion? Please open an issue at: https://github.com/klen/muffin-peewee-aio/issues

Contributing

Development takes place at: https://github.com/klen/muffin-peewee-aio Pull requests are welcome!

Contributors

  • klen (Kirill Klenov)

License

This project is 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_peewee_aio-2.5.0.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

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

muffin_peewee_aio-2.5.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file muffin_peewee_aio-2.5.0.tar.gz.

File metadata

  • Download URL: muffin_peewee_aio-2.5.0.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.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_peewee_aio-2.5.0.tar.gz
Algorithm Hash digest
SHA256 478acc98771aaffd6e118902b83dc936e9cdca0a50be41cff287743e33477b25
MD5 4b58bb826fd9bff1e3a8e729f1373fa6
BLAKE2b-256 446ee09dd5b873f6703133d1ab1912bd310202a629811a89df2c24a9111af992

See more details on using hashes here.

File details

Details for the file muffin_peewee_aio-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: muffin_peewee_aio-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.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_peewee_aio-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 954737e0d47aecfbb86fbc5959a6366a8b481b4233db5dcbf5600841a3f5829a
MD5 c06b44e1f30c80132d5fe88b849a7944
BLAKE2b-256 855f5d5b74ffedbb9d84656cb5deb9bf7f7bc5f3fd5a3e279de87d02839668b2

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