From 5ff1c843b8a5372c72c570b564b49fe5b5586f17 Mon Sep 17 00:00:00 2001 From: Jonathan Harris Date: Sun, 26 Jul 2015 17:33:05 +0100 Subject: [PATCH] Hande companion API session timing out more gracefully. --- companion.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/companion.py b/companion.py index aec5bf94..f546a2db 100644 --- a/companion.py +++ b/companion.py @@ -21,6 +21,10 @@ from config import config holdoff = 120 # be nice timeout = 10 # requests timeout +URL_LOGIN = 'https://companion.orerve.net/user/login' +URL_CONFIRM = 'https://companion.orerve.net/user/confirm' +URL_QUERY = 'https://companion.orerve.net/profile' + # Map values reported by the Companion interface to names displayed in-game and recognized by trade tools @@ -137,7 +141,7 @@ class Session: else: self.credentials = { 'email' : username, 'password' : password } try: - r = self.session.post('https://companion.orerve.net/user/login', data = self.credentials, timeout=timeout) + r = self.session.post(URL_LOGIN, data = self.credentials, timeout=timeout) except: if __debug__: print_exc() raise ServerError() @@ -160,7 +164,7 @@ class Session: return r.status_code def verify(self, code): - r = self.session.post('https://companion.orerve.net/user/confirm', data = {'code' : code}, timeout=timeout) + r = self.session.post(URL_CONFIRM, data = {'code' : code}, timeout=timeout) r.raise_for_status() # verification doesn't actually return a yes/no, so log in again to determine state try: @@ -176,17 +180,17 @@ class Session: elif self.state == Session.STATE_AUTH: raise VerificationRequired() try: - r = self.session.get('https://companion.orerve.net/profile', timeout=timeout) + r = self.session.get(URL_QUERY, timeout=timeout) except: if __debug__: print_exc() raise ServerError() if r.status_code != requests.codes.ok: self.dump(r) - if r.status_code == requests.codes.forbidden: + if r.status_code == requests.codes.forbidden or (r.history and r.url == URL_LOGIN): # Start again - maybe our session cookie expired? self.login() - self.query() + return self.query() r.raise_for_status() try: