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")
