TravelTime Python SDK
The TravelTime Python SDK provides a simple and efficient way to access the TravelTime API, enabling you to calculate travel times and distances, generate isochrones, and perform location-based queries using real-world transportation data.
Features
- Time Matrix & Filtering: Calculate travel times between multiple origins and destinations
- Isochrone Generation: Create time-based catchment areas in multiple formats (GeoJSON, WKT)
- Route Planning: Get detailed turn-by-turn directions between locations
- Geocoding: Convert addresses to coordinates and vice versa
- Specialized Analysis: UK postcode analysis, H3 hexagon analysis, and geohash analysis
- Transportation Modes: Support for driving, public transport, walking, cycling, and multimodal transport
- Async Support: Both synchronous and asynchronous clients available
- Performance Options: Fast endpoints for high-volume use cases
Requirements
- Python 3.10 or higher
To check your Python version:
python --version
Installation
Install the TravelTime Python SDK using pip:
pip install traveltimepy
Optional Dependencies
For protocol buffer (protobuf) support (required for TimeFilterFastProto endpoints):
pip install 'traveltimepy[proto]'
Getting Started
Authentication
Get your API credentials from the TravelTime Developer Portal.
Basic Usage
from datetime import datetime
from traveltimepy import Client
from traveltimepy.requests.common import Location, Coordinates, Property
from traveltimepy.requests.time_filter import TimeFilterDepartureSearch
from traveltimepy.requests.transportation import PublicTransport
from traveltimepy.errors import TravelTimeApiError
# Define locations
locations = [
Location(id="London center", coords=Coordinates(lat=51.508930, lng=-0.131387)),
Location(id="Hyde Park", coords=Coordinates(lat=51.508824, lng=-0.167093)),
Location(id="ZSL London Zoo", coords=Coordinates(lat=51.536067, lng=-0.153596))
]
# Option 1: Standard usage (manual session management)
client = Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
try:
response = client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800, # 30 minutes
properties=[Property.TRAVEL_TIME]
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
finally:
client.close() # Manually close session
# Option 2: Context manager (automatic session cleanup)
with Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY") as client:
try:
response = client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800,
properties=[Property.TRAVEL_TIME]
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
# Session automatically closed when exiting 'with' block
Async Usage
import asyncio
from datetime import datetime
from traveltimepy import AsyncClient
from traveltimepy.requests.common import Location, Coordinates
from traveltimepy.requests.time_filter import TimeFilterDepartureSearch
from traveltimepy.requests.transportation import PublicTransport
from traveltimepy.errors import TravelTimeApiError
locations = [
Location(id="London center", coords=Coordinates(lat=51.508930, lng=-0.131387)),
Location(id="Hyde Park", coords=Coordinates(lat=51.508824, lng=-0.167093)),
Location(id="ZSL London Zoo", coords=Coordinates(lat=51.536067, lng=-0.153596))
]
# Option 1: Standard async usage (manual session management)
async def main():
client = AsyncClient(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
try:
response = await client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
finally:
await client.close() # Manually close session
# Option 2: Async context manager (automatic session cleanup)
async def main_with_context():
async with AsyncClient(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY") as client:
try:
response = await client.time_filter(
locations=locations,
departure_searches=[
TimeFilterDepartureSearch(
id="London center",
departure_location_id="London center",
arrival_location_ids=["Hyde Park", "ZSL London Zoo"],
departure_time=datetime.now(),
transportation=PublicTransport(),
travel_time=1800
)
],
arrival_searches=[]
)
print(f"Found {len(response.results)} results")
for result in response.results:
print(f"Search ID: {result.search_id}")
except TravelTimeApiError as e:
print(e)
# Session automatically closed when exiting 'async with' block
# Run either version
asyncio.run(main())
# or
asyncio.run(main_with_context())
Core Methods
The SDK provides both synchronous (Client) and asynchronous (AsyncClient) versions of all methods:
Time Matrix & Filtering
time_filter()- Calculate travel times between locationstime_filter_fast()- High-performance version for large datasetstime_filter_proto()- Ultra-fast protocol buffer implementation (requirespip install 'traveltimepy[proto]')
Isochrone Generation
time_map()- Generate travel time polygonstime_map_geojson()- GeoJSON format isochronestime_map_wkt()- WKT format isochronestime_map_fast()- High-performance isochronestime_map_fast_geojson()- Fast GeoJSON isochronestime_map_fast_wkt()- Fast WKT isochrones
Route Planning
routes()- Calculate detailed routes between locations
Geocoding
geocoding()- Convert addresses to coordinatesreverse_geocoding()- Convert coordinates to addresses
Specialized Analysis
h3()- H3 hexagon analysish3_fast()- Fast H3 analysisgeohash()- Geohash analysisgeohash_fast()- Fast geohash analysisgeohash_fast_proto()- Ultra-fast protocol buffer geohash analysis (requirespip install 'traveltimepy[proto]')postcodes()- UK postcode analysispostcode_districts()- UK postcode district analysispostcode_sectors()- UK postcode sector analysisdistance_map()- Distance-based catchment areas
Utility Methods
map_info()- Get supported countries and featuressupported_locations()- Check location support
Configuration
The SDK supports various configuration options:
from traveltimepy import Client, AsyncClient
# Synchronous client
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
timeout=300, # Request timeout in seconds
retry_attempts=3, # Number of retry attempts for 5xx errors
max_rpm=60, # Maximum requests per minute
)
# Asynchronous client
async_client = AsyncClient(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
timeout=300,
retry_attempts=3,
max_rpm=60
)
Error Handling and Retries
The SDK automatically handles both rate limiting and server error retries:
- Rate limiting: Automatically handled with exponential backoff
- Server errors (5xx): Automatically retried up to 3 times with immediate retry
- Client errors (4xx): Not retried (indicates invalid request)
# Retries are built-in - no additional code needed
client = Client(app_id="YOUR_APP_ID", api_key="YOUR_API_KEY")
response = client.time_filter(
locations=locations,
departure_searches=searches
) # Automatically retries on 5xx errors
Configuring Retries
You can configure the number of retry attempts:
# Custom retry attempts
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
retry_attempts=5 # Will retry up to 5 times on 5xx errors
)
# Disable retries completely
client = Client(
app_id="YOUR_APP_ID",
api_key="YOUR_API_KEY",
retry_attempts=0 # No retries, fail immediately
)
Examples
The examples/ directory contains practical examples.
See examples/README.md for setup instructions and detailed descriptions.
Performance Tips
- Use
*_fast()methods for high-volume use cases - Use
time_filter_proto()andgeohash_fast_proto()for maximum performance with large datasets (install withpip install 'traveltimepy[proto]') - Use async methods for I/O-bound applications
Documentation
For comprehensive documentation, including detailed parameter references and advanced usage examples, visit:
Support
If you have questions or need help:
- Create an issue on GitHub
- Check the API documentation
- Contact TravelTime support
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for traveltimepy 4.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| traveltimepy-4.8.0.tar.gz | 77.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| traveltimepy-4.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 160.2 kB
Release files / traveltimepy-4.8.0.tar.gz
| Download URL | traveltimepy-4.8.0.tar.gz |
|---|---|
| Size | 77.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6fed54717664ac8a07f3e3ffd58dcd20fa84c0fd1404846e57fa8d37ca760508
|
|
BLAKE2b-256 checksum How to use checksums |
2f4944f22e6ed2afcf9a434d208f6c4a51dcec87a05dc5b911f33065923e680c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|
Release files / traveltimepy-4.8.0-py3-none-any.whl
| Download URL | traveltimepy-4.8.0-py3-none-any.whl |
|---|---|
| Size | 83.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
571b529688ac566245d5c2d14f60c4734ae8103d399193c43958a2216eeee631
|
|
BLAKE2b-256 checksum How to use checksums |
abaa2dbd4104f51229f89016862023bab204fee860c232ac894553e4ad631ede
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.21
|
Security for traveltimepy 4.8.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.