4 Commits
13 changed files with 32 additions and 29 deletions
+3 -2
View File
@@ -28,7 +28,7 @@ SIGS = [
SIG(name="BOTA", comment_names=[], description="Beaches on the Air"),
SIG(name="KRMNPA", comment_names=["KRMNPA"], description="Keith Roget Memorial National Parks Award"),
SIG(name="LLOTA", comment_names=["LLOTA"], description="Lagos y Lagunas on the Air", ref_regex=r"LL[A-Z]{2}\-\d{4}"),
SIG(name="Towers", comment_names=["TOTA"], description="Towers on the Air", ref_regex=r"[A-Z]{2}R\-\d{4}"),
SIG(name="Towers", comment_names=["TOTA"], description="Towers on the Air", ref_regex=r"[A-Z]{2,3}R\-\d{4}"),
SIG(name="Tiles", comment_names=[], description="Tiles on the Air", ref_regex=r"[A-Za-z]{2}[0-9]{2}[A-Za-z]{2}"),
SIG(name="WAB", comment_names=["WAB"], description="Worked All Britain", ref_regex=r"[A-Z]{1,2}[0-9]{2}"),
SIG(name="WAI", comment_names=["WAI"], description="Worked All Ireland", ref_regex=r"[A-Z][0-9]{2}"),
@@ -102,5 +102,6 @@ PROPAGATION_MODES = {
"AU": "Aurora",
"MS": "Meteor scatter",
"RS": "Rain scatter",
"AS": "Aircraft scatter"
"AS": "Aircraft scatter",
"SAT": "Satellite"
}
+11
View File
@@ -133,6 +133,17 @@ class Spot:
# The ID the source gave it, if any.
source_id: str | None = None
def __post_init__(self):
"""Normalise fields that don't survive a plain dict to Spot conversion. This is used in the "add spot" API
endpoint where the client is submitting JSON, and we want to recreate a full Spot object, including nested
objects such as the sig_refs list.."""
if self.sig_refs:
self.sig_refs = [
sig_ref if isinstance(sig_ref, SIGRef) else SIGRef(**sig_ref)
for sig_ref in self.sig_refs
]
def infer_missing(self, credentials=None):
"""Infer missing parameters where possible"""
-10
View File
@@ -1,4 +1,3 @@
import json
import logging
import re
from datetime import datetime
@@ -15,7 +14,6 @@ from core.lookup_helper import infer_band_from_freq
from core.prometheus_metrics_handler import api_requests_counter
from core.sig_utils import get_ref_regex_for_sig
from core.utils import safe_json_dumps
from data.sig_ref import SIGRef
from data.spot import Spot
@@ -68,14 +66,6 @@ class APISpotHandler(tornado.web.RequestHandler):
json_spot = tornado.escape.json_decode(post_data)
spot = Spot(**json_spot)
# Converting to a spot object this way won't have coped with sig_ref objects, so fix that. (Would be nice to
# redo this in a functional style)
if spot.sig_refs:
real_sig_refs = []
for dict_obj in spot.sig_refs:
real_sig_refs.append(json.loads(json.dumps(dict_obj), object_hook=lambda d: SIGRef(**d)))
spot.sig_refs = real_sig_refs
# Reject if no timestamp, frequency, dx_call or de_call
if not spot.time or not spot.dx_call or not spot.freq or not spot.de_call:
self.set_status(422)
+2 -1
View File
@@ -5,7 +5,7 @@ import os
import tornado
from tornado.web import StaticFileHandler
from core.config import ALLOW_SPOTTING, WEB_SERVER_PORT, API_ONLY_MODE, LOG_WEB_REQUESTS
from core.config import ALLOW_SPOTTING, WEB_SERVER_PORT, API_ONLY_MODE, LOG_WEB_REQUESTS, BASE_URL
from core.utils import empty_queue
from server.handlers.api.addspot import APISpotHandler
from server.handlers.api.alerts import APIAlertsHandler, APIAlertsStreamHandler
@@ -112,6 +112,7 @@ class WebServer:
debug=False)
app.listen(self._port, xheaders=True)
logging.info("Web server running on port " + str(WEB_SERVER_PORT))
logging.info("You can access your copy of Spothole at " + BASE_URL)
await self._shutdown_event.wait()
def notify_new_spot(self, spot):
+1 -1
View File
@@ -76,7 +76,7 @@
</div>
<script src="/js/add-spot.js?v=1783682229"></script>
<script src="/js/add-spot.js?v=1783702256"></script>
<script>$(document).ready(function () {
$("#nav-link-add-spot").addClass("active");
}); <!-- highlight active page in nav --></script>
+1 -1
View File
@@ -75,7 +75,7 @@
</div>
<script src="/js/alerts.js?v=1783682229"></script>
<script src="/js/alerts.js?v=1783702256"></script>
<script>$(document).ready(function () {
$("#nav-link-alerts").addClass("active");
}); <!-- highlight active page in nav --></script>
+2 -2
View File
@@ -75,8 +75,8 @@
<script>
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
</script>
<script src="/js/spotsbandsandmap.js?v=1783682229"></script>
<script src="/js/bands.js?v=1783682229"></script>
<script src="/js/spotsbandsandmap.js?v=1783702256"></script>
<script src="/js/bands.js?v=1783702256"></script>
<script>$(document).ready(function () {
$("#nav-link-bands").addClass("active");
}); <!-- highlight active page in nav --></script>
+5 -5
View File
@@ -1,6 +1,6 @@
{% extends "skeleton.html" %}
{% block head_extra %}
<link rel="stylesheet" href="/css/style.css?v=1783682229" type="text/css">
<link rel="stylesheet" href="/css/style.css?v=1783702256" type="text/css">
<link href="/vendor/css/bootstrap-5.3.8.min.css" rel="stylesheet">
<link href="/vendor/css/fontawesome-6.7.2.min.css" rel="stylesheet">
<link href="/vendor/css/solid-6.7.2.min.css" rel="stylesheet">
@@ -10,10 +10,10 @@
<script src="/vendor/js/bootstrap-5.3.8.bundle.min.js"></script>
<script src="/vendor/js/tinycolor2-1.6.0.min.js"></script>
<script src="/js/utils.js?v=1783682229"></script>
<script src="/js/ui-ham.js?v=1783682229"></script>
<script src="/js/geo.js?v=1783682229"></script>
<script src="/js/common.js?v=1783682229"></script>
<script src="/js/utils.js?v=1783702256"></script>
<script src="/js/ui-ham.js?v=1783702256"></script>
<script src="/js/geo.js?v=1783702256"></script>
<script src="/js/common.js?v=1783702256"></script>
{% end %}
{% block body %}
<div class="container">
+1 -1
View File
@@ -284,7 +284,7 @@
</div>
<script src="/vendor/js/chart-4.4.9.umd.min.js"></script>
<script src="/js/conditions.js?v=1783682229"></script>
<script src="/js/conditions.js?v=1783702256"></script>
<script>$(document).ready(function () {
$("#nav-link-conditions").addClass("active");
}); <!-- highlight active page in nav --></script>
+2 -2
View File
@@ -95,8 +95,8 @@
<script>
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
</script>
<script src="/js/spotsbandsandmap.js?v=1783682229"></script>
<script src="/js/map.js?v=1783682229"></script>
<script src="/js/spotsbandsandmap.js?v=1783702255"></script>
<script src="/js/map.js?v=1783702255"></script>
<script>$(document).ready(function () {
$("#nav-link-map").addClass("active");
}); <!-- highlight active page in nav --></script>
+2 -2
View File
@@ -116,8 +116,8 @@
<script>
let spotProvidersEnabledByDefault = {% raw json_encode(web_ui_options["spot-providers-enabled-by-default"]) %};
</script>
<script src="/js/spotsbandsandmap.js?v=1783682229"></script>
<script src="/js/spots.js?v=1783682229"></script>
<script src="/js/spotsbandsandmap.js?v=1783702255"></script>
<script src="/js/spots.js?v=1783702255"></script>
<script>$(document).ready(function () {
$("#nav-link-spots").addClass("active");
}); <!-- highlight active page in nav --></script>
+1 -1
View File
@@ -59,7 +59,7 @@
</div>
</div>
<script src="/js/status.js?v=1783682229"></script>
<script src="/js/status.js?v=1783702256"></script>
<script>
$(document).ready(function () {
$("#nav-link-status").addClass("active");
+1 -1
View File
@@ -62,7 +62,7 @@ function addSpot() {
spot["sig"] = sig;
}
if (sigRef !== "") {
spot["sig_refs"] = [{id: sigRef}];
spot["sig_refs"] = [{sig: sig, id: sigRef}];
}
if (dxGrid !== "") {
spot["dx_grid"] = dxGrid;