Skip to main content

ASGI S3 storage

Project description

asgi-s3

Package version Build Status

Static file management tools and ASGI middleware support for Amazon S3.

Work in Progress: A lot of what is here currently will be changing, not recommended for any serious usage at this point.

Requirements: Python 3.6+

Installation

pip install asgi-s3

...but you probably just want to clone the master branch for the moment.

CLI

s3 create-bucket  Create a new S3 bucket.

s3 list-buckets   List all S3 buckets.

s3 sync-bucket    Sync a bucket with a local static file directory.

...todo

Middleware

The middleware is designed to work with any ASGI application. Here is raw ASGI example:

from asgi_s3.middleware import S3StorageMiddleware, s3_url_for


AWS_ACCESS_KEY_ID = "access-key-id"
AWS_SECRET_ACCESS_KEY = "secret-access-key"
BUCKET_NAME = "my-bucket"
REGION_NAME = "region-name"
STATIC_DIR = "path/to/static/files"


async def app(scope, receive, send):
    await send(
        {
            "type": "http.response.start",
            "status": 200,
            "headers": [[b"content-type", b"text/html; charset=utf-8"]],
        }
    )
    html_content = f"""
    <!DOCTYPE html>
    <html>
    <head>
        <title>ASGI S3 example</title>
        <link rel="stylesheet" href="{s3_url_for('style.css')}">
    </head>
    <body>
    Hello, world.
    </body>
    </html>
    """
    await send({"type": "http.response.body", "body": html_content.encode()})


app = S3StorageMiddleware(
    app,
    bucket_name=BUCKET_NAME,
    static_dir=STATIC_DIR,
    region_name=REGION_NAME,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)

And here is an example using Starlette:

from starlette.applications import Starlette
from starlette.templating import Jinja2Templates

from asgi_s3.middleware import S3StorageMiddleware, s3_url_for


templates = Jinja2Templates("templates")
app = Starlette()

@app.route("/")
def homepage(request):
    return templates.TemplateResponse(
        "index.html", {"request": request, "s3_url_for": s3_url_for}
    )


AWS_ACCESS_KEY_ID = "access-key-id"
AWS_SECRET_ACCESS_KEY = "secret-access-key"
BUCKET_NAME = "my-bucket"
REGION_NAME = "region-name"
STATIC_DIR = "path/to/static/files"


app.add_middleware(
    S3StorageMiddleware,
    bucket_name=BUCKET_NAME,
    static_dir=STATIC_DIR,
    region_name=REGION_NAME,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)

Project details


Download files

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

Files for asgi-s3, version 0.0.3
Filename, size File type Python version Upload date Hashes
Filename, size asgi-s3-0.0.3.tar.gz (6.7 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page