Compare commits

...

19 commits

Author SHA1 Message Date
bf31991875 0.7! 2021-01-29 14:50:33 +01:00
700df6e98f updated to latest pyEDSM 2021-01-28 17:24:20 +01:00
fbfaeac64f spansh.py: exclude carriers from outdated stations list
fixes #8
2020-12-09 17:54:13 +01:00
a7a44a34b2 updated to latest pyEDSM 2020-10-28 10:24:53 +01:00
baf0a69396 fixed finding cmdr with hidden system/coords 2020-10-21 03:37:41 +02:00
bf592168c1 explorationtools.py: fixed finding cmdr with hidden activity time 2020-09-29 11:09:49 +02:00
ebfa86e163 fixed version number … 2020-07-18 17:15:34 +02:00
9e52b9772f 0.6! 2020-07-18 17:06:08 +02:00
4b8bf96c1c spansh.py: fixed tripping over missing parameter 2020-07-12 03:20:19 +02:00
0176f70c86 spansh.py: now takes minimum age of data as argument
Still defaults to 1 year.

fixes #6
2020-07-10 14:21:26 +02:00
ceccb497dd spansh.py: changed output format for old stations search
Instead of a time stamp it will now say “(<x> days ago)”.

kind of see #7
2020-07-10 14:14:58 +02:00
e5dcb465fb properly fixed the Discord invite … 2020-07-01 11:34:16 +02:00
20ba6320a5 release 0.5 2020-07-01 11:30:06 +02:00
e306bd1585 Merge branch 'master' into develop 2020-07-01 11:29:47 +02:00
6b0205e2c1 CHANGELOG: forget adding stuff here … 2020-07-01 11:26:00 +02:00
718194ccec edts.py: proper handling for malformed system names 2020-07-01 10:23:48 +02:00
92eb2c9008 edts.py: added script to pull from Alot’s hosted EDTS API
fixes #4
2020-07-01 09:41:00 +02:00
0179369fc1 spansh.py: fixed oldstation search results for partial system name
fixes #3
2020-06-29 09:25:16 +02:00
79bc2d49d4 updated Makefile 2020-06-22 02:34:44 +02:00
9 changed files with 219 additions and 36 deletions

View file

