From 22b9bb77efb0a0268dc1968b6a9eb41aa0eaf90b Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 12:59:31 +0200 Subject: [PATCH] Fix reporting the [WinError 10038] exception traceback on sign-in Surround the serve_forever function of the web server with a try-catch on Windows, in order to avoid printing the entire (useless) traceback. Now a warning message is be displayed in the log instead. The behavior is untouched in other platforms --- cura/OAuth2/LocalAuthorizationServer.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py index f819042ae0..211b59683f 100644 --- a/cura/OAuth2/LocalAuthorizationServer.py +++ b/cura/OAuth2/LocalAuthorizationServer.py @@ -1,6 +1,6 @@ # Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - +import sys import threading from typing import Any, Callable, Optional, TYPE_CHECKING @@ -71,7 +71,7 @@ class LocalAuthorizationServer: self._web_server.setState(state) # Start the server on a new thread. - self._web_server_thread = threading.Thread(None, self._web_server.serve_forever, daemon = self._daemon) + self._web_server_thread = threading.Thread(None, self._serve_forever, daemon = self._daemon) self._web_server_thread.start() def stop(self) -> None: @@ -87,3 +87,20 @@ class LocalAuthorizationServer: pass self._web_server = None self._web_server_thread = None + + def _serve_forever(self) -> None: + """ + If the platform is windows, this function calls the serve_forever function of the _web_server, catching any + OSErrors that may occur in the thread, thus making the reported message more log-friendly. + If it is any other platform, it just calls the serve_forever function immediately. + + :return: None + """ + if sys.platform == "win32": + try: + self._web_server.serve_forever() + except OSError as e: + Logger.warning(str(e)) + else: + # Leave the default behavior in non-windows platforms + self._web_server.serve_forever()