Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions geemap/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -1351,9 +1351,18 @@ def _get_available_basemaps(self) -> dict[str, Any]:
"""
tile_providers = list(basemaps.get_xyz_dict().values())
if coreutils.get_google_maps_api_key():
tile_providers = tile_providers + list(
basemaps.get_google_map_tile_providers().values()
)
try:
tile_providers = tile_providers + list(
basemaps.get_google_map_tile_providers().values()
)
except Exception as e:
logging.warning(
"Unable to load Google Maps basemaps: %s. Continuing without "
"them. Unset the GOOGLE_MAPS_API_KEY environment variable if "
"your account or region does not support the Google Maps "
"Tiles API.",
e,
)

ret_dict = {}
for tile_info in tile_providers:
Expand Down
16 changes: 13 additions & 3 deletions geemap/maplibregl.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import base64
import glob
import importlib.resources
import logging
import os
import re
from typing import Any
Expand Down Expand Up @@ -169,9 +170,18 @@ def _get_available_basemaps(self) -> dict[str, Any]:
"""Convert xyz tile services to a dictionary of basemaps."""
tile_providers = list(get_xyz_dict().values())
if coreutils.get_google_maps_api_key():
tile_providers = tile_providers + list(
get_google_map_tile_providers().values()
)
try:
tile_providers = tile_providers + list(
get_google_map_tile_providers().values()
)
except Exception as e:
logging.warning(
"Unable to load Google Maps basemaps: %s. Continuing without "
"them. Unset the GOOGLE_MAPS_API_KEY environment variable if "
"your account or region does not support the Google Maps "
"Tiles API.",
e,
)

ret_dict = {}
for tile_info in tile_providers:
Expand Down
25 changes: 25 additions & 0 deletions tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,31 @@ def test_defaults(self):
self.assertIsInstance(controls[5], ipyleaflet.ScaleControl)
self.assertIsInstance(controls[6], ipyleaflet.AttributionControl)

def test_available_basemaps_survive_google_maps_error(self):
"""Map creation should not fail when Google Maps basemaps can't load.

Regression test for #2701: having GOOGLE_MAPS_API_KEY set should not
crash map creation if the account/region can't access the Tiles API.
"""
with (
mock.patch.object(
core.coreutils, "get_google_maps_api_key", return_value="fake-key"
),
mock.patch.object(
core.basemaps,
"get_google_map_tile_providers",
side_effect=RuntimeError("Error creating a Maps API session"),
),
):
with self.assertLogs(level="WARNING") as logged:
new_map = core.Map(ee_initialize=False)

# Standard basemaps are still available despite the Google Maps failure.
self.assertGreater(len(new_map._available_basemaps), 0)
self.assertTrue(
any("Unable to load Google Maps" in message for message in logged.output)
)

def test_set_center(self):
"""Tests that `set_center` sets the center and zoom."""
self.core_map.set_center(1, 2, 3)
Expand Down