Simple cache with pydantic.
Project description
cachetic
A simple, type-safe caching library supporting Redis and disk storage with automatic Pydantic serialization.
Features
- Type-safe: Full type checking with generic support
- Flexible backends: Local disk cache (diskcache) or Redis
- Pydantic integration: Automatic serialization for any type via TypeAdapter
- Simple API: Just
get()andset()with optional TTL
Installation
pip install cachetic
Quick Start
Basic Usage
import pydantic
from cachetic import Cachetic
# Define your model
class Person(pydantic.BaseModel):
name: str
age: int
# Create cache instance
cache = Cachetic[Person](
object_type=pydantic.TypeAdapter(Person),
cache_url=".cache" # Local disk cache
)
# Store and retrieve
person = Person(name="Alice", age=30)
cache.set("user:1", person)
result = cache.get("user:1")
print(result.name) # "Alice"
Redis Backend
cache = Cachetic[Person](
object_type=pydantic.TypeAdapter(Person),
cache_url="redis://localhost:6379/0"
)
Primitive Types
# String cache
str_cache = Cachetic[str](
object_type=pydantic.TypeAdapter(str),
cache_url=".cache"
)
str_cache.set("greeting", "Hello, World!")
print(str_cache.get("greeting")) # "Hello, World!"
# List cache
list_cache = Cachetic[list[str]](
object_type=pydantic.TypeAdapter(list[str]),
cache_url=".cache"
)
list_cache.set("items", ["apple", "banana", "cherry"])
Complex Types
from typing import Dict, List
# Dictionary cache
data = {"users": [{"id": 1, "name": "Alice"}], "total": 1}
dict_cache = Cachetic[Dict](
object_type=pydantic.TypeAdapter(Dict),
cache_url=".cache"
)
dict_cache.set("user_data", data)
# List of models
people_cache = Cachetic[List[Person]](
object_type=pydantic.TypeAdapter(List[Person]),
cache_url=".cache"
)
people = [Person(name="Alice", age=30), Person(name="Bob", age=25)]
people_cache.set("team", people)
Configuration
Constructor Parameters
object_type:pydantic.TypeAdapter[T]- Required type adapter for serializationcache_url: Cache backend - file path for disk cache orredis://...for Redisdefault_ttl: Default expiration in seconds (-1= no expiration,0= disabled)prefix: Key prefix for all cache operations
TTL Examples
# No expiration (default)
cache = Cachetic[str](
object_type=pydantic.TypeAdapter(str),
default_ttl=-1
)
# 1 hour expiration
cache = Cachetic[str](
object_type=pydantic.TypeAdapter(str),
default_ttl=3600
)
# Per-operation TTL
cache.set("key", "value", ex=300) # 5 minutes
Environment Variables
Use CACHETIC_ prefix:
export CACHETIC_CACHE_URL="redis://localhost:6379/0"
export CACHETIC_DEFAULT_TTL=3600
export CACHETIC_PREFIX="myapp"
Error Handling
from cachetic import CacheNotFoundError
# get() returns None for missing keys
result = cache.get("nonexistent") # None
# get_or_raise() throws exception
try:
result = cache.get_or_raise("nonexistent")
except CacheNotFoundError:
print("Key not found")
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
cachetic-0.4.1.tar.gz
(6.4 kB
view details)
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 cachetic-0.4.1.tar.gz.
File metadata
- Download URL: cachetic-0.4.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.11.11 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d37e9c0d8880dadc79cf652610db02e9606daa0bdbfc7b4717488b3158c01b76
|
|
| MD5 |
1655357f4b0f2fdf7d49564eca4161b6
|
|
| BLAKE2b-256 |
c7a1eeb62368d4cec6d00c2cc432f76777c30e3ce015fcf94f40712318312729
|
File details
Details for the file cachetic-0.4.1-py3-none-any.whl.
File metadata
- Download URL: cachetic-0.4.1-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.4 CPython/3.11.11 Darwin/24.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
12bf4bd6a431d15ef39ecaaf9699318eeff8ac68817870d23c5c4c4bf8ade7de
|
|
| MD5 |
6380d11ba41d78996a9b5190e83b729b
|
|
| BLAKE2b-256 |
4100d48e3c8aeaa16f022e58ffd74972fe9b03e6258d5d48aef62b509b67d6de
|