diff --git a/zulip/zulip/__init__.py b/zulip/zulip/__init__.py index 91cc33998..4b4829367 100644 --- a/zulip/zulip/__init__.py +++ b/zulip/zulip/__init__.py @@ -10,7 +10,7 @@ import traceback import types import urllib.parse -from configparser import SafeConfigParser +from configparser import ConfigParser from typing import ( IO, Any, @@ -425,9 +425,9 @@ def __init__( config_file = get_default_config_filename() if config_file is not None and os.path.exists(config_file): - config = SafeConfigParser() + config = ConfigParser() with open(config_file) as f: - config.readfp(f, config_file) + config.read_file(f, config_file) if api_key is None: api_key = config.get("api", "key") if email is None: @@ -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 @@ -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: @@ -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"]))