One lib to sign them all.
Project description
Signa
Utility lib to create authorized requests for various services.
Currently in alpha, use with caution!
Install
pip install signa
Usage example
import os
import requests
import signa
AWS_S3_REGION = '...'
AWS_S3_BUCKET = '...'
AWS_S3_UPLOAD_ACCESS_KEY = '...'
AWS_S3_UPLOAD_SECRET_KEY = '...'
S3_SIGNA = signa.Factory(
's3',
region=AWS_S3_REGION,
bucket=AWS_S3_BUCKET,
payload='UNSIGNED-PAYLOAD',
auth={
'access_key': AWS_S3_UPLOAD_ACCESS_KEY,
'secret_key': AWS_S3_UPLOAD_SECRET_KEY,
})
CONTENT_TYPES = {
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.png': 'image/png',
'.mp4': 'video/mp4',
'.json': 'application/json',
}
def put_file(*, key=None, path_or_data=None, make_public=True,
s3_signa=S3_SIGNA):
"""Put file to S3 with signa example. Return uploaded URL.
"""
ext = os.path.splitext(key)[1]
headers = {
'Content-Type': CONTENT_TYPES.get(ext, 'application/octet-stream')
}
if make_public:
headers['x-amz-acl'] = 'public-read'
signed = s3_signa.new(method='PUT', key=key, headers=headers)
if isinstance(path_or_data, str):
path = path_or_data
with open(path, 'rb') as data_fp:
response = requests.put(signed['url'],
headers=signed['headers'],
data=data_fp)
else:
data = path_or_data
response = requests.put(signed['url'],
headers=signed['headers'],
data=data)
if response.status_code == 200:
print('put_file: OK')
return signed['url']
return None
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
signa-0.2.2.tar.gz
(6.2 kB
view hashes)