Skip to content

Commit 6c2510d

Browse files
authored
Bugfix/fix broken pipes again (#150)
* Handle broken pipe errors. * OSError instead of IOError
1 parent 0040474 commit 6c2510d

File tree

3 files changed

+10
-19
lines changed

3 files changed

+10
-19
lines changed

src/code42cli/cmds/search/extraction.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ def _set_handlers(cursor_store, checkpoint_name):
4949
handlers.TOTAL_EVENTS = 0
5050

5151
def handle_error(exception):
52+
if isinstance(exception, OSError): # let click handle it
53+
raise
54+
5255
errors.ERRORED = True
5356
if hasattr(exception, "response") and hasattr(exception.response, "text"):
5457
message = "{}: {}".format(exception, exception.response.text)

src/code42cli/errors.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ def invoke(self, ctx):
126126
self.logger.log_verbose_error(self._original_args, err.response.request)
127127
raise LoggedCLIError("Problem making request to server.")
128128

129+
except OSError:
130+
raise
131+
129132
except Exception:
130133
self.logger.log_verbose_error()
131134
raise LoggedCLIError("Unknown problem occurred.")

src/code42cli/logger.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from c42eventextractor.logging.formatters import FileEventDictToJSONFormatter
1010
from c42eventextractor.logging.formatters import FileEventDictToRawJSONFormatter
1111
from c42eventextractor.logging.handlers import NoPrioritySysLogHandlerWrapper
12+
from click.exceptions import ClickException
1213

1314
from code42cli.cmds.search.enums import FileEventsOutputFormat
1415
from code42cli.util import get_url_parts
@@ -38,28 +39,12 @@ def _init_logger(logger, handler, output_format):
3839

3940
def handleError(record):
4041
"""Override logger's `handleError` method to exit if an exception is raised while trying to
41-
log, and replace stdout with devnull because if we're here it's usually because stdout has
42-
been closed on us.
42+
log, otherwise it would continue to gather and process events if the connection breaks but send
43+
them nowhere.
4344
"""
4445
t, v, tb = sys.exc_info()
4546
if t == BrokenPipeError:
46-
sys.stdout = open(os.devnull)
47-
sys.exit()
48-
49-
50-
def get_logger_for_stdout(name_suffix="main", formatter=None):
51-
logger = logging.getLogger("code42_stdout_{}".format(name_suffix))
52-
if logger_has_handlers(logger):
53-
return logger
54-
55-
with logger_deps_lock:
56-
if not logger_has_handlers(logger):
57-
handler = logging.StreamHandler(sys.stdout)
58-
handler.handleError = handleError
59-
formatter = formatter or _get_standard_formatter()
60-
logger.setLevel(logging.INFO)
61-
return add_handler_to_logger(logger, handler, formatter)
62-
return logger
47+
raise ClickException("Network connection broken while sending results.")
6348

6449

6550
def get_logger_for_server(hostname, protocol, output_format):

0 commit comments

Comments
 (0)