Skip to main content

Python wrapper for the Book-A-Limo API

Project description

Bookalimo Python SDK

codecov Docs PyPI version Python Support License: MIT Code style: ruff

Python client library for the Book-A-Limo transportation booking API with async/sync support, type safety, and Google Places integration.

Design philosophy: IDE-first DX

The library is comprehensively typed and richly documented via docstrings. Most users can rely on IDE hints, docstrings, and autocomplete without reading the docs.

Features

  • Async & Sync SupportAsyncBookalimo and Bookalimo clients
  • Type Safety – Full Pydantic models with validation
  • Google Places Integration – Location search and geocoding
  • Automatic Retry – Built-in exponential backoff
  • Resource Management – Context managers for proper cleanup

Installation

pip install bookalimo

# With Google Places integration
pip install bookalimo[places]

Quick Example

import asyncio
from bookalimo import (
    AsyncBookalimo,
)
from bookalimo.transport.auth import (
    Credentials,
)
from bookalimo.schemas import (
    RateType,
    Location,
    LocationType,
    Address,
    City,
    Airport,
    PriceRequest,
    BookRequest,
)


async def book_ride():
    credentials = Credentials.create(
        "your_id",
        "your_password",
        is_customer=False,
    )

    pickup = Location(
        type=LocationType.ADDRESS,
        address=Address(
            place_name="Empire State Building",
            city=City(
                city_name="New York",
                country_code="US",
                state_code="NY",
            ),
        ),
    )
    dropoff = Location(
        type=LocationType.AIRPORT,
        airport=Airport(iata_code="JFK"),
    )

    async with AsyncBookalimo(credentials=credentials) as client:
        # Get pricing
        quote = await client.pricing.quote(
            PriceRequest(
                rate_type=RateType.P2P,
                date_time="12/25/2024 03:00 PM",
                pickup=pickup,
                dropoff=dropoff,
                passengers=2,
                luggage=2,
            )
        )

        # Book reservation
        booking = await client.reservations.book(
            BookRequest(
                token=quote.token,
                method="charge",
            )
        )
        return booking.reservation_id


confirmation = asyncio.run(book_ride())

Sync Usage

from bookalimo import (
    Bookalimo,
)

with Bookalimo(credentials=credentials) as client:
    quote = client.pricing.quote(PriceRequest(...))
    booking = client.reservations.book(
        BookRequest(
            token=quote.token,
            method="charge",
        )
    )

Google Places Integration

async with AsyncBookalimo(
    credentials=credentials,
    google_places_api_key="your-google-places-key",
) as client:
    # Search locations
    results = await client.places.search("Hilton Miami Beach")

    # Resolve airports near landmarks
    airports = await client.places.resolve_airport(query="eiffel tower")
    top_airport = airports[0]  # Closest airport with confidence scoring

    # Use in booking flow
    quote = await client.pricing.quote(...)

Error Handling

from bookalimo.exceptions import (
    BookalimoHTTPError,
    BookalimoValidationError,
)

try:
    booking = await client.reservations.book(...)
except BookalimoValidationError as e:
    print(f"Invalid input: {e.message}")
except BookalimoHTTPError as e:
    if e.status_code == 401:
        print("Authentication failed")

Environment

export GOOGLE_PLACES_API_KEY="your_google_places_key"
export BOOKALIMO_LOG_LEVEL="DEBUG"

Documentation

📖 Complete Documentation: https://asparagusbeef.github.io/bookalimo-python

Requirements

  • Python 3.9+
  • Book-A-Limo API credentials
  • Dependencies: httpx, pydantic, pycountry, us, airportsdata, typing-extensions for Python 3.9-3.10
    • Optional: google-maps-places, google-api-core, numpy, rapidfuzz

Support & Resources

License

MIT License — see LICENSE for details.

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

bookalimo-1.0.2.tar.gz (83.2 kB view details)

Uploaded Source

Built Distribution

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

bookalimo-1.0.2-py3-none-any.whl (67.1 kB view details)

Uploaded Python 3

File details

Details for the file bookalimo-1.0.2.tar.gz.

File metadata

  • Download URL: bookalimo-1.0.2.tar.gz
  • Upload date:
  • Size: 83.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for bookalimo-1.0.2.tar.gz
Algorithm Hash digest
SHA256 b1dce4bdd6937db84191ccb917cfc84dcb6e414e9e748b9893e54eb2510da963
MD5 8c244c6acb2aa706f216c79ed1d1a27b
BLAKE2b-256 1ba1b2e45a90e033a7aa04b8376f541c5ac3838d5cf31a58f1c75b4adb3bd337

See more details on using hashes here.

File details

Details for the file bookalimo-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: bookalimo-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 67.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for bookalimo-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2b40cb0e087c713a01b5eee56a71650a35cb4fb30df5358092529a7e2172c658
MD5 1b54247ba4bbfaa27e5154fc3b0652d8
BLAKE2b-256 c514f5567cad6964489a285ba1c764b504c1cfb3d8b1763ee063f61a664c8949

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