Skip to main content

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.

Files for signa, version 0.2.6
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

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page