Skip to main content

boto3-client-cache provides a concurrency-safe, bounded cache for boto3 clients with deterministic identity semantics.

Project description

boto3-client-cache


Description

boto3-client-cache provides a concurrency-safe, bounded cache for boto3 clients with deterministic identity semantics.

LRU eviction is supported. LFU eviction is planned for a future release.

Why this Exists

boto3 clients consume a large amount of memory. Many developers never notice this. At scale, however, the memory footprint of boto3 clients often becomes clear through manifold consequences. Client caching is an obvious choice for managing multiple clients at scale.

Design

The most important but challenging design choice for client caching is selecting and enforcing a robust and standardized methodology for unique keys. boto3-client-cache hashes according to boto3 client signatures.

Setting and retrieving clients from the client cache therefore requires an explicit declaration of intention -- that is, the developer must explicitly pass client initialization parameters to a ClientCacheKey object in order to set or retrieve boto3 clients. This ensures setting and retrieving clients are unambiguous and deterministic operations. By locking the client cache, as boto3-client-cache does, race conditions are prevented, enabling developers to confidently employ the client cache at scale with predictable cache eviction behavior. Lastly, by designing the cache like a dict in the standard Python library, the cache is ergonomically familiar and thus easy to use.

These decisions reflect the core design goals of boto3-client-cache: safety at scale, deterministic behavior, ergonomic interfacing, and explicit identity.

Installation

pip install boto3-client-cache

Quickstart

Refer to the official documentation for additional information.

from boto3_client_cache import ClientCache, ClientCacheKey
import boto3

# create an LRU client cache with a maximum size of 30
cache = ClientCache(max_size=30)

# store boto3 client params in an object
kwargs = {"service_name": "s3", "region_name": "us-west-2"}

# create a cache key using those params
key = ClientCacheKey(**kwargs)

# assign a client
cache[key] = boto3.client(**kwargs)

# and retrieve that client using the key
s3_client = cache[key]

Error Semantics

Refer to the official documentation for additional information.

# raises ClientCacheExistsError b/c client(**kwargs) already exists
cache[key] = boto3.client(**kwargs)

# raises ClientCacheNotFoundError b/c the specific client was not cached
cache[ClientCacheKey(service_name="ec2", region_name="us-west-2")]

# returns None instead of raising ClientCacheNotFoundError
cache.get(ClientCacheKey(service_name="ec2", region_name="us-west-2"))

# raises ClientCacheError b/c the key is not a ClientCacheKey
cache["this is not a ClientCacheKey"]

# raises ClientCacheError b/c the object is not a client
cache[ClientCacheKey("s3")] = "this is not a boto3 client"

License

boto3-client-cache is licensed by the Apache Software License (2.0).

Contributing

Refer to the contributing guidelines for additional information on how to contribute to boto3-client-cache.

Special Thanks

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

boto3_client_cache-0.1.2.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

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

boto3_client_cache-0.1.2-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

Details for the file boto3_client_cache-0.1.2.tar.gz.

File metadata

  • Download URL: boto3_client_cache-0.1.2.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for boto3_client_cache-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e512ec82fa3a4cd46b81f4a86d49e59a4a87270de0e1b490bed367beb368ff62
MD5 4d1dd06db7705dadfa5251724bdb17c6
BLAKE2b-256 9622956f340edfe6d2ce623060fdf26dd0c595ca75645a56e63883d4ba0ca1c4

See more details on using hashes here.

File details

Details for the file boto3_client_cache-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: boto3_client_cache-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 17.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for boto3_client_cache-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 189f63cf480defe230e8bf8f74005213d90b32412e4d60c76ef91fb3cca4f3e8
MD5 140ccd47c80c93812e2150702be2a36d
BLAKE2b-256 ae6ad648703ed2fba19177716f4cecabd0857259bbd443d2747464097a02f8f9

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