From fb3b6162fccf331d3fd3cf0bd1d1a19a1ea972d5 Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 3 Feb 2024 21:20:04 +0100 Subject: [PATCH] shipyards --- Dockerfile | 3 +-- nullptr/api.py | 6 +++++- nullptr/atlas_builder.py | 3 +-- nullptr/commander.py | 13 +++++-------- nullptr/models/__init__.py | 3 ++- nullptr/models/shipyard.py | 35 +++++++++++++++++++++++++++++++++++ 6 files changed, 49 insertions(+), 14 deletions(-) create mode 100644 nullptr/models/shipyard.py diff --git a/Dockerfile b/Dockerfile index 8c0ace9..bbda0d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,5 +9,4 @@ ADD --chown=user . /app RUN chmod +x /app/main.py VOLUME /data #ENTRYPOINT bash -ENTRYPOINT [ "python3", "/app/main.py"] -CMD ["-d", "/data"] +CMD ["/bin/sh", "-c", "python3 /app/main.py -d /data ; bash -i"] \ No newline at end of file diff --git a/nullptr/api.py b/nullptr/api.py index b9fec1e..2247ad0 100644 --- a/nullptr/api.py +++ b/nullptr/api.py @@ -4,6 +4,7 @@ from nullptr.models.waypoint import Waypoint from nullptr.models.marketplace import Marketplace from nullptr.models.jumpgate import Jumpgate from nullptr.models.ship import Ship +from nullptr.models.shipyard import Shipyard from .util import * from time import sleep, time class ApiError(Exception): @@ -117,7 +118,10 @@ class Api: return self.store.update(Jumpgate, data, symbol) def shipyard(self, wp): - return self.request('get', f'systems/{wp.system}/waypoints/{wp}/shipyard') + data = self.request('get', f'systems/{wp.system}/waypoints/{wp}/shipyard') + symbol = str(wp) + + return self.store.update(Shipyard, data, symbol) ######## Fleet ######### def list_ships(self): diff --git a/nullptr/atlas_builder.py b/nullptr/atlas_builder.py index 0dc7ad5..b0b45ac 100644 --- a/nullptr/atlas_builder.py +++ b/nullptr/atlas_builder.py @@ -71,5 +71,4 @@ class AtlasBuilder: #print(f'jumpgate at {w}') self.sched(self.api.jumps, w) if 'SHIPYARD' in w.traits: - # todo - pass + self.sched(self.api.shipyard, w) diff --git a/nullptr/commander.py b/nullptr/commander.py index 8d855fe..89b8d7c 100644 --- a/nullptr/commander.py +++ b/nullptr/commander.py @@ -205,6 +205,8 @@ class Commander(CommandLine): self.api.marketplace(w) if w.type == 'JUMP_GATE': self.api.jumps(w) + if 'SHIPYARD' in w.traits: + self.api.shipyard(w) def do_system(self, system_str): system = self.store.get(System, system_str) @@ -261,19 +263,14 @@ class Commander(CommandLine): else: waypoint = self.store.get(Waypoint, waypoint_str.upper()) r = self.api.jumps(waypoint) - pprint(r) + pprint(r, 5) def do_shipyard(self, w=''): location = self.resolve_waypoint(w) if location is None: raise CommandError(f'waypoint {w} not found') - data = self.api.shipyard(location) - if 'ships' in data: - for s in must_get(data, 'ships'): - print(s['type'], s['purchasePrice']) - else: - for s in must_get(data, 'shipTypes'): - print(s['type']) + sy = self.api.shipyard(location) + pprint(sy, 5) ######## Commerce ######### def do_refuel(self, source='market'): diff --git a/nullptr/models/__init__.py b/nullptr/models/__init__.py index dc62957..e9056be 100644 --- a/nullptr/models/__init__.py +++ b/nullptr/models/__init__.py @@ -10,5 +10,6 @@ from nullptr.models.contract import Contract from nullptr.models.survey import Survey from nullptr.models.atlas import Atlas from nullptr.models.crew import Crew +from nullptr.models.shipyard import Shipyard -__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'System', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base', 'Atlas', 'Crew' ] +__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'System', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base', 'Atlas', 'Crew', 'Shipyard' ] diff --git a/nullptr/models/shipyard.py b/nullptr/models/shipyard.py new file mode 100644 index 0000000..b550f36 --- /dev/null +++ b/nullptr/models/shipyard.py @@ -0,0 +1,35 @@ +from nullptr.models import Base +from time import time +from nullptr.util import * + +class Shipyard(Base): + def define(self): + self.last_prices = 0 + self.types = set() + self.prices:dict = {} + + def get_waypoint(self): + return self.store.get('Waypoint', self.symbol, create=True) + + @classmethod + def ext(self): + return 'syd' + + def update(self, d): + if 'ships' in d: + self.last_prices = time() + for s in must_get(d, 'ships'): + self.prices[s['type']] = s['purchasePrice'] + for s in must_get(d, 'shipTypes'): + self.types.add(s['type']) + + def f(self, detail=1): + r = super().f(detail) + if detail > 2: + r += '\n' + for st in self.types: + price = "Unknown" + if st in self.prices: + price = self.prices[st] + r += f'{st:20} {price}\n' + return r \ No newline at end of file