From 5a83be86c13ba8d8944a795e228d41e76213bf9d Mon Sep 17 00:00:00 2001 From: Joel Capitao Date: Tue, 18 Jul 2023 13:11:08 +0200 Subject: [PATCH] Adjust tests for taskName attribute added in Python 3.12 gh-91513: Added taskName attribute to logging module for use with asyncio tasks. python/cpython#91513 [1] credits to https://github.com/hrnciar [1] https://github.com/python/cpython/issues/91513 --- daiquiri/tests/test_daiquiri.py | 16 +++++--- daiquiri/tests/test_output.py | 70 ++++++++++++++++----------------- 2 files changed, 44 insertions(+), 42 deletions(-) diff --git a/daiquiri/tests/test_daiquiri.py b/daiquiri/tests/test_daiquiri.py index 3c4e850..62b6863 100644 --- a/daiquiri/tests/test_daiquiri.py +++ b/daiquiri/tests/test_daiquiri.py @@ -12,6 +12,8 @@ import io import json import logging +import sys +import typing import unittest import warnings @@ -39,7 +41,10 @@ def test_setup_json_formatter(self) -> None: ) ) daiquiri.getLogger(__name__).warning("foobar") - self.assertEqual({"message": "foobar"}, json.loads(stream.getvalue())) + expected: dict[str, typing.Any] = {"message": "foobar"} + if sys.version_info >= (3, 12): + expected.update({"taskName": None}) + self.assertEqual(expected, json.loads(stream.getvalue())) def test_setup_json_formatter_with_extras(self) -> None: stream = io.StringIO() @@ -51,9 +56,10 @@ def test_setup_json_formatter_with_extras(self) -> None: ) ) daiquiri.getLogger(__name__).warning("foobar", foo="bar") - self.assertEqual( - {"message": "foobar", "foo": "bar"}, json.loads(stream.getvalue()) - ) + expected: dict[str, typing.Any] = {"message": "foobar", "foo": "bar"} + if sys.version_info >= (3, 12): + expected.update({"taskName": None}) + self.assertEqual(expected, json.loads(stream.getvalue())) def test_get_logger_set_level(self) -> None: logger = daiquiri.getLogger(__name__) @@ -66,7 +72,7 @@ def test_capture_warnings(self) -> None: line = stream.getvalue() self.assertIn("WARNING py.warnings: ", line) self.assertIn( - "daiquiri/tests/test_daiquiri.py:65: " + "daiquiri/tests/test_daiquiri.py:71: " 'UserWarning: omg!\n warnings.warn("omg!")\n', line, ) diff --git a/daiquiri/tests/test_output.py b/daiquiri/tests/test_output.py index cc373ea..8c76cfe 100644 --- a/daiquiri/tests/test_output.py +++ b/daiquiri/tests/test_output.py @@ -11,6 +11,7 @@ # under the License. import json import logging +import sys import syslog import typing import unittest @@ -100,49 +101,44 @@ def test_datadog(self) -> None: logger = daiquiri.getLogger() logger.error("foo", bar=1) logger.info("bar") + expected_error_1 = { + "status": "error", + "message": "foo", + "bar": 1, + "logger": {"name": "root"}, + "timestamp": mock.ANY, + } + expected_info_1 = { + "status": "info", + "message": "bar", + "logger": {"name": "root"}, + "timestamp": mock.ANY, + } + expected_error_2 = { + "status": "error", + "message": "backtrace", + "logger": {"name": "saymyname"}, + "timestamp": mock.ANY, + "error": { + "kind": "ZeroDivisionError", + "stack": None, + "message": mock.ANY, + }, + } + if sys.version_info >= (3, 12): + expected_error_1.update({"taskName": None}) + expected_info_1.update({"taskName": None}) + expected_error_2.update({"taskName": None}) try: 1 / 0 except ZeroDivisionError: logger = daiquiri.getLogger("saymyname") - logger.error("backtrace", exc_info=True) + logger.exception("backtrace") socket_instance.connect.assert_called_once_with(("127.0.0.1", 10518)) socket_instance.sendall.assert_has_calls( [ - mock.call( - DatadogMatcher( - { - "status": "error", - "message": "foo", - "bar": 1, - "logger": {"name": "root"}, - "timestamp": mock.ANY, - } - ) - ), - mock.call( - DatadogMatcher( - { - "status": "info", - "message": "bar", - "logger": {"name": "root"}, - "timestamp": mock.ANY, - } - ) - ), - mock.call( - DatadogMatcher( - { - "status": "error", - "message": "backtrace", - "logger": {"name": "saymyname"}, - "timestamp": mock.ANY, - "error": { - "kind": "ZeroDivisionError", - "stack": None, - "message": mock.ANY, - }, - } - ) - ), + mock.call(DatadogMatcher(expected_error_1)), + mock.call(DatadogMatcher(expected_info_1)), + mock.call(DatadogMatcher(expected_error_2)), ] )