Skip to main content

One lib to sign them all.

Project description

Signa

PyPi Version

Utility lib to create authorized requests for various services.

Supported services:

  • AWS S3
  • Digital Ocean Spaces
  • Yandex Object storage
  • Alibaba Cloud OSS

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.

Source Distribution

signa-0.3.0.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

signa-0.3.0-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file signa-0.3.0.tar.gz.

File metadata

  • Download URL: signa-0.3.0.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for signa-0.3.0.tar.gz
Algorithm Hash digest
SHA256 81bec5ed8464d0876bb593a4c9376d49ecfff9e8a25178f00a348a7fe32ac335
MD5 711986e62af813835aa53e238fe2da57
BLAKE2b-256 0d1926836e4dcce472ba83d9e8460118859985294f7f2c3879298b96d47f5aa3

See more details on using hashes here.

File details

Details for the file signa-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: signa-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for signa-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 43d74a7866b3be7402d5be9eb65c8ea10aa744dbdfbd8da6979bf326d8e18dfb
MD5 a78150fd1aaf0ae23369d1d9c1ed9a38
BLAKE2b-256 eb4ba1370f3eb7fcc807905551b25a21684c3e0a73e3e2d8c68f0285cfe03029

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page