From 1767df031a9bbd40e5c88946d564484f57aadae6 Mon Sep 17 00:00:00 2001 From: Jonathan Harris Date: Thu, 5 Oct 2017 00:09:17 +0100 Subject: [PATCH] Only care about lastStarport if docked --- EDMC.py | 14 +++++++++----- EDMarketConnector.py | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/EDMC.py b/EDMC.py index 50604d51..159ff879 100755 --- a/EDMC.py +++ b/EDMC.py @@ -129,7 +129,8 @@ try: if not data.get('commander') or not data['commander'].get('name','').strip(): sys.stderr.write('Who are you?!\n') sys.exit(EXIT_SERVER) - elif not data.get('lastSystem') or not data['lastSystem'].get('name','').strip() or not data.get('lastStarport') or not data['lastStarport'].get('name','').strip(): + elif (not data.get('lastSystem', {}).get('name') or + (data['commander'].get('docked') and not data.get('lastStarport', {}).get('name'))): # Only care if docked sys.stderr.write('Where are you?!\n') # Shouldn't happen sys.exit(EXIT_SERVER) elif not data.get('ship') or not data['ship'].get('modules') or not data['ship'].get('name','').strip(): @@ -161,14 +162,17 @@ try: stats.export_status(data, args.t) if data['commander'].get('docked'): - print '%s,%s' % (data['lastSystem']['name'], data['lastStarport']['name']) + print '%s,%s' % (data.get('lastSystem', {}).get('name', 'Unknown'), data.get('lastStarport', {}).get('name', 'Unknown')) else: - print data['lastSystem']['name'] + print data.get('lastSystem', {}).get('name', 'Unknown') if (args.m or args.o or args.s or args.n or args.j): if not data['commander'].get('docked'): sys.stderr.write("You're not docked at a station!\n") sys.exit(EXIT_SUCCESS) + elif not data.get('lastStarport', {}).get('name'): + sys.stderr.write("Unknown station!\n") + sys.exit(EXIT_LAGGING) elif not (data['lastStarport'].get('commodities') or data['lastStarport'].get('modules')): # Ignore possibly missing shipyard info sys.stderr.write("Station doesn't have anything!\n") sys.exit(EXIT_SUCCESS) @@ -202,8 +206,8 @@ try: sleep(SERVER_RETRY) data2 = session.station() if (data2['commander'].get('docked') and # might have undocked while we were waiting for retry in which case station data is unreliable - data2['lastSystem']['name'] == monitor.system and - data2['lastStarport']['name'] == monitor.station): + data2.get('lastSystem', {}).get('name') == monitor.system and + data2.get('lastStarport', {}).get('name') == monitor.station): data = data2 if args.s: diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 9e4bd6ed..686d053f 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -432,11 +432,12 @@ class AppWindow: config.set('querytime', querytime) # Validation - if not data.get('commander') or not data['commander'].get('name','').strip(): + if not data.get('commander', {}).get('name'): self.status['text'] = _("Who are you?!") # Shouldn't happen - elif not data.get('lastSystem') or not data['lastSystem'].get('name','').strip() or not data.get('lastStarport') or not data['lastStarport'].get('name','').strip(): + elif (not data.get('lastSystem', {}).get('name') or + (data['commander'].get('docked') and not data.get('lastStarport', {}).get('name'))): # Only care if docked self.status['text'] = _("Where are you?!") # Shouldn't happen - elif not data.get('ship') or not data['ship'].get('modules') or not data['ship'].get('name','').strip(): + elif not data.get('ship', {}).get('name') or not data.get('ship', {}).get('modules'): self.status['text'] = _("What are you flying?!") # Shouldn't happen elif monitor.cmdr and data['commander']['name'] != monitor.cmdr: raise companion.CmdrError() # Companion API return doesn't match Journal @@ -556,12 +557,12 @@ class AppWindow: try: data = self.session.station() if __debug__: - print 'Retry for shipyard - ' + (data['commander'].get('docked') and (data['lastStarport'].get('ships') and 'Success' or 'Failure') or 'Undocked!') + print 'Retry for shipyard - ' + (data['commander'].get('docked') and (data.get('lastStarport', {}).get('ships') and 'Success' or 'Failure') or 'Undocked!') if not data['commander'].get('docked'): pass # might have undocked while we were waiting for retry in which case station data is unreliable - elif (data['lastStarport'].get('ships') and - data['lastSystem']['name'] == monitor.system and - data['lastStarport']['name'] == monitor.station): + elif (data.get('lastSystem', {}).get('name') == monitor.system and + data.get('lastStarport', {}).get('name') == monitor.station and + data.get('lastStarport', {}).get('ships')): self.eddn.export_shipyard(data, monitor.is_beta) elif tries > 1: # bogus data - retry self.w.after(int(SERVER_RETRY * 1000), lambda:self.retry_for_shipyard(tries-1)) @@ -732,11 +733,12 @@ class AppWindow: self.status['text'] = str(e) return - if not data.get('commander') or not data['commander'].get('name','').strip(): + if not data.get('commander', {}).get('name'): self.status['text'] = _("Who are you?!") # Shouldn't happen - elif not data.get('lastSystem') or not data['lastSystem'].get('name','').strip() or not data.get('lastStarport') or not data['lastStarport'].get('name','').strip(): + elif (not data.get('lastSystem', {}).get('name') or + (data['commander'].get('docked') and not data.get('lastStarport', {}).get('name'))): # Only care if docked self.status['text'] = _("Where are you?!") # Shouldn't happen - elif not data.get('ship') or not data['ship'].get('modules') or not data['ship'].get('name','').strip(): + elif not data.get('ship', {}).get('name') or not data.get('ship', {}).get('modules'): self.status['text'] = _("What are you flying?!") # Shouldn't happen elif (monitor.state['ShipID'] is not None and data['ship']['id'] != monitor.state['ShipID']) or (monitor.state['ShipType'] and data['ship']['name'].lower() != monitor.state['ShipType']): self.status['text'] = _('Error: Frontier server is lagging') # Raised when Companion API server is returning old data, e.g. when the servers are too busy @@ -788,7 +790,7 @@ class AppWindow: defaultextension = platform=='darwin' and '.json' or '', filetypes = [('JSON', '.json'), ('All Files', '*')], initialdir = config.get('outdir'), - initialfile = '%s%s.%s.json' % (data['lastSystem'].get('name', 'Unknown'), data['commander'].get('docked') and '.'+data['lastStarport'].get('name', 'Unknown') or '', strftime('%Y-%m-%dT%H.%M.%S', localtime()))) + initialfile = '%s%s.%s.json' % (data.get('lastSystem', {}).get('name', 'Unknown'), data['commander'].get('docked') and '.'+data.get('lastStarport', {}).get('name', 'Unknown') or '', strftime('%Y-%m-%dT%H.%M.%S', localtime()))) if f: with open(f, 'wt') as h: h.write(json.dumps(data, ensure_ascii=False, indent=2, sort_keys=True, separators=(',', ': ')).encode('utf-8'))