diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9bf6dac..3abe87f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -119,8 +119,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - asset_path: ${{ env.DISTRIBUTABLE }} asset_content_type: application/x-wheel+zip + asset_name: ${{ env.DISTRIBUTABLE }} + asset_path: ${{ env.DISTRIBUTABLE }} upload_url: ${{ steps.get_release.outputs.upload_url }} publish_to_pypi: diff --git a/wev/logging/log.py b/wev/logging/log.py index 986e7f6..b6a378a 100644 --- a/wev/logging/log.py +++ b/wev/logging/log.py @@ -10,6 +10,17 @@ def get_logger(name: str = "wev") -> Logger: + """ + Gets a logger. + + Arguments: + name: Name of the logger. Defaults to "wev". When getting a logger for + a plugin, use the plugin's name. + + Returns: + Logger. + """ + global done_init if not done_init: @@ -18,6 +29,7 @@ def get_logger(name: str = "wev") -> Logger: logger = getLogger(name) + # Register our `Formatter` as a handler if it hasn't already. for handler in logger.handlers: if isinstance(handler.formatter, Formatter): break diff --git a/wev/logging/test_log.py b/wev/logging/test_log.py new file mode 100644 index 0000000..5374bec --- /dev/null +++ b/wev/logging/test_log.py @@ -0,0 +1,49 @@ +from mock import Mock, patch + +from wev.logging.formatter import Formatter +from wev.logging.log import get_logger + + +@patch("wev.logging.log.StreamHandler") +@patch("wev.logging.log.getLogger") +@patch("wev.logging.log.stdout") +def test_get_logger__adds_handler( + stdout: Mock, + logger_maker: Mock, + stream_handler_maker: Mock, +) -> None: + stream_handler = Mock() + stream_handler_maker.return_value = stream_handler + + logger = Mock() + logger_maker.return_value = logger + + addHandler = Mock() + logger.addHandler = addHandler + + not_our_handler = Mock() + not_our_handler.formatter = Mock() + logger.handlers = [not_our_handler] + + assert get_logger() + + stream_handler_maker.assert_called_once_with(stdout) + addHandler.assert_called_once_with(stream_handler) + + +@patch("wev.logging.log.getLogger") +def test_get_logger__adds_handler_once(logger_maker: Mock) -> None: + stream_handler = Mock() + stream_handler.formatter = Formatter(name="test") + + logger = Mock() + logger_maker.return_value = logger + + addHandler = Mock() + logger.addHandler = addHandler + + logger.handlers = [stream_handler] + + get_logger() + + addHandler.assert_not_called()