diff --git a/core/constants.py b/core/constants.py index 2da19b3..0a9788f 100644 --- a/core/constants.py +++ b/core/constants.py @@ -4,7 +4,7 @@ from data.sig import SIG # General software SOFTWARE_NAME = "Spothole by M0TRT" -SOFTWARE_VERSION = "1.1" +SOFTWARE_VERSION = "1.1.1" # HTTP headers used for spot providers that use HTTP HTTP_HEADERS = {"User-Agent": SOFTWARE_NAME + ", v" + SOFTWARE_VERSION + " (operated by " + SERVER_OWNER_CALLSIGN + ")"} @@ -36,10 +36,25 @@ SIGS = [ # Modes. Note "DIGI" and "DIGITAL" are also supported but are normalised into "DATA". CW_MODES = ["CW"] PHONE_MODES = ["PHONE", "SSB", "USB", "LSB", "AM", "FM", "DV", "DMR", "DSTAR", "C4FM", "M17"] -DATA_MODES = ["DATA", "FT8", "FT4", "RTTY", "SSTV", "JS8", "HELL", "BPSK", "PSK", "PSK31", "BPSK31", "OLIVIA", "MFSK", "MFSK32", "PKT", "MSK144"] +DATA_MODES = ["DATA", "FT8", "FT4", "RTTY", "SSTV", "JS8", "HELL", "PSK", "OLIVIA", "PKT", "MSK144"] ALL_MODES = CW_MODES + PHONE_MODES + DATA_MODES MODE_TYPES = ["CW", "PHONE", "DATA"] +# Mode aliases. Sometimes we get spots with a mode described in a different way that is effectively the same as a mode +# we already know, or we want to normalise things for consistency. The lookup table for this is here. Incoming spots +# that match a key in this table will be converted to the corresponding value, so only the modes above will actually be +# present in the spots. +MODE_ALIASES = { + "RTT": "RTTY", + "BPSK": "PSK", + "PSK31": "PSK", + "BPSK31": "PSK", + "MFSK": "FSK", + "MFSK32": "FSK", + "DIGI": "DATA", + "DIGITAL": "DATA" +} + # Band definitions BANDS = [ Band(name="2200m", start_freq=135700, end_freq=137800), diff --git a/core/lookup_helper.py b/core/lookup_helper.py index bc0019f..31bcc72 100644 --- a/core/lookup_helper.py +++ b/core/lookup_helper.py @@ -16,7 +16,7 @@ from requests_cache import CachedSession from core.cache_utils import SEMI_STATIC_URL_DATA_CACHE from core.config import config from core.constants import BANDS, UNKNOWN_BAND, CW_MODES, PHONE_MODES, DATA_MODES, ALL_MODES, \ - HTTP_HEADERS, HAMQTH_PRG + HTTP_HEADERS, HAMQTH_PRG, MODE_ALIASES # Singleton class that provides lookup functionality. @@ -160,6 +160,9 @@ class LookupHelper: for mode in ALL_MODES: if mode in comment.upper(): return mode + for mode in MODE_ALIASES.keys(): + if mode in comment.upper(): + return MODE_ALIASES[mode] return None # Infer a "mode family" from a mode. diff --git a/data/spot.py b/data/spot.py index 21e696d..00de115 100644 --- a/data/spot.py +++ b/data/spot.py @@ -10,6 +10,7 @@ import pytz from pyhamtools.locator import locator_to_latlong, latlong_to_locator from core.config import MAX_SPOT_AGE +from core.constants import MODE_ALIASES from core.lookup_helper import lookup_helper from core.sig_utils import populate_sig_ref_info, ANY_SIG_REGEX, get_ref_regex_for_sig from data.sig_ref import SIGRef @@ -213,10 +214,9 @@ class Spot: self.mode = lookup_helper.infer_mode_from_frequency(self.freq) self.mode_source = "BANDPLAN" - # Normalise "generic digital" modes. "DIGITAL", "DIGI" and "DATA" are just the same thing with no extra - # information, so standardise on "DATA" - if self.mode == "DIGI" or self.mode == "DIGITAL": - self.mode = "DATA" + # Normalise mode if necessary. + if self.mode in MODE_ALIASES: + self.mode = MODE_ALIASES[self.mode] # Mode type from mode if self.mode and not self.mode_type: diff --git a/webassets/apidocs/openapi.yml b/webassets/apidocs/openapi.yml index ad9979c..d68a1aa 100644 --- a/webassets/apidocs/openapi.yml +++ b/webassets/apidocs/openapi.yml @@ -872,12 +872,9 @@ components: - SSTV - JS8 - HELL - - BPSK - - PSK - - BPSK31 - OLIVIA - - MFSK - - MFSK32 + - PSK + - FSK - PKT - MSK144 example: SSB