Skip to main content

Simple cache with pydantic.

Project description

cachetic

PyPI version Python Version License

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() and set() 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 serialization
  • cache_url: Cache backend - file path for disk cache or redis://... for Redis
  • default_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)

Uploaded Source

Built Distribution

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

cachetic-0.4.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

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

Hashes for cachetic-0.4.1.tar.gz
Algorithm Hash digest
SHA256 d37e9c0d8880dadc79cf652610db02e9606daa0bdbfc7b4717488b3158c01b76
MD5 1655357f4b0f2fdf7d49564eca4161b6
BLAKE2b-256 c7a1eeb62368d4cec6d00c2cc432f76777c30e3ce015fcf94f40712318312729

See more details on using hashes here.

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

Hashes for cachetic-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 12bf4bd6a431d15ef39ecaaf9699318eeff8ac68817870d23c5c4c4bf8ade7de
MD5 6380d11ba41d78996a9b5190e83b729b
BLAKE2b-256 4100d48e3c8aeaa16f022e58ffd74972fe9b03e6258d5d48aef62b509b67d6de

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