11import logging
2- from unittest .mock import patch
2+ from collections .abc import Generator
3+ from unittest .mock import Mock , patch
34
45import pytest
56from bluesky .log import logger as bluesky_logger
67from dodal .log import LOGGER as dodal_logger
78
89from blueapi .config import GraylogConfig , LoggingConfig
9- from blueapi .log import set_up_logging
10+ from blueapi .log import PlanTagFilter , plan_tag_filter_context , set_up_logging
1011
1112
1213def clear_all_loggers_and_handlers (logger ):
@@ -23,7 +24,7 @@ def clear_all_loggers_and_handlers(logger):
2324
2425
2526@pytest .fixture (params = LOGGER_NAMES )
26- def logger_with_graylog (request ):
27+ def logger_with_graylog (request ) -> Generator [ logging . Logger ] :
2728 logger = logging .getLogger (request .param )
2829 graylog_config = GraylogConfig (enabled = True )
2930 set_up_logging (LoggingConfig (graylog = graylog_config ))
@@ -32,7 +33,7 @@ def logger_with_graylog(request):
3233
3334
3435@pytest .fixture (params = LOGGER_NAMES )
35- def logger_without_graylog (request ):
36+ def logger_without_graylog (request ) -> Generator [ logging . Logger ] :
3637 logger = logging .getLogger (request .param )
3738 graylog_config = GraylogConfig (enabled = False )
3839 set_up_logging (LoggingConfig (graylog = graylog_config ))
@@ -41,19 +42,19 @@ def logger_without_graylog(request):
4142
4243
4344@pytest .fixture
44- def logger (logger_with_graylog ):
45+ def logger (logger_with_graylog ) -> logging . Logger :
4546 return logger_with_graylog
4647
4748
4849@pytest .fixture
49- def mock_stream_handler_emit ():
50+ def mock_stream_handler_emit () -> Generator [ Mock ] :
5051 with patch ("blueapi.log.logging.StreamHandler.emit" ) as stream_handler_emit :
5152 # stream_handler_emit.reset_mock()
5253 yield stream_handler_emit
5354
5455
5556@pytest .fixture
56- def mock_graylog_emit ():
57+ def mock_graylog_emit () -> Generator [ Mock ] :
5758 with patch ("blueapi.log.GELFTCPHandler.emit" ) as graylog_emit :
5859 yield graylog_emit
5960
@@ -65,7 +66,7 @@ def mock_graylog_emit():
6566
6667
6768@pytest .fixture (params = MOCK_HANDLER_EMIT_STRINGS )
68- def mock_handler_emit (request ):
69+ def mock_handler_emit (request ) -> Generator [ Mock ] :
6970 with patch (request .param ) as mock_emit :
7071 yield mock_emit
7172
@@ -101,3 +102,25 @@ def test_library_logger_intergrations(logger, library_logger, mock_handler_emit)
101102 mock_handler_emit .assert_not_called ()
102103 library_logger .info ("FOO" )
103104 mock_handler_emit .assert_called ()
105+
106+
107+ def test_plan_tag_filter_context_adds_filter (logger ):
108+ assert logger .filters == []
109+ with plan_tag_filter_context ("foo" , logger ):
110+ filters = logger .filters
111+ assert len (filters ) == 1
112+ assert isinstance (filters [0 ], PlanTagFilter )
113+
114+
115+ def test_plan_tag_filter_context_removes_filter (logger ):
116+ with plan_tag_filter_context ("foo" , logger ):
117+ filters = logger .filters
118+ assert len (filters ) == 1
119+ assert isinstance (filters [0 ], PlanTagFilter )
120+ assert logger .filters == []
121+
122+
123+ def test_filter_tags_plan_name (logger , mock_handler_emit ):
124+ logger .addFilter (PlanTagFilter ("foo" ))
125+ logger .info ("FOO" )
126+ assert mock_handler_emit .call_args [0 ][0 ].plan_name == "foo"
0 commit comments