Skip to main content

It's a plugin for Muffin framework which provides support for external APIs

Project description

Muffin-Donald

Muffin-Donald is a plugin for the Muffin framework that provides support for asynchronous background tasks, workers, and scheduling.

Tests Status PyPI Version Python Versions

Features

  • ✅ Register async tasks
  • ✅ Run background workers
  • ✅ Schedule periodic tasks (cron or intervals)
  • ✅ RPC-style submit and wait for result
  • ✅ Muffin plugin integration with lifecycle management

Requirements

  • python >= 3.11
  • muffin >= 0.60.0
  • donald >= 0.1.0

Installation

pip install muffin-donald

Usage

Initialize the plugin:

import muffin
from muffin_donald import Plugin

app = muffin.Application("example")

tasks = Plugin(app, backend="redis", backend_params={
    "url": "redis://localhost:6379/0"
}, start_worker=True, start_scheduler=True)

Register a task:

@tasks.task()
async def my_task(x, y):
    return x + y

Submit task for background execution:

my_task.submit(1, 2)

Submit and wait for result (RPC style):

result = await my_task.submit_and_wait(1, 2)
print("Result:", result)  # Result: 3

Schedule a periodic task:

@tasks.task()
async def periodic_task():
    print("Periodic task executed")

periodic_task.schedule("*/5 * * * *")  # every 5 minutes

Handle task errors with on_error:

@tasks.on_error
async def handle_error(exc):
    print("Task error:", exc)

Lifecycle hooks:

@tasks.on_start
async def startup():
    print("Tasks manager started")

@tasks.on_stop
async def shutdown():
    print("Tasks manager stopped")

Healthcheck commands:

muffin <app> tasks-worker-health
muffin <app> tasks-scheduler-health
  • Returns exit code 0 if healthy
  • Returns exit code 1 if unhealthy

Commands

Command Description
tasks-worker Run the worker process
tasks-scheduler Run the scheduler
tasks-worker-health Check worker health
tasks-scheduler-health Check scheduler health

Configuration Options

You can configure the plugin via parameters or Muffin settings (with TASKS_ prefix):

Name Default Description
log_level INFO Logger level
log_config None Logger config
backend memory Backend: memory, redis, amqp
backend_params {} Backend connection params
worker_params {} Worker params
start_worker False Auto start a worker on startup
start_scheduler False Auto start a scheduler on startup

Example in Muffin settings:

TASKS_BACKEND = "redis"
TASKS_BACKEND_PARAMS = {"url": "redis://localhost:6379/0"}
TASKS_START_WORKER = True
TASKS_START_SCHEDULER = True

Testing

Example using manage_lifespan:

import pytest
from asgi_tools.tests import manage_lifespan

async def test_tasks(app, tasks):
    async with manage_lifespan(app):
        result = await my_task.submit_and_wait(1, 2)
        assert result == 3

Bug Tracker

Please report issues or suggestions at https://github.com/klen/muffin-donald/issues

Contributing

Development happens at: https://github.com/klen/muffin-donald

Contributors

  • klen (Kirill Klenov)

License

Licensed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muffin_donald-1.0.4.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

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

muffin_donald-1.0.4-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file muffin_donald-1.0.4.tar.gz.

File metadata

  • Download URL: muffin_donald-1.0.4.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","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_donald-1.0.4.tar.gz
Algorithm Hash digest
SHA256 dbf9ab4239c485d2b9e66c794eebb37b100443fd43bf37f01207c6ef679f307c
MD5 3ef2a96b2d69a0f352e43966b8a26266
BLAKE2b-256 57fb31c34c3203858a19fe2b3f321f164c32f801c70eb2d1dd14f7919b6a3711

See more details on using hashes here.

File details

Details for the file muffin_donald-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: muffin_donald-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 4.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","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_donald-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 98638014a2ac49683d038acd6d7b4882a515212f32a93c096b91d8206e509e46
MD5 2a202923dfef5860cb3922c43d210283
BLAKE2b-256 39fc7813a3b4d826ce5dda3a2b39ffa19f92919252fcf632a53bbc7df6c58d90

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