From 08ab3f0999c9e0369fe1fe5b14ccfc4a5b0577ac Mon Sep 17 00:00:00 2001 From: Richard Date: Tue, 9 Jan 2024 20:39:11 +0100 Subject: [PATCH] obj function --- nullptr/api.py | 2 +- nullptr/commander.py | 22 +++++++++++++++++++++- nullptr/models/ship.py | 2 ++ nullptr/store.py | 18 +++++++++++++++++- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/nullptr/api.py b/nullptr/api.py index 7ceda25..9239cc2 100644 --- a/nullptr/api.py +++ b/nullptr/api.py @@ -194,7 +194,7 @@ class Api: def flight_mode(self, ship, mode): data = {'flightMode': mode} data = self.request('patch', f'my/ships/{ship}/nav', data) - ship.update(data) + ship.update({'nav':data}) return data def jump(self, ship, waypoint): diff --git a/nullptr/commander.py b/nullptr/commander.py index c23faf9..2fdfa30 100644 --- a/nullptr/commander.py +++ b/nullptr/commander.py @@ -496,7 +496,27 @@ class Commander(CommandLine): def do_defrag(self): self.store.defrag() - + def do_obj(self, oid): + if not '.' in oid: + print('Usage: obj SYMBOL.ext') + return + symbol, ext = oid.split('.') + symbol = symbol.upper() + if not ext in self.store.extensions: + print('unknown extension') + typ = self.store.extensions[ext] + obj = self.store.get(typ, symbol) + if obj is None: + print('object not found') + pprint(obj.__getstate__()) + print('=== store ===') + h = self.store.get_header(obj) + if h: + pprint(h, 3) + else: + print('Not stored') + print('Dirty: ', obj in self.store.dirty_objects) + def do_query(self, resource): if not self.has_ship(): return location = self.ship.location diff --git a/nullptr/models/ship.py b/nullptr/models/ship.py index 1c7bd3a..a4e7a22 100644 --- a/nullptr/models/ship.py +++ b/nullptr/models/ship.py @@ -145,6 +145,8 @@ class Ship(Base): r += f'Role: {role}\n' r += f'Mission: {self.mission} ({mstatus})\n' for k, v in self.mission_state.items(): + if type(v) == list: + v = f'[{len(v)} items]' r += f' {k}: {v}\n' adj = 'to' if self.status == 'IN_TRANSIT' else 'at' r += f'Status {self.status} {adj} {self.location}\n' diff --git a/nullptr/store.py b/nullptr/store.py index c0c1cd7..6a24fd2 100644 --- a/nullptr/store.py +++ b/nullptr/store.py @@ -59,7 +59,16 @@ class ChunkHeader: def __repr__(self): return f'chunk {self.in_use} {self.size} {self.used}' - + + def f(self, detail=1): + if detail == 1: + return f'chunk {self.offset} {self.used}/{self.size}' + else: + r = f'Stored at: {self.offset}\n' + slack = self.size - self.used + r += f'Used: {self.used}/{self.size} (slack {slack})' + return r + class Store: def __init__(self, data_file, verbose=False): self.init_models() @@ -146,6 +155,13 @@ class Store: h.offset = offset h.write(self.fil) return offset, h + + def get_header(self, obj): + if obj._file_offset is None: + return None + self.fil.seek(obj._file_offset) + hdr = ChunkHeader.parse(self.fil) + return hdr def purge(self, obj): if obj._file_offset is None: