From 267346f5fb243286c45533db80eb5e7c8a095403 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Sat, 25 Mar 2017 21:54:56 -0700 Subject: [PATCH] AdminZulipHandler: Support passing a record without a request. --- zerver/logging_handlers.py | 3 ++- zerver/tests/test_logging_handlers.py | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/zerver/logging_handlers.py b/zerver/logging_handlers.py index 3aa567710c..3a66df3387 100644 --- a/zerver/logging_handlers.py +++ b/zerver/logging_handlers.py @@ -78,7 +78,8 @@ class AdminZulipHandler(logging.Handler): message = record.getMessage(), stack_trace = stack_trace, ) - add_request_metadata(report, record.request) # type: ignore # record.request is added dynamically + if hasattr(record, "request"): + add_request_metadata(report, record.request) # type: ignore # record.request is added dynamically except Exception: traceback.print_exc() report = dict( diff --git a/zerver/tests/test_logging_handlers.py b/zerver/tests/test_logging_handlers.py index 472896ae45..96c2c81bdd 100644 --- a/zerver/tests/test_logging_handlers.py +++ b/zerver/tests/test_logging_handlers.py @@ -55,6 +55,28 @@ class AdminZulipHandlerTest(ZulipTestCase): # type: () -> None settings.LOGGING_NOT_DISABLED = True + def get_admin_zulip_handler(self, logger): + # type: (logging.Logger) -> Any + + # Ensure that AdminEmailHandler does not get filtered out + # even with DEBUG=True. + admin_email_handler = [ + h for h in logger.handlers + if h.__class__.__name__ == "AdminZulipHandler" + ][0] + return admin_email_handler + + def test_basic(self): + # type: () -> None + """A random exception passes happily through AdminZulipHandler""" + handler = self.get_admin_zulip_handler(self.logger) + try: + raise Exception("Testing Error!") + except Exception: + exc_info = sys.exc_info() + record = self.logger.makeRecord('name', logging.ERROR, 'function', 16, 'message', None, exc_info) # type: ignore # https://github.com/python/typeshed/pull/1100 + handler.emit(record) + def run_handler(self, record): # type: (logging.LogRecord) -> Dict[str, Any] with patch('zerver.logging_handlers.queue_json_publish') as patched_publish: