From da03ed3ee4a23d5ba0bdef1f114ec31f8e106caa Mon Sep 17 00:00:00 2001 From: Stuart Mumford Date: Tue, 23 Jan 2024 15:37:24 +0000 Subject: [PATCH] Some very basic tests --- dkist/conftest.py | 11 +++++++++- dkist/logger.py | 9 ++++++++ dkist/tests/test_logger.py | 43 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 dkist/tests/test_logger.py diff --git a/dkist/conftest.py b/dkist/conftest.py index 799edbd9..5bbced56 100644 --- a/dkist/conftest.py +++ b/dkist/conftest.py @@ -16,7 +16,7 @@ from astropy.time import Time from sunpy.coordinates.frames import Helioprojective -from dkist import load_dataset +from dkist import load_dataset, log from dkist.data.test import rootdir from dkist.dataset import Dataset from dkist.dataset.tiled_dataset import TiledDataset @@ -24,6 +24,15 @@ from dkist.io.loaders import AstropyFITSLoader +@pytest.fixture +def caplog_dkist(caplog): + """ + A `dkist.log` specifc equivalent to caplog. + """ + log.addHandler(caplog.handler) + return caplog + + @pytest.fixture def array(): shape = 2**np.random.randint(2, 7, size=2) diff --git a/dkist/logger.py b/dkist/logger.py index 1d21a291..1f90ac46 100644 --- a/dkist/logger.py +++ b/dkist/logger.py @@ -31,10 +31,19 @@ class DKISTLogger(logging.Logger): def __init__(self, name, level=logging.NOTSET, *, capture_warning_classes=None): super().__init__(name, level=level) self.capture_warning_classes = tuple(capture_warning_classes) if capture_warning_classes is not None else tuple() + + self.enable_warnings_capture() + + def enable_warnings_capture(self): if self._showwarning_orig is None: self._showwarning_orig = warnings.showwarning warnings.showwarning = self._showwarning + def disable_warnings_capture(self): + if self._showwarning_orig is not None: + warnings.showwarning = self._showwarning_orig + self._showwarning_orig = None + def makeRecord( self, name, diff --git a/dkist/tests/test_logger.py b/dkist/tests/test_logger.py new file mode 100644 index 00000000..64b5810d --- /dev/null +++ b/dkist/tests/test_logger.py @@ -0,0 +1,43 @@ +import logging + +from dkist import log + + +def test_debug_log(caplog_dkist): + # By default the level is set to INFO so we shouldn't get anything here. + log.debug("test_debug_log") + assert caplog_dkist.record_tuples == [] + + +def test_debug_on(caplog_dkist, capsys): + log.setLevel("DEBUG") + + log.debug("test_debug_log") + assert caplog_dkist.record_tuples == [("dkist", logging.DEBUG, "test_debug_log")] + + captured = capsys.readouterr() + assert "DEBUG: test_debug_log [dkist.tests.test_logger]" in captured.out + + +def test_info_log(caplog_dkist, capsys): + log.info("test_info_log") + assert caplog_dkist.record_tuples == [("dkist", logging.INFO, "test_info_log")] + + captured = capsys.readouterr() + assert "WARNING: test_warning_log [dkist.tests.test_logger]" in captured.out + + +def test_warning_log(caplog_dkist, capsys): + log.warning("test_warning_log") + + assert caplog_dkist.record_tuples == [("dkist", logging.WARNING, "test_warning_log")] + captured = capsys.readouterr() + assert "WARNING: test_warning_log [dkist.tests.test_logger]" in captured.err + + +def test_error_log(caplog_dkist, capsys): + log.error("test_error_log") + + assert caplog_dkist.record_tuples == [("dkist", logging.ERROR, "test_error_log")] + captured = capsys.readouterr() + assert "ERROR: test_error_log [dkist.tests.test_logger]" in captured.err