Skip to main content

<object-storage-proxy ⚡> Yet Another Object Storage Proxy

Project description

CI PyPI version PyPI downloads License: MIT Rust edition

<osp⚡> object-storage-proxy

A fast, in-process reverse proxy for AWS S3 and IBM Cloud Object Storage, built on Cloudflare's pingora. It exposes a Python interface so you can plug in your own credential fetching, request signing, and authorization logic without touching the Rust core.

Note: This project is under active development. APIs are likely to change before 1.0.

Why

Object storage backends like IBM COS assign one endpoint and one set of credentials per storage instance, which may contain many buckets. Managing credentials and endpoints across instances becomes cumbersome, especially when clients expect a single uniform endpoint.

This proxy solves that by:

  1. Translating path-style requests (http://proxy/bucket/key) to virtual-hosted-style (https://bucket.s3.region.host/key) on the way out.
  2. Re-signing requests with the correct backend credentials, so clients only need one keypair pointed at the proxy.
  3. Calling your Python functions for credential lookup and request authorization, with TTL-based caching.

Request lifecycle

Request stages

Features

  • Compatible with any AWS S3-compatible client: aws-cli, boto3, polars, spark, datafusion, presto, trino, ...
  • Normalises differences between S3-compatible backends so clients work regardless of whether the backend is AWS S3, MinIO, Garage, or IBM COS (see Backend compatibility below).
  • Decouples frontend authentication (what the client sends) from backend authentication (what the storage expects).
  • Python callables for credential fetching, HMAC key lookup, and per-request authorization.
  • TTL-based credential and authorization caching.
  • HTTP and HTTPS frontends (HTTPS supports HTTP/2).
  • Configurable thread count and per-URL request counting.
  • Presigned URL support with configurable max-usage limiting.
  • Built-in Prometheus metrics endpoint (/metrics) — on by default, opt-out via --no-default-features.

Installation

pip install object-storage-proxy

Or install from source (requires Rust stable and uv):

git clone https://github.com/opensourceworks-org/object-storage-proxy.git
cd object-storage-proxy
uv run maturin develop --release

See DEVELOP.md for full develop/build instructions including Nix and Taskfile usage.

Quick start

1. Configure your AWS client

~/.aws/config:

[profile osp]
region = eu-west-3
output = json
services = osp-services
s3 =
    addressing_style = path

[services osp-services]
s3 =
  endpoint_url = http://localhost:6190

~/.aws/credentials:

[osp]
aws_access_key_id = MYCLIENTID
aws_secret_access_key = myclientsecret

The aws_access_key_id is passed as the token argument to your Python callables. It can be any identifier meaningful to your auth system: an internal client ID, an OAuth2 subject, etc.

2. Write your server script

import json
import os
from object_storage_proxy import ProxyServerConfig, start_server

def fetch_credentials(token: str, bucket: str) -> str:
    # Return either an IBM COS API key string, or a JSON string:
    # '{"access_key": "...", "secret_key": "..."}'
    return json.dumps({
        "access_key": os.environ["BACKEND_ACCESS_KEY"],
        "secret_key": os.environ["BACKEND_SECRET_KEY"],
    })

def lookup_secret(access_key: str) -> str | None:
    # Called to verify incoming HMAC signatures.
    return os.getenv("MYCLIENTSECRET") if access_key == "MYCLIENTID" else None

def authorize(token: str, bucket: str, request: dict) -> bool:
    # Return True to allow, False to deny.
    return True

cos_map = {
    "my-bucket": {
        "host": "s3.eu-de.cloud-object-storage.appdomain.cloud",
        "region": "eu-de",
        "port": 443,
        "ttl": 300,
    },
}

config = ProxyServerConfig(
    cos_map=cos_map,
    bucket_creds_fetcher=fetch_credentials,
    hmac_fetcher=lookup_secret,
    validator=authorize,
    http_port=6190,
)

start_server(config)

3. Run it

uv run python my_server.py

4. Use it

aws s3 ls s3://my-bucket/ --profile osp
aws s3 cp file.txt s3://my-bucket/file.txt --profile osp

A fuller example with HTTPS, HMAC keystores, and IBM COS is in examples/minimal_server.py.

Configuration reference

ProxyServerConfig

Parameter Type Required Default Description
cos_map dict yes Bucket-to-backend mapping. See below.
hmac_keystore list[dict] no [] Static HMAC keypairs accepted on the frontend.
bucket_creds_fetcher callable(token, bucket) -> str no Called once per bucket to fetch backend credentials. Return an IBM COS API key string or {"access_key":...,"secret_key":...} JSON.
hmac_fetcher callable(access_key) -> str | None no Called per request to resolve a secret key from an access key, used to verify incoming signatures.
validator callable(token, bucket[, request]) -> bool no Called per request to authorize access. Cached by (token, bucket) for the bucket TTL.
http_port int one of http/https required HTTP listener port.
https_port int one of http/https required HTTPS listener port (HTTP/2 supported).
threads int no 1 Number of worker threads.
verify bool no None Disable TLS verification on upstream connections. Development only.
skip_signature_validation bool no False Skip verification of incoming request signatures. Development only.
max_presign_url_usage_attempts int no 3 Max times a presigned URL may be used before being rejected.
server_name str no "osp" Server name included in log output.
metrics_port int no None Port to expose the Prometheus /metrics scrape endpoint. When None no endpoint is started.

cos_map entries

Each key is the bucket name as the client addresses it. The value is a dict:

Field Required Description
host yes Backend hostname
port yes Backend port (typically 443)
region no AWS/COS region string
apikey no IBM COS IAM API key (mutually exclusive with access_key/secret_key)
access_key no Backend HMAC access key
secret_key no Backend HMAC secret key
ttl no Credential and auth cache TTL in seconds. Default 300. Set to 0 to disable.
addressing_style no "path" or "virtual" (default "virtual")
is_tls_enabled no Defaults to true when port is 443

Python callable signatures

# Fetch backend credentials for a bucket.
# token: the access key from the client's Authorization header.
# Return an IBM COS API key string, or JSON: '{"access_key":"...","secret_key":"..."}'
def fetch_credentials(token: str, bucket: str) -> str: ...

# Resolve the secret key for an access key (used to verify incoming signatures).
def lookup_secret(access_key: str) -> str | None: ...

# Authorize a request. request dict contains: method, path, query, headers.
def authorize(token: str, bucket: str, request: dict | None = None) -> bool: ...

Backend compatibility

S3-compatible backends differ in how strictly they follow the AWS S3 specification. OSP irons out these differences so clients don't need to care which backend is underneath.

Behaviour AWS S3 spec Garage MinIO OSP handling
Content-MD5 on DeleteObjects Required Accepted without it (lenient) Enforced (400 if missing) Forwarded when present; test suite injects it because botocore ≥ 1.43 no longer sends it by default
x-amz-tagging-directive on CopyObject COPY or REPLACE N/A (tagging not implemented) ✅ enforced Header is in OSP's forwarding allowlist — was previously stripped
PutObjectTagging / GetObjectTagging Supported NotImplemented Forwarded; backend limitation is transparent
If-Match / If-Unmodified-Since on GET Must return 412 Returns 200 (header ignored) ✅ Returns 412 Forwarded; backend limitation is transparent
ListMultipartUploads with Prefix ending in / Returns matching uploads ✅ works Returns empty list (MinIO bug) Forwarded; MinIO limitation documented as xfail in the test suite

botocore ≥ 1.43 note: Recent versions of boto3 switched from Content-MD5 to x-amz-checksum-crc32 for body integrity on DeleteObjects, regardless of the request_checksum_calculation setting. Content-MD5 is still required by MinIO. If you use boto3 ≥ 1.43 directly against MinIO through OSP you may need to inject Content-MD5 manually via a before-sign event hook — see DEVELOP.md for details and example code.

The integration test suite covers all of the above: every test runs parametrized over both Garage and MinIO backends, so regressions surface immediately. See DEVELOP.md for the full compliance table and the internal proxy fixes that enable it.

Prometheus metrics

The proxy ships with a built-in Prometheus scrape endpoint. Set metrics_port to enable it:

config = ProxyServerConfig(
    cos_map=cos_map,
    http_port=6190,
    metrics_port=9090,   # exposes http://localhost:9090/metrics
)

Then scrape it:

curl http://localhost:9090/metrics

Or add a Prometheus scrape config:

scrape_configs:
  - job_name: object-storage-proxy
    static_configs:
      - targets: ["localhost:9090"]

Exposed metrics (all prefixed osp_):

Metric Type Labels Description
osp_requests_total Counter method, bucket, status Total proxied requests
osp_request_errors_total Counter method, bucket, error 4xx / 5xx responses
osp_transfer_bytes_total Counter direction (rx/tx), bucket Bytes transferred
osp_presigned_url_hits_total Counter bucket Presigned URL uses
osp_presigned_url_rejected_total Counter bucket Presigned URLs rejected (over limit)
osp_active_connections Gauge In-flight connections
osp_memory_bytes Gauge Resident set size (Linux only)
osp_build_info Gauge version, rustc Static build metadata
osp_request_duration_seconds Histogram method, bucket End-to-end request latency
osp_response_size_bytes Histogram method, bucket Response body size

To build without the metrics endpoint:

maturin develop --no-default-features

HTTPS setup

Generate a self-signed certificate for local development:

openssl req -x509 -nodes -days 365 \
  -newkey rsa:4096 \
  -keyout key.pem \
  -out cert.pem \
  -config localhost.cnf

export TLS_CERT_PATH=/path/to/cert.pem
export TLS_KEY_PATH=/path/to/key.pem

Then pass https_port=8443 to ProxyServerConfig.

Environment variables

See .env.example for the full list. Key variables:

Variable Description
COS_API_KEY IBM COS IAM API key
AWS_ACCESS_KEY / AWS_SECRET_KEY AWS backend credentials
TLS_CERT_PATH / TLS_KEY_PATH Paths to TLS certificate and key
OSP_ENABLE_REQUEST_COUNTING Set to true to enable per-URL request counting
AWS_REQUEST_CHECKSUM_CALCULATION Set to WHEN_REQUIRED to avoid checksum errors with AWS CLI v2

Build targets

Pre-built wheels are published to PyPI for the following platforms:

Platform Architecture Libc Python
Linux (ubuntu-22.04) x86_64 glibc (manylinux) 3.x
Linux (ubuntu-22.04) aarch64 glibc (manylinux) 3.x
Linux (alpine 3.18) x86_64 musl (musllinux_1_2) 3.x
macOS (macos-14) aarch64 (Apple Silicon) 3.x
Source distribution any any 3.x

Windows builds are not currently active in CI. An sdist is always published so you can build from source on any platform with Rust stable installed.

Building from source

See BUILD.md.

Roadmap

These backlog items are currently not yet implemented:

  • Pass path and method to Python callbacks; cache by (token, bucket, path, method)
  • Expose pingora server and service configuration directly to Python
  • Spark streaming write support
  • AWS CLI checksum workaround (aws/aws-cli#9214)
  • Allow same bucket name on different providers
  • Pluggable distributed cache

Contributing

See CONTRIBUTING.md. Bug reports and feature requests go through GitHub Issues.

License

MIT

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

object_storage_proxy-0.6.8.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

object_storage_proxy-0.6.8-cp314-cp314-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

object_storage_proxy-0.6.8-cp313-cp313-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

object_storage_proxy-0.6.8-cp312-cp312-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

object_storage_proxy-0.6.8-cp311-cp311-musllinux_1_2_x86_64.whl (7.4 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

object_storage_proxy-0.6.8-cp311-cp311-macosx_11_0_arm64.whl (6.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file object_storage_proxy-0.6.8.tar.gz.

File metadata

  • Download URL: object_storage_proxy-0.6.8.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.3

File hashes

Hashes for object_storage_proxy-0.6.8.tar.gz
Algorithm Hash digest
SHA256 17ff9d54a457d58949e5a6338eb2f571fc70a6178f5ba151eb79cbf5c05166ab
MD5 00e21a87cbdd8567d0d6035bb851f88a
BLAKE2b-256 bab85b482130c92004e0d99670186fcbe95f9b0a5231ca4a40310b7e7fd8db22

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1384ad4184df56cc2c771df9a4da197b81bf7e973192951be05b5751bbe9fb16
MD5 952341c0fab69398d81c79071da5f91c
BLAKE2b-256 9e7b752fe38cdc6f434071e76ea6c9c96a6740e7dd9c2fed3ea18b72edfab60e

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 10317a6fa7946fbb1a759db12b67f2399c4fca69118a04450fecf9fc94c803df
MD5 c499dc37b6e68646fea07e0f288ec48e
BLAKE2b-256 1c378cfc8e2347c77ef93dbad87e5b89067fd5aedb28c4942dd2bc2e57c8e81e

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ef5468f79d59f9c5a0e80fa21b2a912121c79a91605d46f930199362d312bff3
MD5 0a5593686e26ab0d157ff2e42fcd7924
BLAKE2b-256 1ee46d9a925722e6e561ee6c55dfe420ab8e4f3744216394ca467985f97f5852

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fb61089c2d1fdfbd652dfc516908ea566976febb72e8d55bd20cd2371e8e55b6
MD5 ec40a2ebc5a0a2729c9eef3991522ff8
BLAKE2b-256 e07e6875b2b6b3628eee1a8fafb2d452a000764f1d176e0eb73356f06f6cb41f

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 538b37e17471be28b537001f362f3fbe9d84dbf7691867ea77a711cf91e4a563
MD5 1fffe3181573900f93be8b6bc91a4fb9
BLAKE2b-256 bf398fceb4123c352b91275c11cab802e79dbd5f341e030fc3a383a9571fa0c2

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 22456023147eebe0c3a773d50f048bfdcd7ea225a560545449230090a9b91345
MD5 dad44a0e3e5aaa7c384b554a4e707336
BLAKE2b-256 6a0f164d23246a1071f703bac2a1cac5f09a0a56139ed72a9f8fc74ed9b071c4

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e9d4bd9eddae1cee68ab83d341f00b1e5e6a41bccd8c77d487d73b353d5adfc
MD5 167fb9f1ec994da50a70a9e88dfd30bc
BLAKE2b-256 ce84566fd0bfe9ba32de3b1ab2b33a7a76e98bc4ec591da44fc72ae411a7cabe

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c8ba527e42e7448930bb755fe0904d5fac34cdd9ddc4e5ba1f1f42fdd518e43b
MD5 497ee8403056212f05112668d40ec3d2
BLAKE2b-256 b5ec02aa6057ddb227fd5c34677db4d8f7400677fb5b3660d96b97a01d07ae6e

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f0f03197662cb7d4a6dc95e957b7a88cf941625ba2e3aec94a04a84e76e48dbc
MD5 c1141f2257804b57a624de596a03737a
BLAKE2b-256 9d1878d861a9d04e4417b3e9b4eb4381c0fbfdaab36663a07e44496f24829cfc

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d20c7bc5b99e568206f50503dfdd775fc33092318bb209a976ea70e7c5330a93
MD5 db1d78aee8bc14e04061d4ac9b67e036
BLAKE2b-256 9e22d6736c358a044275c9e4b35440239683620bd0336bf9ed71f7b3ea97a79d

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 28dab7bda0883ca0a42334d3785b74bf7973f4901d0b46482e129c8ac6de39c4
MD5 fbc48b0a0ea1a4459366ce6759188888
BLAKE2b-256 c5540d478e7e31a728efdd6605893245da46858f7852f835a62347b3c5515acd

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 80238ee9ba349f83234ac7500d9e16d34904c95f5022af7a958e44ff69af16f2
MD5 b375bba3310809a98ee4a7d29e680c50
BLAKE2b-256 5ad4c33f8c5da8e2da23e7cea4c4bd098e2f452391e80019460ea60a1a75210a

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 044982b782cd18a4d4b0812820865306c7f65ef03727f4704be26d2278aa8268
MD5 52ffbeaa964e93ae87e80a9be1a2997f
BLAKE2b-256 335068b374727d3a58abd2fc282115ef86cb049b9f4af00593cd611bd760fb3a

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 14e28910583760162454b44dbd5c18e6f87bba6cd114b94b6ca05c40b59d25fa
MD5 3f887afddebaf090263e8b2fc6006ea8
BLAKE2b-256 7123c45eebf862a3b78008cf7f6ce406981ca1e7423dfab844bec66f3e4c6138

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a7be5d2761dce9a8f26a130b7bf3dd4aa62ba7e39e2bf2dc68385e82d7efb957
MD5 925853b57f86bd27d97c76bd81c1c31a
BLAKE2b-256 820554ae073171bc007c8571c88a4bf5bf843c3e6f4bdfdafd759b4a82d47e3f

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d4f4370839783178b2bfff134374f4860148cc37f66b9a4bbbac8a871d68c60a
MD5 b73f0850aa1b750f35731edb09920298
BLAKE2b-256 d427d461e8ecfdec840c0233c8ea080186b9bd154f6c768352f9d7bce92ca856

See more details on using hashes here.

File details

Details for the file object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for object_storage_proxy-0.6.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3a086ad6c42176be37d492541b81d233d29bbf90d16d996bdba0a6d234022d26
MD5 ef7b8ad5cb1a6e63b032bc0b9a94a8ab
BLAKE2b-256 edb4a46730ca9cc8cac370620d93ed096d038a6a9fc40a643a3037727301dff3

See more details on using hashes here.

Supported by

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