One lib to sign them all.
Project description
Signa
Utility lib to create authorized requests for various services.
Supported services:
- AWS S3
- Digital Ocean Spaces
- Yandex Object storage
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.6.tar.gz
(6.9 kB
view hashes)
Built Distribution
signa-0.2.6-py3-none-any.whl
(9.0 kB
view hashes)