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 on the Air class POTA(HTTPAlertProvider): POLL_INTERVAL_SEC = 3600 ALERTS_URL = "https://api.pota.app/activation" 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(): # Convert to our alert format alert = Alert(source=self.name, source_id=source_alert["scheduledActivitiesId"], dx_calls=[source_alert["activator"].upper()], freqs_modes=source_alert["frequencies"], comment=source_alert["comments"], sig="POTA", sig_refs=[source_alert["reference"]], sig_refs_names=[source_alert["name"]], icon=get_icon_for_sig("POTA"), start_time=datetime.strptime(source_alert["startDate"] + source_alert["startTime"], "%Y-%m-%d%H:%M").replace(tzinfo=pytz.UTC).timestamp(), end_time=datetime.strptime(source_alert["endDate"] + source_alert["endTime"], "%Y-%m-%d%H:%M").replace(tzinfo=pytz.UTC).timestamp(), is_dxpedition=False) # Add to our list, but exclude any old spots that POTA can sometimes give us where even the end time is # in the past. Don't worry about de-duping, removing old alerts etc. at this point; other code will do # that for us. if alert.end_time > datetime.now(pytz.UTC).timestamp(): new_alerts.append(alert) return new_alerts