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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size signa-0.2.6-py3-none-any.whl (9.0 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size signa-0.2.6.tar.gz (6.9 kB) | File type Source | Python version None | Upload date | Hashes View |