Strict adherence to canonical ActivityNames, to avoid the problem where Spothole was giving out activities like ["Towers", "TOWERS"]. All uses of ActivityName should now be canonical not arbitrary strings, and attempts to convert unknown strings to activitynames will be logged for me to check out.

This commit is contained in:
Ian Renton
2026-09-25 09:16:53 +01:00
parent 7417140a3d
commit 760c2412d3
17 changed files with 144 additions and 145 deletions
+9 -17
View File
@@ -3,6 +3,7 @@ from datetime import datetime
import pytz
from core.activity_utils import get_activity_by_name
from core.enums import ActivityName
from data.activity_ref import ActivityRef
from data.alert import Alert
@@ -37,7 +38,13 @@ class ParksNPeaks(HTTPAlertProvider):
datetime.strptime(source_alert["alTime"], "%Y-%m-%d %H:%M:%S").replace(tzinfo=pytz.UTC).timestamp()
)
activity_refs = [ActivityRef(id=ref_id, activity=activity, name=ref_name)]
# We can only add a reference if we know the activity it's for
found_activity = get_activity_by_name(activity)
activities = []
activity_refs = []
if found_activity is not None:
activities = [found_activity.name]
activity_refs = [ActivityRef(id=ref_id, activity=found_activity.name, name=ref_name)]
# Convert to our alert format
alert = Alert(
@@ -46,26 +53,11 @@ class ParksNPeaks(HTTPAlertProvider):
dx_calls=[source_alert["CallSign"].upper()],
freqs_modes=f"{source_alert['Freq']} {source_alert['MODE']}",
comment=source_alert["Comments"],
activities=[activity] if activity else [],
activities=activities,
activity_refs=activity_refs,
start_time=start_time,
)
# Log a warning for the developer if PnP gives us an unknown programme we've never seen before
if activity and activity not in [
ActivityName.POTA,
ActivityName.SOTA,
ActivityName.WWFF,
ActivityName.HEMA,
ActivityName.SIOTA,
ActivityName.ZLOTA,
ActivityName.KRMNPA,
ActivityName.SANPCPA,
ActivityName.LLOTA,
ActivityName.QRP,
]:
logger.warning(f"PNP alert found with activity {activity}, 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. Note that while ZLOTA has its own spots API, it doesn't have its own alerts API. So that
# means the PnP *spot* provider rejects ZLOTA spots here, but the PnP *alerts* provider here allows ZLOTA.