Skip to main content

hcb_soap_client

A Python async SOAP client for the "Here Comes the Bus" API, used to track school bus locations and schedules.

Installation

pip install hcb_soap_client

Or install from source:

git clone https://github.com/pcartwright81/hcb_soap_client.git
cd hcb_soap_client
pip install -e .

Usage

Using the async context manager is the most efficient approach as it reuses the HTTP session across multiple requests:

import asyncio
from hcb_soap_client import HcbSoapClient

async def main():
    async with HcbSoapClient() as client:
        # Get school ID from school code
        school_id = await client.get_school_id("YOUR_SCHOOL_CODE")

        # Login and get parent/account info
        account = await client.get_parent_info(school_id, "username", "password")
        print(f"Account ID: {account.account_id}")
        print(f"Students: {[s.first_name for s in account.students]}")

        # Get bus stop info for a student
        for student in account.students:
            # Use AM_ID for morning routes, PM_ID for afternoon
            stops = await client.get_stop_info(
                school_id,
                account.account_id,
                student.student_id,
                HcbSoapClient.AM_ID  # or HcbSoapClient.PM_ID
            )

            if stops.vehicle_location:
                print(f"Bus location: {stops.vehicle_location.address}")
                print(f"Speed: {stops.vehicle_location.speed} mph")

asyncio.run(main())

Simple Usage (Without Context Manager)

For one-off requests, you can use the client without a context manager. Note that this creates a new HTTP session for each request:

async def simple_example():
    client = HcbSoapClient()
    school_id = await client.get_school_id("YOUR_SCHOOL_CODE")

Using a Custom Session

You can provide your own aiohttp.ClientSession for advanced use cases:

import aiohttp

async def custom_session_example():
    async with aiohttp.ClientSession() as session:
        client = HcbSoapClient(session=session)
        school_id = await client.get_school_id("YOUR_SCHOOL_CODE")

API Reference

HcbSoapClient

Constructor

HcbSoapClient(url: str | None = None, session: aiohttp.ClientSession | None = None)
  • url: Optional custom API endpoint (defaults to production URL)
  • session: Optional aiohttp session to reuse

Class Attributes

  • AM_ID: Time of day ID for morning routes
  • PM_ID: Time of day ID for afternoon routes

Methods

get_school_id(school_code: str) -> str

Look up the school ID from a school code.

get_parent_info(school_id: str, username: str, password: str) -> AccountResponse

Authenticate and retrieve account information including students and time of day options.

get_stop_info(school_id: str, parent_id: str, student_id: str, time_of_day_id: str) -> StopResponse

Get bus stop information and current vehicle location for a student.

Response Models

All response models are Pydantic BaseModel instances.

AccountResponse

  • account_id: str
  • students: list[Student]
  • times: list[TimeOfDay]

Student

  • student_id: str
  • first_name: str
  • last_name: str

StopResponse

  • vehicle_location: VehicleLocation | None
  • student_stops: list[StudentStop]

VehicleLocation

  • name: str - Vehicle/bus name
  • latitude: float
  • longitude: float
  • log_time: datetime
  • speed: int
  • heading: str
  • address: str
  • ignition: bool
  • display_on_map: bool

Development

Install development dependencies

pip install -e ".[dev,test]"

Run tests

pytest

Run linter

ruff check .

License

MIT License - see LICENSE for details.

Metadata

Release files for hcb-soap-client 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hcb-soap-client 0.1.5
File Size Uploaded
hcb_soap_client-0.1.5.tar.gz 11.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hcb-soap-client 0.1.5
File Interpreter ABI Platform
hcb_soap_client-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 25.9 kB

Release files / hcb_soap_client-0.1.5.tar.gz

Download URL hcb_soap_client-0.1.5.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
659a59cd6dc89b7ac2456f250ac40ffdec86200caf75941ac19346a7f1680ac7
BLAKE2b-256 checksum
How to use checksums
da48f66e713423ec7efce6c3256cb729e4f4324a3c4306ba722b54d7bc7131e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / hcb_soap_client-0.1.5-py3-none-any.whl

Download URL hcb_soap_client-0.1.5-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bec246f2d9aa03b34715c81182e0239d0c1a89a0d70702de5ee761e5dc8ce1e9
BLAKE2b-256 checksum
How to use checksums
b3609eb6273f7ea6e1a1c136a4803e1494a856c5d56ac866d443e1a289149c55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.5 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.10

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page