Skip to main content

Propulsing the shelve module to the cloud

Project description

CShelve – The Python Dictionary That Lives in the Cloud 🚀

Store Python objects locally or in the cloud with the same, simple dictionary interface. CShelve lets you store and retrieve any Python object—lists, DataFrames, JSON, binary files—whether on local files, AWS S3, Azure Blob Storage, or in-memory, all with the same simple dictionary-like interface.


📌 Why CShelve?

  • Familiar & Fast – If you know Python dictionaries, you already know CShelve.
  • Cloud-Ready – Switch between local files and cloud storage (AWS S3, Azure Blob, SFTP) with zero code changes.
  • Lightweight – No database servers, no migrations, no schema headaches and minimals dependencies.
  • Flexible Formats – Store pickled Python objects by default, or any format as bytes (JSON, CSV, Parquet, images, etc.).
  • Cost-Effective Scaling – Tap into cheap and durable cloud storage without maintaining infrastructure.

🔍 What’s “Shelve” Anyway?

Python’s built-in shelve module stores Python objects in a file with a dictionary-like API. CShelve supercharges it with:

  • Cloud backends
  • Multiple authentication methods
  • Format flexibility
  • Provider-agnostic switching

If you can do:

mydict['key'] = value

You can use CShelve—locally, in the cloud, or on-premises.


📦 Installation

# Local storage only
pip install cshelve

# With AWS S3 support
pip install cshelve[aws-s3]

# With Azure Blob support
pip install cshelve[azure-blob]

⚡ Quick Start

Local Storage

import cshelve

db = cshelve.open('local.db')
db['user'] = {'name': 'Alice', 'age': 30}
print(db['user'])  # {'name': 'Alice', 'age': 30}
db.close()

AWS S3

# Install provider
pip install cshelve[aws-s3]

aws-s3.ini

[default]
provider    = aws-s3
bucket_name = mybucket
auth_type   = access_key
key_id      = $AWS_KEY_ID
key_secret  = $AWS_KEY_SECRET

Python

import cshelve

db = cshelve.open('aws-s3.ini')
db['session'] = 'cloud storage is easy'
print(db['session'])
db.close()

Azure Blob

# Install provider
pip install cshelve[azure-blob]

azure-blob.ini

[default]
provider        = azure-blob
account_url     = https://myaccount.blob.core.windows.net
auth_type       = passwordless
container_name  = mycontainer

Python

import cshelve

db = cshelve.open('azure-blob.ini')
db['analytics'] = [1, 2, 3, 4]
print(db['analytics'])
db.close()

📊 Advanced Examples

Storing Pandas DataFrames in the Cloud

import cshelve, pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob'], 'age': [25, 30]})

with cshelve.open('azure-blob.ini') as db:
    db['users'] = df

with cshelve.open('azure-blob.ini') as db:
    print(db['users'])

Storing JSON (no pickle)

import json, cshelve

data = {"msg": "Hello, Cloud!"}

with cshelve.open('azure-blob.ini') as db:
    db['config.json'] = json.dumps(data).encode()

with cshelve.open('azure-blob.ini') as db:
    print(json.loads(db['config.json'].decode()))

🛠 Supported Providers

Provider Install Extra Notes
Local none Stores data in a local .db file
AWS S3 cshelve[aws-s3] Supports access_key auth
Azure Blob cshelve[azure-blob] Supports access_key, passwordless, connection_string, anonymous auth
In-Memory none Perfect for tests and temporary storage

Detailed configuration in the documentation.


🤝 Contributing

We welcome pull requests, feature suggestions, and bug reports. Check the issues to get started.


📄 License

MIT – see LICENSE


⭐ Pro Tip

Switching from local to cloud to on-premises is as easy as:

db = cshelve.open('local.db')
# to
db = cshelve.open('aws-s3.ini')
# to
db = cshelve.open('sftp.ini')

No code rewrite. Just change the config.

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

cshelve-1.6.0.tar.gz (237.3 kB view details)

Uploaded Source

Built Distribution

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

cshelve-1.6.0-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

Details for the file cshelve-1.6.0.tar.gz.

File metadata

  • Download URL: cshelve-1.6.0.tar.gz
  • Upload date:
  • Size: 237.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","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 cshelve-1.6.0.tar.gz
Algorithm Hash digest
SHA256 0457962cc4bc8480fd0cbb9f209cd2deafcdf5fb3df11aa97ffefa1a3f0dd299
MD5 23fe89cbbb92b5021c13c65dfe450c75
BLAKE2b-256 eafa943cce3e22207cc9079805d7bcac4504c6396695467d997bb90749101237

See more details on using hashes here.

File details

Details for the file cshelve-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: cshelve-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 28.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","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 cshelve-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 82528c2054921de4c3045b7e1e94cdfaa347e9562814e15962b642db10622e93
MD5 972b3ffa47925ec697e43c83095c9df4
BLAKE2b-256 3e374bab43cc0b50cfabf159945edc731997bc4291f74034e4f85c4e4a53f769

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