from datetime import datetime import pytz from data.activity_ref import ActivityRef from data.alert import Alert from providers.alert.http_alert_provider import HTTPAlertProvider class Hamsat(HTTPAlertProvider): """Alert provider for Hamsat (hams.at)""" POLL_INTERVAL_SEC = 1800 ALERTS_URL = "https://hams.at/api/alerts" def __init__(self, provider_config): super().__init__("Hamsat", 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()["data"]: # Convert to our alert format freqs_modes = source_alert.get("mode", "") if "mhz" in source_alert: if "mhz_direction" in source_alert: freqs_modes = f"{source_alert['mhz']!s} {source_alert['mhz_direction']}, {freqs_modes}" else: freqs_modes = f"{source_alert['mhz']!s}, {freqs_modes}" alert = Alert( source=self.name, source_id=source_alert["id"], dx_calls=[source_alert["callsign"].upper()], freqs_modes=freqs_modes, comment=source_alert["comment"], sig="Satellite", # Fudge an activity ref to provide the remaining bits of data we need: the satellite and the operator's grid sig_refs=[ ActivityRef( sig="Satellite", id=f"{source_alert['satellite']['name']} from {source_alert['grids'][0]}", ) ], start_time=datetime.strptime(source_alert["aos_at"], "%Y-%m-%dT%H:%M:%SZ") .replace(tzinfo=pytz.UTC) .timestamp(), end_time=datetime.strptime(source_alert["los_at"], "%Y-%m-%dT%H:%M:%SZ") .replace(tzinfo=pytz.UTC) .timestamp(), ) # Add to our list new_alerts.append(alert) return new_alerts