Skip to content

Advanced Usage

Advanced configuration and customization patterns.

Custom Transports

Override transport behavior for specific requirements:

import httpx
from bookalimo import (
    AsyncBookalimo,
)
from bookalimo.transport import (
    AsyncTransport,
)

# Custom transport configuration
custom_transport = AsyncTransport(
    base_url="https://api.bookalimo.com",
    timeouts=httpx.Timeout(
        connect=5.0,
        read=30.0,
        write=5.0,
        pool=2.0,
    ),
    credentials=credentials,
    retries=5,
    backoff=1.0,
)

# Use custom transport
async with AsyncBookalimo(transport=custom_transport) as client:
    quote = await client.pricing.quote(PriceRequest(...))

Configuration Constants

Access default configuration from bookalimo.config:

from bookalimo.config import (
    DEFAULT_BASE_URL,
    DEFAULT_TIMEOUT,
    DEFAULT_USER_AGENT,
    DEFAULT_RETRIES,
    DEFAULT_BACKOFF,
    DEFAULT_STATUS_FORCELIST,
)

# Use in custom configuration
transport = AsyncTransport(
    base_url=DEFAULT_BASE_URL,
    retries=DEFAULT_RETRIES * 2,  # Double default retries
    backoff=DEFAULT_BACKOFF,
)

Available Constants

  • DEFAULT_BASE_URL - "https://www.bookalimo.com/web/api"
  • DEFAULT_TIMEOUT - 5.0
  • DEFAULT_USER_AGENT - "bookalimo-python/{version}"
  • DEFAULT_RETRIES - 2
  • DEFAULT_BACKOFF - 0.3
  • DEFAULT_STATUS_FORCELIST - (500, 502, 503, 504)

Logging Configuration

Environment Variable

export BOOKALIMO_LOG_LEVEL=DEBUG

Programmatic Setup

import logging
from bookalimo.logging import (
    get_logger,
)

# Configure SDK logging
logging.getLogger("bookalimo").setLevel(logging.DEBUG)

# Or get specific logger
transport_logger = get_logger("transport")
places_logger = get_logger("places")

Debug Logging

Enable debug logging to see request/response details:

import logging

logging.getLogger("bookalimo.transport").setLevel(logging.DEBUG)

async with AsyncBookalimo(credentials=creds) as client:
    quote = await client.pricing.quote(PriceRequest(...))
    # Logs show:
    # → [abc12345] POST /booking/price/ body_keys=['dateTime', 'pickup', ...]
    # ← [abc12345] 200 /booking/price/ in 245.3 ms len=1024

Retry Configuration

Customize retry behavior:

# Aggressive retry for unreliable networks
transport = AsyncTransport(
    retries=10,
    backoff=2.0,
    credentials=credentials,  # 2s, 4s, 8s, 16s...
)

# No retries for testing
test_transport = SyncTransport(
    retries=0,
    timeouts=1.0,
    credentials=test_credentials,
)

Custom HTTP Clients

Inject pre-configured httpx clients:

# Custom httpx client
async with httpx.AsyncClient(
    timeout=30.0,
    limits=httpx.Limits(max_connections=100),
) as http_client:
    transport = AsyncTransport(
        client=http_client,
        credentials=credentials,
    )

    async with AsyncBookalimo(transport=transport) as client:
        quote = await client.pricing.quote(PriceRequest(...))