Skip to main content

Overview

The Contextbase Python SDK provides comprehensive error handling to help you build robust applications. Understanding the different types of errors and how to handle them is crucial for production use.

Error types

ContextbaseError

Raised when the API returns an error response:
from contextbase import ContextbaseError

try:
    response = cb.publish("component", body={"data": "value"})
    response.raise_for_status()
except ContextbaseError as e:
    print(f"API Error: {e.message}")
    print(f"Status Code: {e.status_code}")
    print(f"Details: {e.errors}")

ValueError

Raised for client-side validation errors:
try:
    # Missing both body and file
    cb.publish("context")
except ValueError as e:
    print(f"Validation Error: {e}")

try:
    # Invalid file path
    ContextbaseFile.from_path("/nonexistent/file.txt")
except ValueError as e:
    print(f"File Error: {e}")

RequestException

Network and connection errors:
import requests
from contextbase import ContextbaseError

try:
    response = cb.publish("context", body={"data": "value"})
except requests.RequestException as e:
    print(f"Network Error: {e}")
except ContextbaseError as e:
    print(f"API Error: {e}")

Response-based error handling

Checking response status

# Method 1: Check response.ok
response = cb.publish("context", body={"data": "value"})

if response.ok:
    print("✅ Success!")
    data = response.json
else:
    print(f"❌ Error: {response.error.message}")
    for error in response.errors:
        print(f"  - {error}")

Using raise_for_status()

# Method 2: Use raise_for_status() for exception-based handling
try:
    response = cb.publish("context", body={"data": "value"})
    response.raise_for_status()  # Raises ContextbaseError if failed
    print("✅ Success!")
    data = response.json
except ContextbaseError as e:
    print(f"❌ API Error: {e.message}")
    if e.status_code == 400:
        print("Bad request - check your data")
    elif e.status_code == 401:
        print("Unauthorized - check your API key")
    elif e.status_code == 422:
        print("Validation error - check required fields")

Common error scenarios

Authentication errors

try:
    client = Contextbase(api_key="invalid-key")
    response = cb.publish("context", body={"data": "value"})
    response.raise_for_status()
except ContextbaseError as e:
    if e.status_code == 401:
        print("❌ Invalid API key. Please check your credentials.")
    elif e.status_code == 403:
        print("❌ Access forbidden. Check your permissions.")

Validation errors

try:
    # Missing required context_name
    response = cb.publish("", body={"data": "value"})
    response.raise_for_status()
except ContextbaseError as e:
    if e.status_code == 422:
        print("❌ Validation failed:")
        for error in e.errors:
            print(f"  - {error}")

File upload errors

from contextbase import ContextbaseFile

# Handle file creation errors
try:
    file = ContextbaseFile.from_path("nonexistent.pdf")
except ValueError as e:
    print(f"❌ File error: {e}")

# Handle upload errors
try:
    file = ContextbaseFile.from_path("document.pdf")
    response = cb.publish("context", file=file)
    response.raise_for_status()
except ValueError as e:
    print(f"❌ File validation error: {e}")
except ContextbaseError as e:
    if e.status_code == 413:
        print("❌ File too large")
    elif e.status_code == 415:
        print("❌ Unsupported file type")
    else:
        print(f"❌ Upload failed: {e.message}")

Network errors

import requests
from requests.exceptions import ConnectionError, Timeout, RequestException

try:
    response = cb.publish("context", body={"data": "value"})
except ConnectionError:
    print("❌ Network connection failed. Please check your internet connection.")
except Timeout:
    print("❌ Request timed out. Please try again.")
except RequestException as e:
    print(f"❌ Network error: {e}")