Add your description here
Project description
memoshelve
A persistent memoization decorator using Python's shelve with two-tier caching (memory + disk).
Features
- Two-tier caching: in-memory + persistent disk storage
- Async and sync function support
- Cache inspection and management
- Optional enhanced serialization with
dillandstablehash
Installation
pip install memoshelve
# For enhanced serialization
pip install memoshelve[robust]
Usage
Basic Decorator
from memoshelve import cache
@cache(filename="cache.db")
def expensive_function(x, y):
return x * y + 42
result = expensive_function(10, 20) # Computed and cached
result = expensive_function(10, 20) # Retrieved from cache
Context Manager
from memoshelve import memoshelve
with memoshelve(expensive_function, "cache.db") as cached_fn:
result = cached_fn(10, 20)
Async Functions
@cache(filename="async_cache.db")
async def async_function(data):
return len(data) * 42
API
Cache Methods
@cache(filename="example.db")
def compute(x, y):
return x ** y
# Check if cached
compute.__contains__(2, 3)
# Get without computing
compute.get(2, 3) # Raises KeyError if not cached
# Get with status
result, status = compute.__call_with_status__(2, 3)
# status: "cached (mem)", "cached (disk)", or "miss"
# Manual operations
compute.put(2, 3, 8) # Store value
compute.uncache(2, 3) # Remove from cache
Configuration
@cache(
filename="cache.db",
ignore=["debug"], # Ignore parameters in cache key
get_hash=custom_hash, # Custom hash function
disable=False, # Toggle caching
print_cache_miss=True, # Log cache misses
)
def my_function(data, debug=False):
return process(data)
Cache Management
from memoshelve import compact
# Compact cache file
compact("cache.db", backup=True)
# Access metadata
metadata = my_function.memoshelve
metadata.disk_keys() # Keys in disk cache
metadata.mem_keys() # Keys in memory cache
metadata.compact() # Compact this cache
Storage
Default cache location: ~/.cache/memoshelve/ (configurable via XDG_CACHE_HOME)
Cache files use Python's shelve module and may create multiple files (.db, .dir, .dat).
License
MIT License
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file memoshelve-1.0.2.tar.gz.
File metadata
- Download URL: memoshelve-1.0.2.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72d53b513688dcc8bb62dbcb695d50e6ae42ae57a2d05974cb16062b2c96a844
|
|
| MD5 |
e2388b210564d188f71ab378184429af
|
|
| BLAKE2b-256 |
3621087f125bd27cd99417a0401ce7aae5c10c1cfbec236707aede47c1066c3c
|
File details
Details for the file memoshelve-1.0.2-py3-none-any.whl.
File metadata
- Download URL: memoshelve-1.0.2-py3-none-any.whl
- Upload date:
- Size: 11.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.8.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6000d72aea834d93d279b07030a164c43ac420d42e8d108c6aef4c87ef893eff
|
|
| MD5 |
3c36993939d201ce2a4f86e4235774ad
|
|
| BLAKE2b-256 |
9f1fd021e5e96f789b2991b0d9506f84102e12e25857f57b6f7c8449935b1cd1
|