Add more explicit error handling

This commit is contained in:
Mads Marquart
2019-07-02 17:32:35 +02:00
parent 3236ea5b97
commit c9f11b924d
3 changed files with 13 additions and 21 deletions

View File

@@ -115,24 +115,30 @@ class Client(object):
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)
r = self._state._session.get(prefix_url(url), params=payload) r = self._state._session.get(prefix_url(url), params=payload)
content = check_request(r)
j = to_json(content)
try: try:
content = check_request(r) handle_payload_error(j)
return to_json(content)
except FBchatPleaseRefresh: except FBchatPleaseRefresh:
if error_retries > 0: if error_retries > 0:
self._do_refresh() 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 raise
return j
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)
r = self._state._session.post(prefix_url(url), data=payload, files=files) r = self._state._session.post(prefix_url(url), data=payload, files=files)
content = check_request(r)
try: try:
content = check_request(r)
if as_graphql: if as_graphql:
return graphql_response_to_json(content) return graphql_response_to_json(content)
else: else:
return to_json(content) j = to_json(content)
# TODO: Remove this, and move it to _payload_post instead
# We can't yet, since errors raised in here need to be caught below
handle_payload_error(j)
return j
except FBchatPleaseRefresh: except FBchatPleaseRefresh:
if error_retries > 0: if error_retries > 0:
self._do_refresh() self._do_refresh()
@@ -147,6 +153,7 @@ class Client(object):
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)
handle_error_in_payload(j)
try: try:
return j["payload"] return j["payload"]
except (KeyError, TypeError): except (KeyError, TypeError):

View File

@@ -49,9 +49,9 @@ def graphql_response_to_json(content):
if "error_results" in x: if "error_results" in x:
del rtn[-1] del rtn[-1]
continue continue
_util.check_json(x) _util.handle_payload_error(x)
[(key, value)] = x.items() [(key, value)] = x.items()
_util.check_json(value) _util.handle_graphql_error(value)
if "response" in value: if "response" in value:
rtn[int(key[1:])] = value["response"] rtn[int(key[1:])] = value["response"]
else: else:

View File

@@ -155,20 +155,6 @@ def handle_graphql_error(j):
) )
def handle_generic_error(j):
if j.get("error"):
raise FBchatFacebookError(
"Error {} when sending request".format(j["error"]), fb_error_code=j["error"]
)
def check_json(j):
handle_error_in_payload(j)
handle_payload_error(j)
handle_graphql_error(j)
handle_generic_error(j)
def check_request(r): def check_request(r):
check_http_code(r.status_code) check_http_code(r.status_code)
content = get_decoded_r(r) content = get_decoded_r(r)
@@ -196,7 +182,6 @@ def check_content(content, as_json=True):
def to_json(content): def to_json(content):
content = strip_json_cruft(content) content = strip_json_cruft(content)
j = parse_json(content) j = parse_json(content)
check_json(j)
log.debug(j) log.debug(j)
return j return j