Improve state refresh handler
This commit is contained in:
@@ -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)
|
||||||
|
Reference in New Issue
Block a user