Skip to content

Commit

Permalink
zulip: Reraise exceptions in do_api_query.
Browse files Browse the repository at this point in the history
There are cases where the call to an endpoint may result in an
exception the traceback for which is converted into JSON and
returned to the caller. In the case of such an unsuccessful
response, we should just reraise the exception instead of parsing
the response as though it was successful.
  • Loading branch information
eeshangarg authored and timabbott committed Feb 28, 2022
1 parent 05d591a commit 7c3967f
Showing 1 changed file with 21 additions and 18 deletions.
39 changes: 21 additions & 18 deletions zulip/zulip/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -681,10 +681,7 @@ def end_error_retry(succeeded: bool) -> None:
continue
else:
end_error_retry(False)
return {
"msg": f"Connection error:\n{traceback.format_exc()}",
"result": "connection-error",
}
raise
except requests.exceptions.ConnectionError:
if not self.has_connected:
# If we have never successfully connected to the server, don't
Expand All @@ -696,16 +693,10 @@ def end_error_retry(succeeded: bool) -> None:
if error_retry(""):
continue
end_error_retry(False)
return {
"msg": f"Connection error:\n{traceback.format_exc()}",
"result": "connection-error",
}
raise
except Exception:
# We'll split this out into more cases as we encounter new bugs.
return {
"msg": f"Unexpected error:\n{traceback.format_exc()}",
"result": "unexpected-error",
}
raise

try:
if requests_json_is_function:
Expand Down Expand Up @@ -782,16 +773,28 @@ def do_register() -> Tuple[str, int]:
if queue_id is None:
(queue_id, last_event_id) = do_register()

res = self.get_events(queue_id=queue_id, last_event_id=last_event_id)
try:
res = self.get_events(queue_id=queue_id, last_event_id=last_event_id)
except (
requests.exceptions.Timeout,
requests.exceptions.SSLError,
requests.exceptions.ConnectionError,
):
if self.verbose:
print(f"Connection error fetching events:\n{traceback.format_exc()}")
# TODO: Make this use our backoff library
time.sleep(1)
continue
except Exception:
print(f"Unexpected error:\n{traceback.format_exc()}")
# TODO: Make this use our backoff library
time.sleep(1)
continue

if "error" in res["result"]:
if res["result"] == "http-error":
if self.verbose:
print("HTTP error fetching events -- probably a server restart")
elif res["result"] == "connection-error":
if self.verbose:
print(
"Connection error fetching events -- probably server is temporarily down?"
)
else:
if self.verbose:
print("Server returned error:\n{}".format(res["msg"]))
Expand Down

0 comments on commit 7c3967f

Please sign in to comment.