Skip to main content

Build Status

Flask utility for signing Amazon S3 POST requests and validating Amazon S3 files. Both Python 2.7 and 3.4 are supported.

Upgrade note: Pontus 1.x branch uses Boto3. If you are still using boto, use 0.x.x versions. Check Git branch `version-0`.

Installation

Install with pip:

pip install Pontus

Dependencies

Pontus has the following dependencies:

Moreover python-magic depends on the libmagic file type identification library.

Examples

Signed POST request

Creating form fields for a signed Amazon S3 POST request

import boto3
from flask import current_app
from pontus import AmazonS3SignedRequest

session = boto3.session.Session(
    aws_access_key_id=current_app.config.get('AWS_ACCESS_KEY_ID'),
    aws_secret_access_key=current_app.config.get('AWS_SECRET_ACCESS_KEY'),
    region_name=current_app.config.get('AWS_REGION_NAME')
)
bucket = session.resource('s3').Bucket('testbucket')

signed_request = AmazonS3SignedRequest(
    key_name=u'my/file.jpg',
    mime_type=u'image/jpeg',
    bucket=bucket,
    session=session
)

signed_request.form_fields

# {
#     'x-amz-algorithm': 'AWS4-HMAC-SHA256',
#     'x-amz-credential': 'your-aws-access-key-id/date/region-name/s3/aws4_request',
#     'x-amz-date': 'date',
#     'x-amz-signature': 'generated-signature',
#     'success_action_status': '201',
#     'acl': 'public-read',
#     'Content-Type': 'image/png',
#     'key': u'f6c157e1-1a1a-4418-99fe-3362dcf7b1ea/images/my-image.jpg',
#     'policy': 'generated-policy-document'
# }

These form fields can be used to POST files to Amazon S3 as described in Amazon’s documentation.

Amazon S3 file validation

Validating that an image file is less than 2MB and is of image/jpeg MIME type.

import boto3
from flask import current_app
from pontus import AmazonS3FileValidator
from pontus.validators import FileSize, MimeType

session = boto3.session.Session(
    aws_access_key_id=current_app.config.get('AWS_ACCESS_KEY_ID'),
    aws_secret_access_key=current_app.config.get('AWS_SECRET_ACCESS_KEY')
)
bucket = session.resource('s3').Bucket('testbucket')

validator = AmazonS3FileValidator(
    key_name='images/my-image.jpg',
    bucket=bucket,
    validators=[FileSize(max=2097152), MimeType('image/jpeg')],
    session=session
)

if validator.validate():
    # File is <2MB image/jpeg
    pass
else:
    # File was invalid, printing errors
    print validator.errors

Validators can either be instances of a class inheriting pontus.validators.BaseValidator or callable functions that take one parameter obj, which is a boto.S3.Object instance.

from pontus.exceptions import ValidationError
from pontus.validators import BaseValidator

def name_starts_with_images(obj):
    if not obj.key.startswith('images/'):
        raise ValidationError()

# OR

class NameStartsWith(BaseValidator):
    def __init__(self, starts_with_str):
        self.starts_with_str = starts_with_str

    def __call__(self, obj):
        if not obj.key.startswith(starts_with_str):
            raise ValidationError()

name_starts_with_images = NameStartsWith('images/')

Release files for Pontus 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Pontus 4.1.0
File Size Uploaded
pontus-4.1.0.tar.gz 40.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Pontus 4.1.0
File Interpreter ABI Platform
Pontus-4.1.0-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 50.9 kB

Release files / pontus-4.1.0.tar.gz

Download URL pontus-4.1.0.tar.gz
Size 40.7 kB
Tags Source
SHA-256 checksum
How to use checksums
5b86b4d8af046692c72f81286d4df52ac9dc0932b74592cfd4febba4cd028e5c
BLAKE2b-256 checksum
How to use checksums
b0385a367d52e817d98f0846213637d3e60100a080a7140cfb6a754695c9dd34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.19

Release files / Pontus-4.1.0-py2.py3-none-any.whl

Download URL Pontus-4.1.0-py2.py3-none-any.whl
Size 10.3 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
bfa203c63e8234f933d3793006da0c95ca2a1dc6320fcac9b56999ed96c783a1
BLAKE2b-256 checksum
How to use checksums
9abac8ccedcddb4d16d95a051223c409ba9372f80e83768a2515bc864f11ab15
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.19

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 release files

4.0.0

2 release files

3.0.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.1

2 release files

2.0.0

3 release files

1.0.0

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page