Skip to content

Python SDK

Install

Terminal window
pip install calvery

Requires Python 3.8+.

Quick start

import os
from calvery import Calvery
c = Calvery(token=os.environ["CVSM_TOKEN"], team="acme-corp")
db_url = c.get("DATABASE_URL")

Constructor

Calvery(
token: str, # REQUIRED
team: str, # REQUIRED — slug atau UUID
*,
base_url: str = "https://api.calvery.xyz",
environment: str = "production",
cache_ttl: float = 30.0, # detik — 0 untuk disable
max_retries: int = 3,
timeout: float = 10.0, # HTTP timeout per attempt
)

Methods

get(name, *, environment=None) -> str

val = c.get("STRIPE_KEY")
staging = c.get("STRIPE_KEY", environment="staging")

Raise CalverySecretNotFoundError kalau secret tidak ada.

get_all(*, environment=None) -> dict[str, str]

for k, v in c.get_all().items():
print(k, v)

inject(*, environment=None, overwrite=False) -> list[str]

Inject ke os.environ. Return list nama yang di-inject.

clear_cache()

Errors

from calvery import (
CalveryError,
CalveryAuthError,
CalverySecretNotFoundError,
CalveryNetworkError,
CalveryServerError,
)
try:
val = c.get("FOO")
except CalveryAuthError:
# Token expired/revoked
...
except CalverySecretNotFoundError:
# Secret belum dibuat
...

Framework recipes

Django

settings.py
import os
from calvery import Calvery
Calvery(token=os.environ["CVSM_TOKEN"], team="acme").inject()
DATABASE_URL = os.environ["DATABASE_URL"]
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]

FastAPI

from contextlib import asynccontextmanager
from fastapi import FastAPI
from calvery import Calvery
@asynccontextmanager
async def lifespan(app: FastAPI):
Calvery(token=os.environ["CVSM_TOKEN"], team="acme").inject()
yield
app = FastAPI(lifespan=lifespan)

Flask

from flask import Flask
from calvery import Calvery
Calvery(token=os.environ["CVSM_TOKEN"], team="acme").inject()
app = Flask(__name__)

Celery worker

from celery import Celery
from calvery import Calvery
# Inject sebelum Celery app di-init biar BROKER_URL dll. tersedia
Calvery(token=os.environ["CVSM_TOKEN"], team="acme").inject()
app = Celery("myapp", broker=os.environ["CELERY_BROKER_URL"])

Jupyter / data science

from calvery import Calvery
c = Calvery(token="cvsm_...", team="data-team", environment="staging")
conn_str = c.get("WAREHOUSE_URL")

Self-host

c = Calvery(
token=os.environ["CVSM_TOKEN"],
team="internal",
base_url="https://vault.mycompany.internal",
)

Type hints

Full type hints. Dengan mypy --strict:

from calvery import Calvery
c: Calvery = Calvery(token="...", team="acme")
val: str = c.get("DATABASE_URL")
all_secrets: dict[str, str] = c.get_all()