Back to Icho Home Icho v0.8.0

Flexible Storage Spaces (File, Memory & PostgreSQL)

Icho supports modular storage backends via the storage parameter. You can specify string shortcuts ("file", "memory", "postgres") or pass a custom StorageBackend instance (FileStorage, MemoryStorage, PostgresStorage).

1. File Storage (Default)

Stores cassettes as JSON files on disk inside your tests directory.

storage="file"

2. In-Memory Storage

Stores cassettes purely in RAM with zero disk writes — ideal for fast unit tests, CI pipelines, and benchmarking.

storage="memory"

3. PostgreSQL Storage

Stores cassettes centrally in a Postgres database table (icho_cassettes). Reads DATABASE_URL or POSTGRES_URL environment variables by default.

storage="postgres"

Usage Examples:

from icho import cassette, FileStorage, MemoryStorage, PostgresStorage, Cassette

# 1. File Storage: Store cassettes on disk as JSON files (Default)
with cassette("tests/cassettes", storage="file"):
    response = model.invoke("Hello file storage!")

# 2. Memory Storage: Store cassettes purely in RAM (zero disk files)
with cassette(storage="memory"):
    response = model.invoke("Hello in-memory storage!")

# 3. PostgreSQL Storage: Store cassettes in a Postgres database
pg_storage = PostgresStorage(db_url="postgresql://user:pass@localhost:5432/mydb")
with cassette(storage=pg_storage):
    response = model.invoke("Hello Postgres storage!")

# 4. Programmatic Cassette object with custom storage backend
cas = Cassette( 
    request={"messages": [{"role": "user", "content": "hi"}]},
    response={"output": "hello"},
    storage=pg_storage
)
cas.save(path_or_id="pg_custom_key")