跳转到主要内容

Flask工具,用于Amazon S3。

项目描述

Build Status

Flask工具,用于签名Amazon S3 POST请求和验证Amazon S3文件。支持Python 2.7和3.4。

升级说明:Pontus 1.x分支使用Boto3。如果您仍在使用boto,请使用0.x.x版本。检查Git分支 `version-0`。

安装

使用pip安装

pip install Pontus

依赖项

Pontus有如下依赖项

此外,python-magic依赖于libmagic文件类型识别库。

示例

签名的POST请求

为签名的Amazon S3 POST请求创建表单字段

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'
# }

这些表单字段可用于将文件POST到Amazon S3,具体操作请参阅Amazon的文档

Amazon S3文件验证

验证图像文件小于2MB,并且是image/jpeg MIME类型。

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

验证器可以是继承自pontus.validators.BaseValidator的类的实例,或者是接受一个参数obj的可调用函数,其中obj是一个boto.S3.Object实例。

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/')

项目详情


下载文件

下载适用于您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

pontus-4.1.0.tar.gz (40.7 kB 查看哈希值)

上传时间

构建分布

Pontus-4.1.0-py2.py3-none-any.whl (10.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持