mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2025-10-27 08:49:27 +00:00
Support de-dupe and comment filtering for spots. Closes #45
This commit is contained in:
@@ -137,6 +137,9 @@ class WebServer:
|
|||||||
# in seconds UTC.
|
# in seconds UTC.
|
||||||
# We can also filter by source, sig, band, mode, dx_continent and de_continent. Each of these accepts a single
|
# We can also filter by source, sig, band, mode, dx_continent and de_continent. Each of these accepts a single
|
||||||
# value or a comma-separated list.
|
# value or a comma-separated list.
|
||||||
|
# We can filter by comments, accepting a single string, where the API will only return spots where the comment
|
||||||
|
# contains the provided value (case-insensitive).
|
||||||
|
# We can "de-dupe" spots, so only the latest spot will be sent for each callsign.
|
||||||
# We can provide a "limit" number as well. Spots are always returned newest-first; "limit" limits to only the
|
# We can provide a "limit" number as well. Spots are always returned newest-first; "limit" limits to only the
|
||||||
# most recent X spots.
|
# most recent X spots.
|
||||||
spot_ids = list(self.spots.iterkeys())
|
spot_ids = list(self.spots.iterkeys())
|
||||||
@@ -179,6 +182,22 @@ class WebServer:
|
|||||||
case "de_continent":
|
case "de_continent":
|
||||||
deconts = query.get(k).split(",")
|
deconts = query.get(k).split(",")
|
||||||
spots = [s for s in spots if s.de_continent and s.de_continent in deconts]
|
spots = [s for s in spots if s.de_continent and s.de_continent in deconts]
|
||||||
|
case "comment_includes":
|
||||||
|
comment_includes = query.get(k).strip()
|
||||||
|
spots = [s for s in spots if s.comment and comment_includes.upper() in s.comment.upper()]
|
||||||
|
case "dedupe":
|
||||||
|
# Ensure only the latest spot of each callsign is present in the list. This relies on the list being
|
||||||
|
# in reverse time order, so if any future change allows re-ordering the list, that should be done
|
||||||
|
# *after* this.
|
||||||
|
dedupe = query.get(k).upper() == "TRUE"
|
||||||
|
if dedupe:
|
||||||
|
spots_temp = []
|
||||||
|
already_seen = []
|
||||||
|
for s in spots:
|
||||||
|
if s.dx_call not in already_seen:
|
||||||
|
spots_temp.append(s)
|
||||||
|
already_seen.append(s.dx_call)
|
||||||
|
spots = spots_temp
|
||||||
# If we have a "limit" parameter, we apply that last, regardless of where it appeared in the list of keys.
|
# If we have a "limit" parameter, we apply that last, regardless of where it appeared in the list of keys.
|
||||||
if "limit" in query.keys():
|
if "limit" in query.keys():
|
||||||
spots = spots[:int(query.get("limit"))]
|
spots = spots[:int(query.get("limit"))]
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ paths:
|
|||||||
- WWBOTA
|
- WWBOTA
|
||||||
- GMA
|
- GMA
|
||||||
- HEMA
|
- HEMA
|
||||||
|
- WCA
|
||||||
|
- MOTA
|
||||||
|
- SiOTA
|
||||||
|
- ARLHS
|
||||||
|
- ILLW
|
||||||
|
- ZLOTA
|
||||||
- name: band
|
- name: band
|
||||||
in: query
|
in: query
|
||||||
description: "Limit the spots to only ones from one or more bands. To select more than one band, supply a comma-separated list."
|
description: "Limit the spots to only ones from one or more bands. To select more than one band, supply a comma-separated list."
|
||||||
@@ -168,6 +174,19 @@ paths:
|
|||||||
- AF
|
- AF
|
||||||
- OC
|
- OC
|
||||||
- AN
|
- AN
|
||||||
|
- name: dedupe
|
||||||
|
in: query
|
||||||
|
description: "\"De-duplicate\" the spots, returning only the latest spot for any given callsign."
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- name: comment_includes
|
||||||
|
in: query
|
||||||
|
description: "Return only spots where the comment includes the provided string (case-insensitive)."
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: Success
|
description: Success
|
||||||
@@ -241,6 +260,12 @@ paths:
|
|||||||
- WWBOTA
|
- WWBOTA
|
||||||
- GMA
|
- GMA
|
||||||
- HEMA
|
- HEMA
|
||||||
|
- WCA
|
||||||
|
- MOTA
|
||||||
|
- SiOTA
|
||||||
|
- ARLHS
|
||||||
|
- ILLW
|
||||||
|
- ZLOTA
|
||||||
- name: dx_continent
|
- name: dx_continent
|
||||||
in: query
|
in: query
|
||||||
description: "Limit the alerts to only ones where the DX (the operator being spotted) is on the given continent(s). To select more than one continent, supply a comma-separated list."
|
description: "Limit the alerts to only ones where the DX (the operator being spotted) is on the given continent(s). To select more than one continent, supply a comma-separated list."
|
||||||
@@ -667,6 +692,12 @@ components:
|
|||||||
- WWBOTA
|
- WWBOTA
|
||||||
- GMA
|
- GMA
|
||||||
- HEMA
|
- HEMA
|
||||||
|
- WCA
|
||||||
|
- MOTA
|
||||||
|
- SiOTA
|
||||||
|
- ARLHS
|
||||||
|
- ILLW
|
||||||
|
- ZLOTA
|
||||||
example: POTA
|
example: POTA
|
||||||
sig_refs:
|
sig_refs:
|
||||||
type: array
|
type: array
|
||||||
@@ -812,6 +843,12 @@ components:
|
|||||||
- WWBOTA
|
- WWBOTA
|
||||||
- GMA
|
- GMA
|
||||||
- HEMA
|
- HEMA
|
||||||
|
- WCA
|
||||||
|
- MOTA
|
||||||
|
- SiOTA
|
||||||
|
- ARLHS
|
||||||
|
- ILLW
|
||||||
|
- ZLOTA
|
||||||
example: POTA
|
example: POTA
|
||||||
sig_refs:
|
sig_refs:
|
||||||
type: array
|
type: array
|
||||||
|
|||||||
Reference in New Issue
Block a user