#!/usr/bin/env bash set -euo pipefail BASE_URL="${1:-https://wegwichtel.de/api}" GPX_FILE="${2:-}" JSON_FILE="${3:-}" if [[ ! -f "$GPX_FILE" || ! -f "$JSON_FILE" ]]; then echo "Aufruf: $0 " >&2 echo "Gib vorhandene Dateien an. Die Beispielstrecken werden nicht mehr mitgeliefert." >&2 exit 2 fi for command in curl python3; do command -v "$command" >/dev/null 2>&1 || { echo "Fehler: $command wird benötigt." >&2 exit 1 } done read_json() { python3 - "$JSON_FILE" "$1" <<'PY' import json import sys with open(sys.argv[1], encoding='utf-8') as handle: data = json.load(handle) value = data for part in sys.argv[2].split('.'): value = value[int(part)] if part.isdigit() else value[part] print(value) PY } NAME="$(read_json name)" DESCRIPTION="$(read_json description)" echo "Lege Beispielstrecke über $BASE_URL an …" ROUTE_RESPONSE="$(curl --fail --silent --show-error \ -X POST "$BASE_URL/routes" \ -F "name=$NAME" \ -F "description=$DESCRIPTION" \ -F "gpx=@$GPX_FILE;type=application/gpx+xml")" ROUTE_ID="$(python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])' <<<"$ROUTE_RESPONSE")" rollback() { echo "Upload fehlgeschlagen. Entferne die unvollständige Beispielstrecke $ROUTE_ID …" >&2 curl --fail --silent --show-error -X DELETE "$BASE_URL/routes/$ROUTE_ID" >/dev/null || true } trap rollback ERR POI_COUNT="$(python3 -c 'import json,sys; print(len(json.load(open(sys.argv[1], encoding="utf-8"))["pois"]))' "$JSON_FILE")" for ((index=0; index/dev/null echo " Streckenpunkt $((index + 1))/$POI_COUNT: $TITLE" done trap - ERR cat <