Skip to main content

Python client for the Brookmimir API

Project description

odins-eye

PyPI version Python versions License: MIT

Python client library for the Brookmimir API.

Features

  • Synchronous and Asynchronous clients - Choose between sync (OdinsEyeClient) or async (AsyncOdinsEyeClient) based on your needs
  • Comprehensive API coverage - Access all Brookmimir API endpoints
  • Type-safe - Full type hints with Pydantic validation
  • Automatic retries - Built-in retry logic with exponential backoff
  • Rate limiting handling - Automatic detection and handling of rate limits
  • HTTP/2 support - Faster connections with HTTP/2
  • Context manager support - Automatic resource cleanup
  • Debug logging - Optional logging for troubleshooting
  • Comprehensive error handling - Detailed error messages and exception types

Installation

Install from PyPI:

pip install odins-eye

Install with development dependencies:

pip install odins-eye[dev]

Quick Start

Synchronous Usage

from odins_eye import OdinsEyeClient

# Initialize the client
client = OdinsEyeClient(api_key="your-api-key")

try:
    # Check API status
    status = client.index()
    print(f"API Status: {status}")

    # Get user profile
    profile = client.profile()
    print(f"User: {profile['user']['name']}")

    # Check credit balance
    credits = client.credits()
    print(f"Balance: {credits['current_balance']}")
finally:
    client.close()

Asynchronous Usage

import asyncio
from odins_eye import AsyncOdinsEyeClient

async def main():
    async with AsyncOdinsEyeClient(api_key="your-api-key") as client:
        # Make concurrent requests
        status, profile, credits = await asyncio.gather(
            client.index(),
            client.profile(),
            client.credits()
        )
        print(f"API Status: {status}")
        print(f"User: {profile['user']['name']}")
        print(f"Credits: {credits['current_balance']}")

asyncio.run(main())

Using Context Managers (Recommended)

with OdinsEyeClient(api_key="your-api-key") as client:
    status = client.index()
    print(status)

# Async version
async with AsyncOdinsEyeClient(api_key="your-api-key") as client:
    status = await client.index()
    print(status)

API Methods

Status and Version

# Get API status
status = client.index()

# Get API version
version = client.version()

# Run network test
result = client.nettest()

User Profile and Credits

# Get user profile
profile = client.profile()
print(f"Name: {profile['user']['name']}, Age: {profile['user']['age']}")

# Check credit balance
credits = client.credits()
print(f"Balance: {credits['current_balance']}")

Document Retrieval

# Fetch a document by ID
document = client.document("doc-123")

Query Submission

# Submit a query
query_result = client.query({
    "query": {
        "match_all": {}
    }
})

Face Search

# Basic face search
results = client.face_search("path/to/image.jpg")

# Face search with parameters
results = client.face_search(
    "path/to/image.jpg",
    payload={
        "threshold": 0.8,
        "max_results": 10
    }
)

Error Handling

The client provides detailed error information through exception types:

from odins_eye import OdinsEyeClient, OdinsEyeAPIError, OdinsEyeError

with OdinsEyeClient(api_key="your-api-key") as client:
    try:
        result = client.profile()
    except OdinsEyeAPIError as e:
        # API returned an error (4xx or 5xx)
        print(f"API Error: {e.message}")
        print(f"Status Code: {e.status_code}")
        if e.error:
            print(f"Error: {e.error}")
        if e.error_details:
            print(f"Details: {e.error_details}")
    except OdinsEyeError as e:
        # Client-side error (validation, network, etc.)
        print(f"Client Error: {e.message}")

Handling Rate Limits

Rate limiting is automatically handled with retries:

from odins_eye import OdinsEyeAPIError

try:
    result = client.profile()
except OdinsEyeAPIError as e:
    if e.status_code == 429:
        print("Rate limit exceeded")
        if e.rate_limit_reset:
            print(f"Resets at: {e.rate_limit_reset}")

Configuration

Custom Timeout

import httpx
from odins_eye import OdinsEyeClient

timeout = httpx.Timeout(30.0, connect=10.0)
client = OdinsEyeClient(api_key="your-api-key", timeout=timeout)

Custom Retry Configuration

from odins_eye import OdinsEyeClient, RetryConfig

retry_config = RetryConfig(
    max_retries=5,
    initial_delay=2.0,
    max_delay=120.0,
    exponential_base=2.0,
    retry_on_rate_limit=True
)

client = OdinsEyeClient(
    api_key="your-api-key",
    retry_config=retry_config
)

Enable Debug Logging

import logging
from odins_eye import OdinsEyeClient

# Configure logging
logging.basicConfig(level=logging.DEBUG)

# Enable client logging
client = OdinsEyeClient(
    api_key="your-api-key",
    enable_logging=True
)

Custom Headers

client = OdinsEyeClient(
    api_key="your-api-key",
    headers={
        "X-Custom-Header": "value"
    }
)

Environment Variables

For security, consider using environment variables for your API key:

import os
from odins_eye import OdinsEyeClient

api_key = os.getenv("BROOK_MIMIR_API_KEY")
client = OdinsEyeClient(api_key=api_key)

Requirements

  • Python >= 3.9
  • httpx[http2] >= 0.27.0
  • pydantic >= 2.6.0

API Documentation

For detailed API documentation, visit the Brookmimir API docs.

Changelog

See CHANGELOG.md for release history and changes.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Links

Support

For support and questions:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odins_eye-1.3.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odins_eye-1.3.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file odins_eye-1.3.0.tar.gz.

File metadata

  • Download URL: odins_eye-1.3.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for odins_eye-1.3.0.tar.gz
Algorithm Hash digest
SHA256 45629840d073a97c7d87c012a03c5456b2010d2c95eef956549ec3adf91fd0be
MD5 113ba455a1e691255cf9620515bb9ac5
BLAKE2b-256 348ec9be7f1bfe0adfdb13347ae312881eadb94a7e919d76a92ccdb775c12374

See more details on using hashes here.

File details

Details for the file odins_eye-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: odins_eye-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.2

File hashes

Hashes for odins_eye-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1466400d28644d61ac6c3c24e64db8b2cd6ce7df9ad71e32f682753f7cb74417
MD5 ff4bb41af958c57f206f19fc2c12cf61
BLAKE2b-256 c9c81d7eed0819ac82397ead88a339ea6d2fe48c821114ac0f72d4509d575d08

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page