Skip to main content

Celery DI/AOP integration plugin for Spakky Framework

Project description

spakky-celery

Celery integration plugin for Spakky Framework.

Provides AOP-based automatic task dispatch and periodic schedule registration — methods decorated with @task or @schedule are intercepted and routed to Celery without explicit dispatcher calls.

Installation

pip install spakky-celery

Requires: spakky-task (installed automatically as a dependency)

Features

  • AOP-based dispatch: @task methods are intercepted by aspects — no manual dispatch() calls
  • Broker dispatch: All @task calls are sent to the Celery broker via send_task()
  • Schedule registration: @schedule methods are registered to Celery Beat automatically
  • Worker-context detection: Uses a context key to prevent re-dispatch inside workers
  • Auto-registration: @TaskHandler pods are scanned and registered as Celery tasks automatically
  • Full configuration: Broker URL, serializer, timezone, and more via environment variables

Configuration

Set environment variables with the SPAKKY_CELERY__ prefix:

Variable Default Description
SPAKKY_CELERY__BROKER_URL (required) Celery broker URL (e.g., amqp://user:pass@host:5672//)
SPAKKY_CELERY__RESULT_BACKEND None Result backend URL. None disables result storage
SPAKKY_CELERY__APP_NAME spakky-celery Celery application name
SPAKKY_CELERY__TASK_SERIALIZER json Task message serializer (json, pickle, yaml, msgpack)
SPAKKY_CELERY__RESULT_SERIALIZER json Result serializer
SPAKKY_CELERY__ACCEPT_CONTENT ["json"] Accepted content types
SPAKKY_CELERY__TIMEZONE UTC IANA timezone (e.g., Asia/Seoul)
SPAKKY_CELERY__ENABLE_UTC true Use UTC for internal datetime handling

Usage

1. Define task handlers

from datetime import time, timedelta

from spakky.task import TaskHandler, Crontab, Weekday, task, schedule


@TaskHandler()
class EmailTaskHandler:
    @task
    def send_email(self, to: str, subject: str, body: str) -> None:
        """Dispatched to Celery broker via send_task()."""
        send_smtp(to, subject, body)


@TaskHandler()
class MaintenanceHandler:
    @schedule(interval=timedelta(minutes=30))
    def health_check(self) -> None:
        """Registered as Celery Beat periodic task — runs every 30 minutes."""
        ...

    @schedule(at=time(3, 0))
    def daily_cleanup(self) -> None:
        """Runs daily at 03:00."""
        ...

    @schedule(crontab=Crontab(weekday=Weekday.MONDAY, hour=9))
    def weekly_report(self) -> None:
        """Runs every Monday at 09:00."""
        ...

2. Bootstrap the application

from spakky.core.application.application import SpakkyApplication
from spakky.core.application.application_context import ApplicationContext

import spakky.plugins.celery

app = (
    SpakkyApplication(ApplicationContext())
    .load_plugins(include={spakky.plugins.celery.PLUGIN_NAME})
    .scan()
    .start()
)

3. Call task methods normally

handler = app.container.get(EmailTaskHandler)

# Dispatched to broker — AOP intercepts and calls send_task()
handler.send_email("user@example.com", "Hello", "World")

The AOP aspect intercepts the calls and routes them to Celery automatically.

Dispatch Behavior

Decorator Behavior Celery API
@task Dispatch to broker on each call send_task()
@schedule Register in Celery Beat beat_schedule

Components

Component Description
CeleryConfig Configuration loaded from environment variables
CeleryPostProcessor Scans @TaskHandler pods and registers methods as Celery tasks/schedules
CeleryTaskDispatchAspect AOP aspect intercepting sync @task calls
AsyncCeleryTaskDispatchAspect AOP aspect intercepting async @task calls

Errors

Error Description
InvalidScheduleRouteError ScheduleRoute has no valid schedule specification

Related Packages

  • spakky-task: Core task abstractions (@TaskHandler, @task, @schedule, Crontab)
  • spakky-rabbitmq: RabbitMQ event transport (can also be used as Celery broker)

License

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

spakky_celery-6.1.2.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

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

spakky_celery-6.1.2-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file spakky_celery-6.1.2.tar.gz.

File metadata

  • Download URL: spakky_celery-6.1.2.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spakky_celery-6.1.2.tar.gz
Algorithm Hash digest
SHA256 7af78cda8973d2eec10febaea96b6a51349213c030c247cdd76af580283f997a
MD5 01f05898d818b9f551ead921d143f6c4
BLAKE2b-256 84b0e4f91bff1881167f9ec7d53b5c6341324129c7086e3f39da83453b1fccf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_celery-6.1.2.tar.gz:

Publisher: release.yml on E5presso/spakky-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spakky_celery-6.1.2-py3-none-any.whl.

File metadata

  • Download URL: spakky_celery-6.1.2-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spakky_celery-6.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 806c1c65fbf4d0d949988083041588f4ffaac81505cbd010fa7f1ad8b309d294
MD5 27039c02bb4d8635724a9e92d139a4fa
BLAKE2b-256 fb9644102ec4a215197b84fef742586244f54b82980c4f32a9299cd2a1b76fcd

See more details on using hashes here.

Provenance

The following attestation bundles were made for spakky_celery-6.1.2-py3-none-any.whl:

Publisher: release.yml on E5presso/spakky-framework

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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