Tonic's picture
ci: deploy pro_materialization (59b9bb31916b)
c6dda10 verified
"""Mapbox Static Images metadata only — runtime fetch has been removed."""
from __future__ import annotations
import os
MAPBOX_STYLE = "mapbox/satellite-v9"
MAPBOX_STATIC_BASE = "https://api.mapbox.com/styles/v1"
MAPBOX_ATTRIBUTION = "© Mapbox © OpenStreetMap © Maxar"
def mapbox_style() -> str:
return (
os.environ.get("NUTONIC_MAPBOX_STATIC_STYLE") or os.environ.get("MAPBOX_STATIC_STYLE") or MAPBOX_STYLE
).strip()
def mapbox_static_base() -> str:
return (
os.environ.get("NUTONIC_MAPBOX_STATIC_BASE")
or os.environ.get("MAPBOX_STATIC_BASE")
or MAPBOX_STATIC_BASE
).strip().rstrip("/")
def mapbox_attribution() -> str:
return (
os.environ.get("NUTONIC_MAPBOX_ATTRIBUTION")
or os.environ.get("MAPBOX_ATTRIBUTION")
or MAPBOX_ATTRIBUTION
).strip()
def mapbox_timeout_seconds() -> float:
return _env_float(
"NUTONIC_MAPBOX_TIMEOUT_SECONDS",
"MAPBOX_TIMEOUT_SECONDS",
default=120.0,
minimum=1.0,
)
def mapbox_retry_count() -> int:
return _env_int("NUTONIC_MAPBOX_RETRY_COUNT", "MAPBOX_RETRY_COUNT", default=1, minimum=0)
def mapbox_source_metadata() -> dict[str, str]:
return {
"provider": "mapbox",
"style": mapbox_style(),
"static_base": mapbox_static_base(),
"attribution": mapbox_attribution(),
}
def _env_float(*names: str, default: float, minimum: float) -> float:
for name in names:
raw = os.environ.get(name)
if raw is None or not raw.strip():
continue
try:
return max(minimum, float(raw.strip()))
except ValueError:
return default
return default
def _env_int(*names: str, default: int, minimum: int) -> int:
for name in names:
raw = os.environ.get(name)
if raw is None or not raw.strip():
continue
try:
return max(minimum, int(raw.strip()))
except ValueError:
return default
return default