mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2025-10-27 00:39:26 +00:00
56 lines
2.4 KiB
Python
56 lines
2.4 KiB
Python
import logging
|
|
from datetime import datetime
|
|
|
|
import pytz
|
|
|
|
from alertproviders.http_alert_provider import HTTPAlertProvider
|
|
from core.sig_utils import get_icon_for_sig
|
|
from data.alert import Alert
|
|
|
|
|
|
# Alert provider for Parks n Peaks
|
|
class ParksNPeaks(HTTPAlertProvider):
|
|
POLL_INTERVAL_SEC = 3600
|
|
ALERTS_URL = "http://parksnpeaks.org/api/ALERTS/"
|
|
|
|
def __init__(self, provider_config):
|
|
super().__init__(provider_config, self.ALERTS_URL, self.POLL_INTERVAL_SEC)
|
|
|
|
def http_response_to_alerts(self, http_response):
|
|
new_alerts = []
|
|
# Iterate through source data
|
|
for source_alert in http_response.json():
|
|
# Calculate some things
|
|
if " - " in source_alert["Location"]:
|
|
split = source_alert["Location"].split(" - ")
|
|
sig_ref = split[0]
|
|
sig_ref_name = split[1]
|
|
else:
|
|
sig_ref = source_alert["WWFFID"]
|
|
sig_ref_name = source_alert["Location"]
|
|
start_time = datetime.strptime(source_alert["alTime"], "%Y-%m-%d %H:%M:%S").replace(
|
|
tzinfo=pytz.UTC).timestamp()
|
|
|
|
# Convert to our alert format
|
|
alert = Alert(source=self.name,
|
|
source_id=source_alert["alID"],
|
|
dx_calls=[source_alert["CallSign"].upper()],
|
|
freqs_modes=source_alert["Freq"] + " " + source_alert["MODE"],
|
|
comment=source_alert["Comments"],
|
|
sig=source_alert["Class"],
|
|
sig_refs=[sig_ref],
|
|
sig_refs_names=[sig_ref_name],
|
|
icon=get_icon_for_sig(source_alert["Class"]),
|
|
start_time=start_time,
|
|
is_dxpedition=False)
|
|
|
|
# Log a warning for the developer if PnP gives us an unknown programme we've never seen before
|
|
if alert.sig not in ["POTA", "SOTA", "WWFF", "SiOTA", "ZLOTA", "KRMNPA"]:
|
|
logging.warn("PNP alert found with sig " + alert.sig + ", developer needs to add support for this!")
|
|
|
|
# If this is POTA, SOTA or WWFF data we already have it through other means, so ignore. Otherwise, add to
|
|
# the alert list.
|
|
if alert.sig not in ["POTA", "SOTA", "WWFF"]:
|
|
new_alerts.append(alert)
|
|
return new_alerts
|