Skip to main content

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,
)

Download files

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

Source Distribution

asgi-s3-0.0.3.tar.gz (6.7 kB view details)

Uploaded Source

File details

Details for the file asgi-s3-0.0.3.tar.gz.

File metadata

  • Download URL: asgi-s3-0.0.3.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8rc1

File hashes

Hashes for asgi-s3-0.0.3.tar.gz
Algorithm Hash digest
SHA256 fb6c3dbf83136b9f424d63a75ae66218349c2fc217a7e3dcdf73c69931bbf4c3
MD5 8f369f72a2dcf1d846f3bc9557e43e3e
BLAKE2b-256 c3ddae950e795429cf1b1c2693edbf77400a64387fe8271c02e56ebee18758f8

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.3 This release

1 file

0.0.2

1 file

0.0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page