2 Commits

Author SHA1 Message Date
Ian Renton
e61d7bedb4 Exception handling #74 2025-11-02 18:00:24 +00:00
Ian Renton
ebf07f352f Exception handling #74 2025-11-02 17:59:37 +00:00

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,91 @@ 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() data = SEMI_STATIC_URL_DATA_CACHE.get("https://api-db2.sota.org.uk/api/summits/" + sig_ref_id,
if data: headers=HTTP_HEADERS).json()
sig_ref.name = data["name"] if "name" in data else None if data:
sig_ref.url = "https://www.sotadata.org.uk/en/summit/" + sig_ref_id sig_ref.name = data["name"] if "name" in data else None
sig_ref.grid = data["locator"] if "locator" in data else None sig_ref.url = "https://www.sotadata.org.uk/en/summit/" + sig_ref_id
sig_ref.latitude = data["latitude"] if "latitude" in data else None sig_ref.grid = data["locator"] if "locator" 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() == "WWBOTA": sig_ref.longitude = data["longitude"] if "longitude" in data else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.wwbota.org/bunkers/" + sig_ref_id, elif sig.upper() == "WWBOTA":
headers=HTTP_HEADERS).json() data = SEMI_STATIC_URL_DATA_CACHE.get("https://api.wwbota.org/bunkers/" + sig_ref_id,
if data: headers=HTTP_HEADERS).json()
sig_ref.name = data["name"] if "name" in data else None if data:
sig_ref.url = "https://bunkerwiki.org/?s=" + sig_ref_id if sig_ref_id.startswith("B/G") else None sig_ref.name = data["name"] if "name" in data else None
sig_ref.grid = data["locator"] if "locator" 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.latitude = data["lat"] if "lat" in data else None sig_ref.grid = data["locator"] if "locator" in data else None
sig_ref.longitude = data["long"] if "long" in data else None sig_ref.latitude = data["lat"] if "lat" 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.longitude = data["long"] if "long" in data else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.cqgma.org/api/ref/?" + sig_ref_id, elif sig.upper() == "GMA" or sig.upper() == "ARLHS" or sig.upper() == "ILLW" or sig.upper() == "WCA" or sig.upper() == "MOTA" or sig.upper() == "IOTA":
headers=HTTP_HEADERS).json() data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.cqgma.org/api/ref/?" + sig_ref_id,
if data: headers=HTTP_HEADERS).json()
sig_ref.name = data["name"] if "name" in data else None if data:
sig_ref.url = "https://www.cqgma.org/zinfo.php?ref=" + sig_ref_id sig_ref.name = data["name"] if "name" in data else None
sig_ref.grid = data["locator"] if "locator" in data else None sig_ref.url = "https://www.cqgma.org/zinfo.php?ref=" + sig_ref_id
sig_ref.latitude = data["latitude"] if "latitude" in data else None sig_ref.grid = data["locator"] if "locator" 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() == "WWFF": sig_ref.longitude = data["longitude"] if "longitude" in data else None
sig_ref.url = "https://wwff.co/directory/?showRef=" + sig_ref_id elif sig.upper() == "WWFF":
elif sig.upper() == "SIOTA": sig_ref.url = "https://wwff.co/directory/?showRef=" + sig_ref_id
siota_csv_data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.silosontheair.com/data/silos.csv", elif sig.upper() == "SIOTA":
headers=HTTP_HEADERS) siota_csv_data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.silosontheair.com/data/silos.csv",
siota_dr = csv.DictReader(siota_csv_data.content.decode().splitlines()) headers=HTTP_HEADERS)
for row in siota_dr: siota_dr = csv.DictReader(siota_csv_data.content.decode().splitlines())
if row["SILO_CODE"] == sig_ref_id: for row in siota_dr:
sig_ref.name = row["NAME"] if "NAME" in row else None if row["SILO_CODE"] == sig_ref_id:
sig_ref.grid = row["LOCATOR"] if "LOCATOR" in row else None sig_ref.name = row["NAME"] if "NAME" in row else None
sig_ref.latitude = float(row["LAT"]) if "LAT" in row else None sig_ref.grid = row["LOCATOR"] if "LOCATOR" in row else None
sig_ref.longitude = float(row["LNG"]) if "LNG" in row else None sig_ref.latitude = float(row["LAT"]) if "LAT" in row else None
elif sig.upper() == "WOTA": sig_ref.longitude = float(row["LNG"]) if "LNG" in row else None
data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.wota.org.uk/mapping/data/summits.json", elif sig.upper() == "WOTA":
headers=HTTP_HEADERS).json() data = SEMI_STATIC_URL_DATA_CACHE.get("https://www.wota.org.uk/mapping/data/summits.json",
if data: headers=HTTP_HEADERS).json()
for feature in data["features"]: if data:
if feature["properties"]["wotaId"] == sig_ref_id: for feature in data["features"]:
sig_ref.name = feature["properties"]["title"] if feature["properties"]["wotaId"] == sig_ref_id:
sig_ref.url = "https://www.wota.org.uk/MM_" + sig_ref_id sig_ref.name = feature["properties"]["title"]
sig_ref.grid = feature["properties"]["qthLocator"] sig_ref.url = "https://www.wota.org.uk/MM_" + sig_ref_id
sig_ref.latitude = feature["geometry"]["coordinates"][1] sig_ref.grid = feature["properties"]["qthLocator"]
sig_ref.longitude = feature["geometry"]["coordinates"][0] sig_ref.latitude = feature["geometry"]["coordinates"][1]
elif sig.upper() == "ZLOTA": sig_ref.longitude = feature["geometry"]["coordinates"][0]
data = SEMI_STATIC_URL_DATA_CACHE.get("https://ontheair.nz/assets/assets.json", headers=HTTP_HEADERS).json() elif sig.upper() == "ZLOTA":
if data: data = SEMI_STATIC_URL_DATA_CACHE.get("https://ontheair.nz/assets/assets.json", headers=HTTP_HEADERS).json()
for asset in data: if data:
if asset["code"] == sig_ref_id: for asset in data:
sig_ref.name = asset["name"] if asset["code"] == sig_ref_id:
sig_ref.url = "https://ontheair.nz/assets/ZLI_OT-030" + sig_ref_id.replace("/", "_") sig_ref.name = asset["name"]
sig_ref.grid = latlong_to_locator(asset["y"], asset["x"], 6) sig_ref.url = "https://ontheair.nz/assets/ZLI_OT-030" + sig_ref_id.replace("/", "_")
sig_ref.latitude = asset["y"] sig_ref.grid = latlong_to_locator(asset["y"], asset["x"], 6)
sig_ref.longitude = asset["x"] sig_ref.latitude = asset["y"]
elif sig.upper() == "BOTA": sig_ref.longitude = asset["x"]
if not sig_ref.name: elif sig.upper() == "BOTA":
sig_ref.name = sig_ref.id if not sig_ref.name:
sig_ref.url = "https://www.beachesontheair.com/beaches/" + sig_ref.name.lower().replace(" ", "-") sig_ref.name = sig_ref.id
elif sig.upper() == "WAB" or sig.upper() == "WAI": sig_ref.url = "https://www.beachesontheair.com/beaches/" + sig_ref.name.lower().replace(" ", "-")
ll = wab_wai_square_to_lat_lon(sig_ref_id) elif sig.upper() == "WAB" or sig.upper() == "WAI":
if ll: ll = wab_wai_square_to_lat_lon(sig_ref_id)
sig_ref.name = sig_ref_id if ll:
sig_ref.grid = latlong_to_locator(ll[0], ll[1], 6) sig_ref.name = sig_ref_id
sig_ref.latitude = ll[0] sig_ref.grid = latlong_to_locator(ll[0], ll[1], 6)
sig_ref.longitude = ll[1] sig_ref.latitude = ll[0]
sig_ref.longitude = ll[1]
except:
logging.warn("Failed to look up sig_ref info for " + sig + " ref " + sig_ref_id + ".")
return sig_ref return sig_ref