In your tests and development environment we suggest hitting production turbopuffer for the best end to end testing. Since creating a namespace in turbopuffer is virtually free, you can create a namespace for each test with a random name, and simply delete it after the test. We recommend each developer has their own namespace for their dev namespaces.
In addition, to separate test and production, consider creating a separate organization in the dashboard.
import pytest
import os
import string
import random
import turbopuffer as tpuf
tpuf.api_key = os.environ["TURBOPUFFER_API_KEY"]
# Create a namespace for each test, and always delete it afterwards
@pytest.fixture
def tpuf_ns():
random_suffix = ''.join(random.choices(string.ascii_letters + string.digits, k=32))
ns_name = f"test-{random_suffix}"
ns = tpuf.Namespace(ns_name)
try:
yield ns
finally:
try:
ns.delete_all()
except tpuf.error.APIError as e:
if e.status_code != 404: # If the error is not due to the namespace not existing
raise
def test_query(tpuf_ns):
tpuf_ns.upsert(ids=[1, 2], vectors=[[1, 1], [2, 2]])
res = tpuf_ns.query(vector=[1.1, 1.1], distance_metric="euclidean_squared")
assert res[0].id == 1
if __name__ == "__main__":
pytest.main()