2019-10-04 00:45:33 +02:00
|
|
|
|
#!/usr/bin/env python3
|
2020-01-05 19:03:48 +01:00
|
|
|
|
# PYTHON_ARGCOMPLETE_OK
|
|
|
|
|
import argcomplete, argparse
|
2019-10-04 00:45:33 +02:00
|
|
|
|
import math
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
from pyEDSM.edsm.exception import ServerError, NotFoundError
|
|
|
|
|
from pyEDSM.edsm.models import System, Commander
|
|
|
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
|
|
2020-01-05 19:04:05 +01:00
|
|
|
|
def distanceBetween(system1, system2):
|
2020-01-06 17:20:37 +01:00
|
|
|
|
coords1 = System(system1).coords
|
|
|
|
|
coords2 = System(system2).coords
|
|
|
|
|
return int(round(math.sqrt( (coords1['x']-coords2['x'])**2
|
2020-01-05 19:04:05 +01:00
|
|
|
|
+ (coords1['y']-coords2['y'])**2
|
2020-01-06 17:20:37 +01:00
|
|
|
|
+ (coords1['z']-coords2['z'])**2 ),0))
|
2019-10-04 00:45:33 +02:00
|
|
|
|
|
2020-01-06 17:24:57 +01:00
|
|
|
|
def findCommander(name, apikey):
|
|
|
|
|
return Commander(name, apikey).currentSystem
|
2020-01-05 19:20:20 +01:00
|
|
|
|
|
2020-01-05 19:04:05 +01:00
|
|
|
|
def getBodyCount(system):
|
2020-01-06 17:20:37 +01:00
|
|
|
|
return System(system).bodyCount
|
2019-10-04 05:09:33 +02:00
|
|
|
|
|
2019-10-04 00:45:33 +02:00
|
|
|
|
# ===========================================================================
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(description="A collection of tools useful for "
|
|
|
|
|
+ "exploration.")
|
|
|
|
|
subparsers = parser.add_subparsers(title="subcommands", help="sub-command help",
|
|
|
|
|
dest="subCommand")
|
|
|
|
|
|
|
|
|
|
parser_bodycount = subparsers.add_parser("bodycount",
|
|
|
|
|
help="Returns the number of bodies in a system. Will exit with code 1 on "
|
|
|
|
|
+ "server error and code 2 if the system could not be found in EDSM.")
|
2019-10-04 05:09:33 +02:00
|
|
|
|
parser_bodycount.add_argument("system", nargs=1)
|
|
|
|
|
|
|
|
|
|
parser_distance = subparsers.add_parser("distancebetween",
|
2019-10-22 01:33:35 +02:00
|
|
|
|
help="Calculates the distance between two systems. Will exit with code 1 "
|
2019-10-04 05:09:33 +02:00
|
|
|
|
+ "on server error and code 2 if (one of) the systems could not be found "
|
|
|
|
|
+ "on EDSM.")
|
|
|
|
|
parser_distance.add_argument("system", nargs=2)
|
2019-10-04 00:45:33 +02:00
|
|
|
|
|
2020-01-06 17:20:37 +01:00
|
|
|
|
parser_find = subparsers.add_parser("findcommander",
|
2020-01-05 19:20:20 +01:00
|
|
|
|
help="Attempts to find a CMDR’s last known position. Will exit with code 1 "
|
|
|
|
|
+ "on server error and code 2 if the CMDR could not be found on EDSM.")
|
|
|
|
|
parser_find.add_argument("name")
|
2020-01-06 17:24:57 +01:00
|
|
|
|
parser_find.add_argument("apikey", default="", nargs="?",
|
|
|
|
|
help="the commander’s EDSM API key. Can be empty for public profiles.")
|
2020-01-05 19:20:20 +01:00
|
|
|
|
|
2020-01-05 19:03:48 +01:00
|
|
|
|
argcomplete.autocomplete(parser)
|
2019-10-04 00:45:33 +02:00
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
|
|
2020-01-06 17:20:37 +01:00
|
|
|
|
try:
|
|
|
|
|
if args.subCommand == "bodycount":
|
|
|
|
|
out = getBodyCount(args.system[0])
|
|
|
|
|
elif args.subCommand == "distancebetween":
|
|
|
|
|
out = distanceBetween(args.system[0], args.system[1])
|
|
|
|
|
elif args.subCommand == "findcommander":
|
2020-01-06 17:24:57 +01:00
|
|
|
|
out = findCommander(args.name, args.apikey)
|
2020-01-06 17:20:37 +01:00
|
|
|
|
except ServerError as e:
|
|
|
|
|
print(e)
|
|
|
|
|
sys.exit(1)
|
|
|
|
|
except NotFoundError as e:
|
|
|
|
|
print(e)
|
|
|
|
|
sys.exit(2)
|
|
|
|
|
else:
|
|
|
|
|
print(out)
|
|
|
|
|
sys.exit(0)
|