@ -1,7 +1,53 @@
# 0.7 (2021-01-28)
## Changed
* spansh.py: Fleet carriers are now explicitly excluded from the outdated
stations list.
## Fixed
* explorationtools.py: Searching for a CMDR with public profile, but hidden
activity will no longer error out.
* explorationtools.py: Searching for a CMDR with public profile, but hidden
flight log will no longer error out.
-----
# 0.6 (2020-07-18)
## Added
* `spansh.py` old station snearch now takes a `--minage` (in days) argument for
what you would consider “outdated” data.
## Changed
* `spansh.py` old station search now outputs an age in days for the last update
instead of a time stamp.
-----
# 0.5 (2020-07-01)
Changed Changelog format. Should be even clearer now at a glance!
See [KeepAChangelog](https://keepachangelog.com/en/1.0.0/).
## Added
* `edts.py`: Script for accessing Alots hosted EDTS API. Right now the only
implemented thing is getting approximate coordinates for a given procedually
generated system name.
-----
# 0.4.1 (2020-06-18)
* removed accidentally left over debug print code from `spansh.py`
-----
# 0.4 (2020-03-09)
Kind of a big one. Obviously because in addition to EDSM, I can now do some

View file

@ -1,4 +1,4 @@
all: docs
all: clean docs release
zipfile = elite-scripts.zip
@ -13,6 +13,7 @@ exe:
pip install --user --upgrade -r requirements.txt
pip install --user --upgrade -r pyEDSM\requirements.txt
python -OO -m PyInstaller --clean -yF edsm-getnearest.py
python -OO -m PyInstaller --clean -yF edts.py
python -OO -m PyInstaller --clean -yF explorationtools.py
python -OO -m PyInstaller --clean -yF spansh.py

View file

@ -44,6 +44,34 @@ optional arguments:
--text explicitly give text output
```
### edts.py ###
```
usage: edts.py [-h] {coords} ...
Script for interfacing with Alots hosted EDTS API.
optional arguments:
-h, --help show this help message and exit
subcommands:
{coords} sub-command help
coords Searches for the approximate coordinates of a given procedurally
generated system name.
```
```
usage: edts.py coords [-h] [--maxuncertainty [MAXUNCERTAINTY]] system
positional arguments:
system the system name to get coordinates for
optional arguments:
-h, --help show this help message and exit
--maxuncertainty [MAXUNCERTAINTY]
maximum accepted uncertainty, if any
```
### explorationtools.py ###
```
@ -171,13 +199,15 @@ optional arguments:
```
usage: spansh.py oldstations [-h] [--system [SYSTEM]] [--count [COUNT]]
[--short]
[--minage [MINAGE]] [--short]
optional arguments:
-h, --help show this help message and exit
--system [SYSTEM] a single system to query. If not present, get the oldest
stations overall.
--count [COUNT] how many stations to output. Defaults to 50.
--minage [MINAGE] minimum age of data (in days) to be considered
“outdated”. Defaults to 365 (= 1year).
--short short output format (system/station names only)
```

View file

@ -78,9 +78,6 @@ def outputText():
except SystemNotFoundError as e:
print(e)
sys.exit(2)
except EdsmApiException as e:
print(e)
sys.exit(1)
nearestCmdr = min(distances,key=distances.get)
if shortOutput:
print('nearest commander: {} ({} ly).'.format(nearestCmdr.name,

77
edts.py Executable file
View file

@ -0,0 +1,77 @@
#!/usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
import json as JSON
import requests
import urllib
import sys
from pyEDSM.edsm.exception import ServerError, NotFoundError
# ===========================================================================
class ProcGenNameError(Exception):
def __str__(self):
return "Given system is not a valid proc gen name."
def getCoords(system):
url = APIURLS["coords"] + urllib.parse.quote(system)
response = requests.get(url)
if response.status_code != 200:
if response.status_code == 400:
raise ProcGenNameError()
else:
raise ServerError(url, {})
json = response.json()['result']
ret = json['position']
ret['uncertainty'] = json['uncertainty']
return ret
# ===========================================================================
parser = argparse.ArgumentParser(description="Script for interfacing with "
+ "Alots hosted EDTS API.")
subparsers = parser.add_subparsers(title="subcommands", help="sub-command help",
dest="subcommand", required=True)
parser_coords = subparsers.add_parser("coords",
help="Searches for the approximate coordinates of a given procedurally "
+ "generated system name.")
parser_coords.add_argument("system",
help="the system name to get coordinates for")
parser_coords.add_argument("--maxuncertainty", nargs="?", type=int,
help="maximum accepted uncertainty, if any")
argcomplete.autocomplete(parser)
args = parser.parse_args()
# ===========================================================================
APIURLS = {
"coords": "http://edts.thargoid.space/api/v1/system_position/"
}
try:
if args.subcommand == "coords":
coords = getCoords(args.system)
if args.maxuncertainty:
if args.maxuncertainty < coords['uncertainty']:
raise NotFoundError()
out = "{},{},{}|{}".format(int(coords['x']), int(coords['y']),
int(coords['z']), int(coords['uncertainty']))
except ServerError as e:
print(e)
sys.exit(1)
except ProcGenNameError as e:
print(e)
sys.exit(4)
except NotFoundError as e:
print("Maximum uncertainty exceeded: " + str(int(coords['uncertainty']))
+ " > " + str(args.maxuncertainty))
sys.exit(3)
else:
print(out)
sys.exit(0)

View file

@ -22,18 +22,24 @@ def distanceBetween(system1, system2, roundTo=2):
def getCommanderPosition(name, apikey):
coords = Commander(name, apikey).currentPosition
ret = ""
for k in coords:
ret += "{}: {}, ".format(k, coords[k])
return ret[:-2]
ret = "hidden"
if coords:
ret = ""
for k in coords:
ret += "{}: {}, ".format(k, coords[k])
ret = ret[:-2]
return ret
def getCommanderProfileUrl(name, apikey):
return Commander(name, apikey).profileUrl
def getCommanderSystem(name, apikey):
cmdr = Commander(name, apikey)
return "{} (last seen {})".format(cmdr.currentSystem,
when(cmdr.lastActivity))
if cmdr.lastActivity is None:
return "{}".format(cmdr.currentSystem)
else:
return "{} (last seen {})".format(cmdr.currentSystem,
when(cmdr.lastActivity))
def when(date):
diff = datetime.now() - date
ret = ""

View file

@ -34,6 +34,20 @@ EOF
cat >> README.md << EOF
\`\`\`
### edts.py ###
\`\`\`
EOF
./edts.py -h >> README.md
cat >> README.md << EOF
\`\`\`
\`\`\`
EOF
./edts.py coords -h >> README.md
cat >> README.md << EOF
\`\`\`
### explorationtools.py ###
\`\`\`
@ -101,5 +115,5 @@ cat >> README.md << EOF
## Need Help / Want to Contribute? ##
Just [file an issue](https://github.com/alterNERDtive/elite-scripts/issues/new)
here or [hop into Discord](https://discord.gg/uUKFdW) if that is your thing.
here or [hop into Discord](https://discord.gg/XHNX7jN) if that is your thing.
EOF

2
pyEDSM

@ -1 +1 @@
Subproject commit 36a660f240c7e57cf524fe9640d13e56c7e42e79
Subproject commit da044e918fe17cf18d2b2e18d60ce16a168ea70b

View file

@ -5,7 +5,8 @@ import json as JSON
import requests
import sys
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
from dateutil import parser as dtparser
from pyEDSM.edsm.exception import ServerError, NotFoundError
@ -63,8 +64,8 @@ def getOldStations():
if args.short:
ret += "{}\n".format(station["system_name"])
else:
ret += "{}: {} ({})\n".format(station["system_name"], station["name"],
station["updated_at"])
ret += "{}: {} ({} days ago)\n".format(station["system_name"], station["name"],
(datetime.now(timezone.utc) - dtparser.parse(station["updated_at"])).days)
return ret[:-1]
@ -79,11 +80,19 @@ def getOldStationsInSystem(system):
json = querystations(APIURLS["stations"], params)
ret = ""
for station in json["results"]:
if args.short:
ret += "{}\n".format(station["name"])
else:
ret += "{} ({})\n".format(station["name"], station["updated_at"])
# exclude carriers
stations = list(filter(lambda station: not station["type"] == "Drake-Class Carrier", json["results"]))
if len(stations) == 0:
raise NotFoundError()
for station in stations:
# systems including the given name as a word will also trigger;
# looking for e.g. “Mari” will also give you stuff in “Mac Mari”!
if station["system_name"] == system:
if args.short:
ret += "{}\n".format(station["name"])
else:
ret += "{} ({} days ago)\n".format(station["name"],
(datetime.now(timezone.utc) - dtparser.parse(station["updated_at"])).days)
return ret[:-1]
@ -136,6 +145,9 @@ parser_oldstations.add_argument("--system", nargs="?",
+ "overall.")
parser_oldstations.add_argument("--count", nargs="?", type=int, default=50,
help="how many stations to output. Defaults to 50.")
parser_oldstations.add_argument("--minage", nargs="?", type=int, default=365,
help="minimum age of data (in days) to be considered “outdated”. Defaults to "
+ "365 (= 1year).")
parser_oldstations.add_argument("--short", action='store_true',
help="short output format (system/station names only)")
@ -154,26 +166,26 @@ APIURLS = {
"stations": "https://spansh.co.uk/api/stations/search",
"systems": "https://spansh.co.uk/api/systems/search",
}
FILTERS = {
"updated_at":
{
"value": [
"2017-11-06",
(datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")
],
"comparison": "<=>"
}
}
SORT = {
"updated_at": {
"direction": "asc"
}
}
try:
if args.subcommand == "nearestsystem":
out = getNearestSystem(args.coordinate)
elif args.subcommand == "oldstations":
FILTERS = {
"updated_at":
{
"value": [
"2017-11-06",
(datetime.now() - timedelta(days=args.minage)).strftime("%Y-%m-%d")
],
"comparison": "<=>"
}
}
SORT = {
"updated_at": {
"direction": "asc"
}
}
if args.system:
out = getOldStationsInSystem(args.system)
else: