104 lines
2.7 KiB
Python
104 lines
2.7 KiB
Python
from nullptr.command_line import CommandLine
|
|
from nullptr.store import Store
|
|
import argparse
|
|
from nullptr.models.agent import Agent
|
|
from nullptr.models.system import System
|
|
from nullptr.models.waypoint import Waypoint
|
|
from nullptr.api import Api
|
|
from .util import *
|
|
from time import sleep
|
|
from threading import Thread
|
|
|
|
class Commander(CommandLine):
|
|
def __init__(self, store_dir='data', agent=None):
|
|
self.store_dir = store_dir
|
|
self.store = Store(store_dir)
|
|
self.agent = self.select_agent(agent)
|
|
self.api = Api(self.store, self.agent)
|
|
self.store.flush()
|
|
self.stop_auto= False
|
|
super().__init__()
|
|
|
|
def select_agent(self, agent_str):
|
|
if agent_str is not None:
|
|
return self.store.get(Agent, agent_str)
|
|
else:
|
|
agents = self.store.all('', Agent)
|
|
agent = next(agents, None)
|
|
if agent is None:
|
|
symbol = input('agent name: ')
|
|
agent = self.store.get(Agent, symbol)
|
|
return agent
|
|
|
|
def after_cmd(self):
|
|
self.store.flush()
|
|
|
|
def do_info(self):
|
|
pprint(self.api.info(), 100)
|
|
|
|
def do_register(self, faction):
|
|
self.api.register(faction.upper())
|
|
|
|
def wait_for_stop(self):
|
|
input()
|
|
self.stop_auto = True
|
|
print('stopping...')
|
|
|
|
def do_universe(self):
|
|
print('universe mode. hit enter to stop')
|
|
t = Thread(target=self.wait_for_stop)
|
|
t.daemon = True
|
|
t.start()
|
|
self.all_systems()
|
|
print('manual mode')
|
|
|
|
def all_specials(self, waypoints):
|
|
for w in waypoints:
|
|
if self.stop_auto:
|
|
break
|
|
if 'MARKETPLACE' in w.traits:
|
|
self.api.marketplace(w)
|
|
print(f'marketplace at {w}')
|
|
sleep(0.5)
|
|
|
|
def all_waypoints(self, systems):
|
|
for s in systems:
|
|
if self.stop_auto:
|
|
break
|
|
r = self.api.list_waypoints(s)
|
|
print(f'system {s}: {len(r)} waypoints')
|
|
self.all_specials(r)
|
|
sleep(0.5)
|
|
|
|
def all_systems(self):
|
|
self.stop_auto = False
|
|
data = self.api.list_systems(1)
|
|
pages = total_pages(self.api.last_meta)
|
|
print(f'{pages} pages of systems')
|
|
print(f'page {1}: {len(data)} results')
|
|
self.all_waypoints(data)
|
|
|
|
|
|
for p in range(2, pages):
|
|
if self.stop_auto:
|
|
break
|
|
data = self.api.list_systems(p)
|
|
print(f'page {p}: {len(data)} systems')
|
|
self.all_waypoints(data)
|
|
sleep(0.5)
|
|
self.store.flush()
|
|
|
|
def do_systems(self, page=1):
|
|
r = self.api.list_systems(int(page))
|
|
pprint(self.api.last_meta)
|
|
|
|
def do_waypoints(self, system_str):
|
|
system = self.store.get(System, system_str.upper())
|
|
r = self.api.list_waypoints(system)
|
|
pprint(r)
|
|
|
|
def do_marketplace(self, waypoint_str):
|
|
waypoint = self.store.get(Waypoint, waypoint_str.upper())
|
|
r = self.api.marketplace(waypoint)
|
|
|