Exception handling #74

This commit is contained in:
Ian Renton
2025-11-02 17:59:37 +00:00
parent e83ddead62
commit ebf07f352f

View File

@@ -1,4 +1,5 @@
import csv import csv
import logging
from pyhamtools.locator import latlong_to_locator from pyhamtools.locator import latlong_to_locator
@@ -28,89 +29,92 @@ def get_ref_regex_for_sig(sig):
# Note there is currently no support for KRMNPA location lookup, see issue #61. # Note there is currently no support for KRMNPA location lookup, see issue #61.
def get_sig_ref_info(sig, sig_ref_id): def get_sig_ref_info(sig, sig_ref_id):
sig_ref = SIGRef(id=sig_ref_id, sig=sig) sig_ref = SIGRef(id=sig_ref_id, sig=sig)
if sig.upper() == "POTA": try:
data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.pota.app/park/" + sig_ref_id, headers=HTTP_HEADERS).json() if sig.upper() == "POTA":
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.pota.app/park/" + sig_ref_id, headers=HTTP_HEADERS).json()
fullname = data["name"] if "name" in data else None if data:
if fullname and "parktypeDesc" in data and data["parktypeDesc"] != "": fullname = data["name"] if "name" in data else None
fullname = fullname + " " + data["parktypeDesc"] if fullname and "parktypeDesc" in data and data["parktypeDesc"] != "":
sig_ref.name = fullname fullname = fullname + " " + data["parktypeDesc"]
sig_ref.url = "https://pota.app/#/park/" + sig_ref_id sig_ref.name = fullname
sig_ref.grid = data["grid6"] if "grid6" in data else None sig_ref.url = "https://pota.app/#/park/" + sig_ref_id
sig_ref.latitude = data["latitude"] if "latitude" in data else None sig_ref.grid = data["grid6"] if "grid6" in data else None
sig_ref.longitude = data["longitude"] if "longitude" in data else None sig_ref.latitude = data["latitude"] if "latitude" in data else None
elif sig.upper() == "SOTA": sig_ref.longitude = data["longitude"] if "longitude" in data else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://api-db2.sota.org.uk/api/summits/" + sig_ref_id, elif sig.upper() == "SOTA":
headers=HTTP_HEADERS).json() print(sig_ref_id)
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://api-db2.sota.org.uk/api/summits/" + sig_ref_id,
sig_ref.name = data["name"] if "name" in data else None headers=HTTP_HEADERS).json()
sig_ref.url = "https://www.sotadata.org.uk/en/summit/" + sig_ref_id if data:
sig_ref.grid = data["locator"] if "locator" in data else None sig_ref.name = data["name"] if "name" in data else None
sig_ref.latitude = data["latitude"] if "latitude" in data else None sig_ref.url = "https://www.sotadata.org.uk/en/summit/" + sig_ref_id
sig_ref.longitude = data["longitude"] if "longitude" in data else None sig_ref.grid = data["locator"] if "locator" in data else None
elif sig.upper() == "WWBOTA": sig_ref.latitude = data["latitude"] if "latitude" in data else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.wwbota.org/bunkers/" + sig_ref_id, sig_ref.longitude = data["longitude"] if "longitude" in data else None
headers=HTTP_HEADERS).json() elif sig.upper() == "WWBOTA":
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.wwbota.org/bunkers/" + sig_ref_id,
sig_ref.name = data["name"] if "name" in data else None headers=HTTP_HEADERS).json()
sig_ref.url = "https://bunkerwiki.org/?s=" + sig_ref_id if sig_ref_id.startswith("B/G") else None if data:
sig_ref.grid = data["locator"] if "locator" in data else None sig_ref.name = data["name"] if "name" in data else None
sig_ref.latitude = data["lat"] if "lat" in data else None sig_ref.url = "https://bunkerwiki.org/?s=" + sig_ref_id if sig_ref_id.startswith("B/G") else None
sig_ref.longitude = data["long"] if "long" in data else None sig_ref.grid = data["locator"] if "locator" in data else None
elif sig.upper() == "GMA" or sig.upper() == "ARLHS" or sig.upper() == "ILLW" or sig.upper() == "WCA" or sig.upper() == "MOTA" or sig.upper() == "IOTA": sig_ref.latitude = data["lat"] if "lat" in data else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.cqgma.org/api/ref/?" + sig_ref_id, sig_ref.longitude = data["long"] if "long" in data else None
headers=HTTP_HEADERS).json() elif sig.upper() == "GMA" or sig.upper() == "ARLHS" or sig.upper() == "ILLW" or sig.upper() == "WCA" or sig.upper() == "MOTA" or sig.upper() == "IOTA":
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.cqgma.org/api/ref/?" + sig_ref_id,
sig_ref.name = data["name"] if "name" in data else None headers=HTTP_HEADERS).json()
sig_ref.url = "https://www.cqgma.org/zinfo.php?ref=" + sig_ref_id if data:
sig_ref.grid = data["locator"] if "locator" in data else None sig_ref.name = data["name"] if "name" in data else None
sig_ref.latitude = data["latitude"] if "latitude" in data else None sig_ref.url = "https://www.cqgma.org/zinfo.php?ref=" + sig_ref_id
sig_ref.longitude = data["longitude"] if "longitude" in data else None sig_ref.grid = data["locator"] if "locator" in data else None
elif sig.upper() == "WWFF": sig_ref.latitude = data["latitude"] if "latitude" in data else None
sig_ref.url = "https://wwff.co/directory/?showRef=" + sig_ref_id sig_ref.longitude = data["longitude"] if "longitude" in data else None
elif sig.upper() == "SIOTA": elif sig.upper() == "WWFF":
siota_csv_data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.silosontheair.com/data/silos.csv", sig_ref.url = "https://wwff.co/directory/?showRef=" + sig_ref_id
headers=HTTP_HEADERS) elif sig.upper() == "SIOTA":
siota_dr = csv.DictReader(siota_csv_data.content.decode().splitlines()) siota_csv_data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.silosontheair.com/data/silos.csv",
for row in siota_dr: headers=HTTP_HEADERS)
if row["SILO_CODE"] == sig_ref_id: siota_dr = csv.DictReader(siota_csv_data.content.decode().splitlines())
sig_ref.name = row["NAME"] if "NAME" in row else None for row in siota_dr:
sig_ref.grid = row["LOCATOR"] if "LOCATOR" in row else None if row["SILO_CODE"] == sig_ref_id:
sig_ref.latitude = float(row["LAT"]) if "LAT" in row else None sig_ref.name = row["NAME"] if "NAME" in row else None
sig_ref.longitude = float(row["LNG"]) if "LNG" in row else None sig_ref.grid = row["LOCATOR"] if "LOCATOR" in row else None
elif sig.upper() == "WOTA": sig_ref.latitude = float(row["LAT"]) if "LAT" in row else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.wota.org.uk/mapping/data/summits.json", sig_ref.longitude = float(row["LNG"]) if "LNG" in row else None
headers=HTTP_HEADERS).json() elif sig.upper() == "WOTA":
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.wota.org.uk/mapping/data/summits.json",
for feature in data["features"]: headers=HTTP_HEADERS).json()
if feature["properties"]["wotaId"] == sig_ref_id: if data:
sig_ref.name = feature["properties"]["title"] for feature in data["features"]:
sig_ref.url = "https://www.wota.org.uk/MM_" + sig_ref_id if feature["properties"]["wotaId"] == sig_ref_id:
sig_ref.grid = feature["properties"]["qthLocator"] sig_ref.name = feature["properties"]["title"]
sig_ref.latitude = feature["geometry"]["coordinates"][1] sig_ref.url = "https://www.wota.org.uk/MM_" + sig_ref_id
sig_ref.longitude = feature["geometry"]["coordinates"][0] sig_ref.grid = feature["properties"]["qthLocator"]
elif sig.upper() == "ZLOTA": sig_ref.latitude = feature["geometry"]["coordinates"][1]
data = SEMI_STATIC_URL_DATA_CACHE.get("https://ontheair.nz/assets/assets.json", headers=HTTP_HEADERS).json() sig_ref.longitude = feature["geometry"]["coordinates"][0]
if data: elif sig.upper() == "ZLOTA":
for asset in data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://ontheair.nz/assets/assets.json", headers=HTTP_HEADERS).json()
if asset["code"] == sig_ref_id: if data:
sig_ref.name = asset["name"] for asset in data:
sig_ref.url = "https://ontheair.nz/assets/ZLI_OT-030" + sig_ref_id.replace("/", "_") if asset["code"] == sig_ref_id:
sig_ref.grid = latlong_to_locator(asset["y"], asset["x"], 6) sig_ref.name = asset["name"]
sig_ref.latitude = asset["y"] sig_ref.url = "https://ontheair.nz/assets/ZLI_OT-030" + sig_ref_id.replace("/", "_")
sig_ref.longitude = asset["x"] sig_ref.grid = latlong_to_locator(asset["y"], asset["x"], 6)
elif sig.upper() == "BOTA": sig_ref.latitude = asset["y"]
if not sig_ref.name: sig_ref.longitude = asset["x"]
sig_ref.name = sig_ref.id elif sig.upper() == "BOTA":
sig_ref.url = "https://www.beachesontheair.com/beaches/" + sig_ref.name.lower().replace(" ", "-") if not sig_ref.name:
elif sig.upper() == "WAB" or sig.upper() == "WAI": sig_ref.name = sig_ref.id
ll = wab_wai_square_to_lat_lon(sig_ref_id) sig_ref.url = "https://www.beachesontheair.com/beaches/" + sig_ref.name.lower().replace(" ", "-")
if ll: elif sig.upper() == "WAB" or sig.upper() == "WAI":
sig_ref.name = sig_ref_id ll = wab_wai_square_to_lat_lon(sig_ref_id)
sig_ref.grid = latlong_to_locator(ll[0], ll[1], 6) if ll:
sig_ref.latitude = ll[0] sig_ref.name = sig_ref_id
sig_ref.longitude = ll[1] sig_ref.grid = latlong_to_locator(ll[0], ll[1], 6)
sig_ref.latitude = ll[0]
sig_ref.longitude = ll[1]
except:
logging.warn("Failed to look up sig_ref info for SIG " + sig + " ref " + sig_ref_id + ".")
return sig_ref return sig_ref