2020-03-04 18:07:56 +01:00
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
# PYTHON_ARGCOMPLETE_OK
|
|
|
|
|
import argcomplete, argparse
|
2020-03-05 14:05:12 +01:00
|
|
|
|
import json as JSON
|
2020-03-04 18:07:56 +01:00
|
|
|
|
import requests
|
|
|
|
|
import sys
|
|
|
|
|
|
2020-03-05 14:05:12 +01:00
|
|
|
|
from datetime import datetime, timedelta
|
2020-03-04 18:07:56 +01:00
|
|
|
|
|
2020-03-05 14:05:12 +01:00
|
|
|
|
# ===========================================================================
|
2020-03-04 18:07:56 +01:00
|
|
|
|
|
2020-03-05 14:05:12 +01:00
|
|
|
|
def getOldStations(systemsonly):
|
|
|
|
|
params = {"json": JSON.dumps({"filters": FILTERS, "sort": SORT, "size": COUNT})}
|
|
|
|
|
json = requests.post(APIURL, params).json()
|
2020-03-04 18:07:56 +01:00
|
|
|
|
|
|
|
|
|
ret =""
|
|
|
|
|
if systemsonly:
|
|
|
|
|
for station in json["results"]:
|
|
|
|
|
ret += "{}\n".format(station["system_name"])
|
|
|
|
|
else:
|
|
|
|
|
for station in json["results"]:
|
|
|
|
|
ret += "{}: {} ({})\n".format(station["system_name"], station["name"],
|
|
|
|
|
station["updated_at"])
|
|
|
|
|
|
|
|
|
|
return ret[:-1]
|
|
|
|
|
|
|
|
|
|
def getOldStationsInSystem(system):
|
2020-03-05 14:05:12 +01:00
|
|
|
|
FILTERS.update(system_name={"value": system})
|
|
|
|
|
params = {"json": JSON.dumps({"filters": FILTERS, "sort": SORT})}
|
|
|
|
|
json = requests.post(APIURL, params).json()
|
2020-03-04 18:07:56 +01:00
|
|
|
|
|
|
|
|
|
ret =""
|
|
|
|
|
for station in json["results"]:
|
|
|
|
|
ret += "{}, ".format(station["name"])
|
|
|
|
|
|
|
|
|
|
return ret[:-2]
|
|
|
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="Script for interfacing with "
|
|
|
|
|
+ "Spansh’s API.")
|
|
|
|
|
subparsers = parser.add_subparsers(title="subcommands", help="sub-command help",
|
|
|
|
|
dest="subcommand", required=True)
|
|
|
|
|
|
|
|
|
|
parser_oldstations = subparsers.add_parser("oldstations",
|
|
|
|
|
help="Searches for stations with old data (>1 year without an update.")
|
|
|
|
|
parser_oldstations.add_argument("--system", nargs="?",
|
|
|
|
|
help="a single system to query. If not present, get the oldest stations "
|
|
|
|
|
+ "overall.")
|
|
|
|
|
parser_oldstations.add_argument("--count", nargs="?", type=int, default=50,
|
|
|
|
|
help="how many stations to output. Defaults to 50.")
|
|
|
|
|
parser_oldstations.add_argument("--systemlist", action='store_true',
|
|
|
|
|
help="outputs a list of systems to visit _only_, no station names (for)"
|
|
|
|
|
+ "easy system names c&p")
|
|
|
|
|
|
|
|
|
|
argcomplete.autocomplete(parser)
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
|
|
2020-03-05 14:05:12 +01:00
|
|
|
|
APIURL = "http://backend3.spansh.co.uk:3000/api/stations/search"
|
|
|
|
|
|
|
|
|
|
FILTERS = {"updated_at":
|
|
|
|
|
{"value":
|
|
|
|
|
["2017-11-06",
|
|
|
|
|
(datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")],
|
|
|
|
|
"comparison": "<=>"}}
|
|
|
|
|
SORT = {"updated_at": {"direction": "asc"}}
|
|
|
|
|
COUNT = args.count
|
|
|
|
|
|
2020-03-04 18:07:56 +01:00
|
|
|
|
out =""
|
|
|
|
|
if args.subcommand == "oldstations":
|
|
|
|
|
if args.system:
|
|
|
|
|
out = getOldStationsInSystem(args.system)
|
|
|
|
|
else:
|
2020-03-05 14:05:12 +01:00
|
|
|
|
out = getOldStations(args.systemlist)
|
|
|
|
|
else:
|
|
|
|
|
parser.print_usage(sys.stderr)
|
|
|
|
|
sys.exit(1)
|
2020-03-04 18:07:56 +01:00
|
|
|
|
|
2020-03-04 20:42:57 +01:00
|
|
|
|
if out == "":
|
|
|
|
|
sys.exit(3)
|
|
|
|
|
else:
|
|
|
|
|
print(out)
|
|
|
|
|
sys.exit(0)
|