diff --git a/EDMarketConnector.py b/EDMarketConnector.py index 993e94e6..0fc998ad 100755 --- a/EDMarketConnector.py +++ b/EDMarketConnector.py @@ -372,7 +372,7 @@ class AppWindow: try: if companion.session.login(monitor.cmdr, monitor.is_beta): self.status['text'] = '' - except companion.ServerError as e: + except (companion.CredentialsError, companion.ServerError, companion.ServerLagging) as e: self.status['text'] = unicode(e) except Exception as e: if __debug__: print_exc() diff --git a/companion.py b/companion.py index 322c6225..eab3b2bb 100644 --- a/companion.py +++ b/companion.py @@ -280,6 +280,7 @@ class Session: os.environ['REQUESTS_CA_BUNDLE'] = join(config.respath, 'cacert.pem') def login(self, cmdr=None, is_beta=None): + # Returns True if login succeeded, False if re-authorization initiated. if not CLIENT_ID: raise CredentialsError() if not cmdr or is_beta is None: @@ -341,21 +342,20 @@ class Session: if __debug__: print_exc() raise ServerError() - if r.status_code != requests.codes.ok: + try: + r.raise_for_status() + data = r.json() # Will fail here if token expired since response is empty + except: # Start again - maybe our token expired self.dump(r) self.close() if self.login(): return self.query(endpoint) + else: + raise CredentialsError() - try: - data = r.json() - if 'timestamp' not in data: - data['timestamp'] = time.strftime('%Y-%m-%dT%H:%M:%SZ', parsedate(r.headers['Date'])) - except: - self.dump(r) - raise ServerError() - + if 'timestamp' not in data: + data['timestamp'] = time.strftime('%Y-%m-%dT%H:%M:%SZ', parsedate(r.headers['Date'])) return data def profile(self):