Improve state refresh handler

This commit is contained in:
Mads Marquart
2019-07-02 17:22:41 +02:00
parent 794696d327
commit 3236ea5b97

View File

@@ -106,17 +106,11 @@ class Client(object):
query.update(self._state.get_params()) query.update(self._state.get_params())
return query return query
def _fix_fb_errors(self, error_code): def _do_refresh(self):
""" # TODO: Raise the error instead, and make the user do the refresh manually
This fixes "Please try closing and re-opening your browser window" errors (1357004) # It may be a bad idea to do this in an exception handler, if you have a better method, please suggest it!
This error usually happens after 1-2 days of inactivity log.warning("Refreshing state and resending request")
It may be a bad idea to do this in an exception handler, if you have a better method, please suggest it! self._state = State.from_session(session=self._state._session)
"""
if error_code == "1357004":
log.warning("Got error #1357004. Refreshing state and resending request")
self._state = State.from_session(session=self._state._session)
return True
return False
def _get(self, url, query=None, error_retries=3): def _get(self, url, query=None, error_retries=3):
payload = self._generatePayload(query) payload = self._generatePayload(query)
@@ -124,10 +118,11 @@ class Client(object):
try: try:
content = check_request(r) content = check_request(r)
return to_json(content) return to_json(content)
except FBchatFacebookError as e: except FBchatPleaseRefresh:
if error_retries > 0 and self._fix_fb_errors(e.fb_error_code): if error_retries > 0:
self._do_refresh()
return self._get(url, query=query, error_retries=error_retries - 1) return self._get(url, query=query, error_retries=error_retries - 1)
raise e raise
def _post(self, url, query=None, files=None, as_graphql=False, error_retries=3): def _post(self, url, query=None, files=None, as_graphql=False, error_retries=3):
payload = self._generatePayload(query) payload = self._generatePayload(query)
@@ -138,8 +133,9 @@ class Client(object):
return graphql_response_to_json(content) return graphql_response_to_json(content)
else: else:
return to_json(content) return to_json(content)
except FBchatFacebookError as e: except FBchatPleaseRefresh:
if error_retries > 0 and self._fix_fb_errors(e.fb_error_code): if error_retries > 0:
self._do_refresh()
return self._post( return self._post(
url, url,
query=query, query=query,
@@ -147,7 +143,7 @@ class Client(object):
as_graphql=as_graphql, as_graphql=as_graphql,
error_retries=error_retries - 1, error_retries=error_retries - 1,
) )
raise e raise
def _payload_post(self, url, data, files=None): def _payload_post(self, url, data, files=None):
j = self._post(url, data, files=files) j = self._post(url, data, files=files)