From 21a3ae70b5cbd90b98a53767d71b72f1ebf4c5e1 Mon Sep 17 00:00:00 2001 From: Ian Renton Date: Tue, 23 Jun 2026 06:38:41 +0100 Subject: [PATCH] Add support for DME. Closes #114. --- core/constants.py | 1 + core/sig_utils.py | 14 ++++++++++++++ data/spot.py | 2 +- webassets/js/ui-ham.js | 1 + 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/core/constants.py b/core/constants.py index d114a22..d763175 100644 --- a/core/constants.py +++ b/core/constants.py @@ -32,6 +32,7 @@ SIGS = [ SIG(name="Tiles", description="Tiles on the Air", ref_regex=r"[A-Za-z]{2}[0-9]{2}[A-Za-z]{2}"), SIG(name="WAB", description="Worked All Britain", ref_regex=r"[A-Z]{1,2}[0-9]{2}"), SIG(name="WAI", description="Worked All Ireland", ref_regex=r"[A-Z][0-9]{2}"), + SIG(name="DME", description="Diplomas de Municipios EspaƱoles", ref_regex=r"\d{4,5}"), SIG(name="TOTA", description="Toilets on the Air", ref_regex=r"T\-[0-9]{2}") ] diff --git a/core/sig_utils.py b/core/sig_utils.py index aacd246..9d0fa80 100644 --- a/core/sig_utils.py +++ b/core/sig_utils.py @@ -7,6 +7,9 @@ from core.cache_utils import SEMI_STATIC_URL_DATA_CACHE from core.constants import SIGS, HTTP_HEADERS from core.geo_utils import wab_wai_square_to_lat_lon +with open("datafiles/dme-geodata.csv", encoding="utf-8") as _f: + _DME_INDEX = {row["dme"]: row for row in csv.DictReader(_f)} + def get_ref_regex_for_sig(sig): """Utility function to get the regex string for a SIG reference for a named SIG. If no match is found, None will be returned.""" @@ -188,6 +191,17 @@ def populate_sig_ref_info(sig_ref): sig_ref.longitude = ll[1] except: logging.debug("Invalid lat/lon received for reference") + elif sig.upper() == "DME": + row = _DME_INDEX.get(ref_id) + if row: + sig_ref.name = row["municipio"] + ", " + row["provincia"] + sig_ref.latitude = float(row["lat"]) if row.get("lat") else None + sig_ref.longitude = float(row["lon"]) if row.get("lon") else None + if sig_ref.latitude and sig_ref.longitude: + try: + sig_ref.grid = latlong_to_locator(sig_ref.latitude, sig_ref.longitude, 6) + except Exception: + logging.debug("Invalid lat/lon received for reference") except Exception: logging.warning("Failed to look up sig_ref info for " + sig + " ref " + ref_id, exc_info=True) return sig_ref diff --git a/data/spot.py b/data/spot.py index 3cb61a4..59974ae 100644 --- a/data/spot.py +++ b/data/spot.py @@ -263,7 +263,7 @@ class Spot: # If so, add that to the sig_refs list for this spot. ref_regex = get_ref_regex_for_sig(found_sig) if ref_regex: - ref_matches = re.finditer(r"(^|\W)" + found_sig + r"($|\W)(" + ref_regex + r")($|\W)", self.comment, + ref_matches = re.finditer(r"(^|\W)" + found_sig + r"([ -])(" + ref_regex + r")($|\W)", self.comment, re.IGNORECASE) for ref_match in ref_matches: self._append_sig_ref_if_missing(SIGRef(id=ref_match.group(3).upper(), sig=found_sig)) diff --git a/webassets/js/ui-ham.js b/webassets/js/ui-ham.js index 91bae9c..8058dc1 100644 --- a/webassets/js/ui-ham.js +++ b/webassets/js/ui-ham.js @@ -335,6 +335,7 @@ const SIG_ICONS = { "WWTOTA": "fa-tower-observation", "WAB": "fa-table-cells-large", "WAI": "fa-table-cells-large", + "DME": "fa-building", "Tiles": "fa-square", "TOTA": "fa-toilet" }