Skip to main content

A Python toolkit to build Serverless Event-Driven Applications on AWS.

Project description

SEDA

A Python toolkit to build Serverless Event-Driven Applications on AWS.
Documentation: https://seda.domake.io (pending)
Examples: /templates

Test Coverage Codacy Package version

What

  • Allows to schedule periodic and one-time tasks on EventBridge Scheduler.
  • Simplifies creating, executing, and managing asynchronous task using SNS messages and Lambda events.
  • Includes @decorators in addition to @app.decorators for reusable apps.
  • Works well with any framework, interface, toolkit... see /templates.
  • Provides Serverless framework support via plugin.
  • Other event sources, e.g. CloudWatch, Kinesis, Dynamodb, SQS, S3...
  • Easy to read documentation and tests.
  • SAM templates and CDK support.

Installation

pip install seda

Example

main.py:

from datetime import datetime

from seda import Seda

seda = Seda()


@seda.schedule("cron(* * * * ? *)", args=("minutes",))
async def myschedule(timespec: str = "auto") -> None:
    seda.log.info(f"myschedule: {datetime.now().isoformat(timespec=timespec)}")


@seda.task
async def mytask(timespec: str = "auto") -> None:
    seda.log.info(f"mytask: {datetime.now().isoformat(timespec=timespec)}")

main.seda is an AWS Lambda handler in charge of managing the creation and execution of our tasks.

  • @schedule: creates a new periodic "schedule" on EventBridge at deployment time.
  • @task: creates one-time asynchronous tasks at runtime:
    • SNS messages: default
    • Lambda events: @task(service="lambda")
    • EventBridge one-time schedules: mytask.at("...")

For reusable apps use @task and @schedule decorators that always points to the currently active Seda instance:

tasks.py:

from datetime import datetime

from seda import task


@task
async def mytask(timespec: str = "auto") -> str:
    return datetime.now().isoformat(timespec=timespec)

Tasks

await mytask()
  • SNS: This task is executed asynchronously by sending a message to a previously subscribed SNS topic.
  • λ: A second option is to directly invoke the Lambda function InvocationType=Event by adding the "service" option to the task decorator @task(service="lambda").
  • test: For local and test environments the task is executed synchronously by default.

One-time schedules

from datetime import datetime, timedelta

mytask.at(datetime.now() + timedelta(minutes=5))

The .at(datetime) method is equivalent to @schedule("at(datetime)").

These one-time schedules are created under a second EventBridge Schedule Group (group 1 - N schedules) so after a new deployment we can clean the group of periodic schedules but keeping our one-time schedules.

@schedule

SEDA / AWS TYPE EXAMPLE
expression
ScheduleExpression
str - "rate(5 minutes)"
- "cron(*/5 * * * ? *)"
- "at(2025-10-26T12:00:00)"
args
-
Optional[Sequence] ("a", "b")
kwargs
-
Optional[Dict] {"a": "b"}
timezone
ScheduleExpressionTimezone
Optional[str] "Asia/Saigon"
time_window
FlexibleTimeWindow
Optional[ScheduleTimeWindow] {"Mode": "FLEXIBLE", "MaximumWindowInMinutes": 15}
retry_policy
RetryPolicy
Optional[ScheduleRetryPolicy] {"MaximumEventAgeInSeconds": 60, "MaximumRetryAttempts": 10}
start_date
StartDate
Optional[datetime] datetime.now() + timedelta(minutes=5)
end_date
EndDate
Optional[datetime] datetime.now() + timedelta(days=5)
dead_letter_arn
DeadLetterConfig.Arn
Optional[str] "arn:aws:sqs:..."
kms_key
KmsKeyArn
Optional[str] "arn:aws:kms:..."

CLI

SEDA CLI provides a list of commands to deploy, remove and debug SEDA resources on an existing Lambda function:

seda deploy --app main.seda -f myfunction

Deploy @schedule, @task:

  • Creates the Schedule Groups for periodic and one-time tasks
  • Creates N periodic schedules
  • Creates SNS topic and a Lambda subscription to this topic
  • Adds related IAM roles and policies

A second deployment removes the periodic task Schedule Group and creates a new one adding the new schedules.

We can also remove the deployed stack:

seda remove --app main.seda -f myfunction

Remote Function Invocation

Invoke Python interpreter:

seda python 'import sys;print(sys.version)' -f myfunction

Run shell commands:

seda shell env -f myfunction

Serverless Framework

The plugin serverless-seda adds all SEDA CLI commands to Serverless framework CLI:

sls seda deploy

ASGI

SEDA seamlessly integrates with ASGI applications by adding Mangum handler to seda[asgi].

pip install seda[asgi]

main.py:

from fastapi import FastAPI
from seda import Seda


app = FastAPI()
seda = Seda(app)

Default handler

Add any callable as a handler to process any non-SEDA events:

def myhandler(event, context):
    pass


seda = Seda(default_handler=myhandler)

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

seda-0.0.6.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

seda-0.0.6-py3-none-any.whl (23.2 kB view details)

Uploaded Python 3

File details

Details for the file seda-0.0.6.tar.gz.

File metadata

  • Download URL: seda-0.0.6.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.1

File hashes

Hashes for seda-0.0.6.tar.gz
Algorithm Hash digest
SHA256 5046d4145491f8f677b6368864beb914e28cd1bb18ce9dfe3f70a1c2d32509d0
MD5 c72bf7bb3f53194fd2faafb0fcd85d3a
BLAKE2b-256 d989fb9453942300b91dd167999a86d2b808205c32e015805c04c0a5c062a8a7

See more details on using hashes here.

File details

Details for the file seda-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: seda-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 23.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.23.1

File hashes

Hashes for seda-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 6b3799f151dd2dc5e7419fca6491160bbd6db04779cc3a7df704a597b99b00c3
MD5 9b24177c8b1a57509390294ff560718f
BLAKE2b-256 50dae45b09cc912defdded713b097d31c131a249024781d37c13d15324fbdc21

See more details on using hashes here.

Supported by

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