import enum import os from typing import Any import requests from rec.utils import nextMonday url = "https://routes.googleapis.com/directions/v2:computeRoutes" API_KEY_ENVIRONMENT_VARIABLE = "ROUTING_API_KEY" class TravelMode(enum.StrEnum): TRANSIT = "TRANSIT" BICYCLE = "BICYCLE" WALK = "WALK" DRIVE = "DRIVE" def transit_route( origin_lat: float, origin_lon: float, dest_address: str, travel_mode: TravelMode, compute_alternative_routes=True, ) -> dict[str, Any]: monday9am = nextMonday() # must be set api_key = os.environ[API_KEY_ENVIRONMENT_VARIABLE] header = { "X-Goog-Api-Key": api_key, "Content-Type": "application/json", "X-Goog-FieldMask": "routes.distanceMeters,routes.duration,routes.staticDuration,routes.legs.steps.distanceMeters,routes.legs.steps.staticDuration,routes.legs.steps.travelMode", # "routes.*", } body = { "origin": { # "address": origin_address "location": {"latLng": {"latitude": origin_lat, "longitude": origin_lon}} }, "destination": { "address": dest_address # "location": { # "latLng": { # "latitude": dest_lat, # "longitude": dest_lon # } # } }, "travelMode": travel_mode.value, # "2023-10-15T15:01:23.045123456Z" "departureTime": monday9am.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), "computeAlternativeRoutes": compute_alternative_routes, # "routeModifiers": { # "avoidTolls": false, # "avoidHighways": false, # "avoidFerries": false # }, "languageCode": "en-US", "units": "METRIC", } r = requests.post(url, json=body, headers=header) if r.status_code == 200: return r.json() raise Exception(r.json())