Skip to content

Commit

Permalink
Add support up to Python 3.12 (#74)
Browse files Browse the repository at this point in the history
* Add support of 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] python/cpython#91513
  • Loading branch information
jcapiitao authored Oct 19, 2023
1 parent f96087f commit 8ed6232
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 45 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
test:
strategy:
matrix:
python: ["3.8", "3.9", "3.10", "3.11"]
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]

runs-on: ubuntu-22.04
steps:
Expand All @@ -37,7 +37,7 @@ jobs:
- name: Setup Python 🔧
uses: actions/setup-python@v4
with:
python-version: "3.11"
python-version: "3.12"

- name: Install tox
run: pip install tox
Expand Down
2 changes: 2 additions & 0 deletions .mergify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,11 @@ queue_rules:
- "check-success=test (3.9)"
- "check-success=test (3.10)"
- "check-success=test (3.11)"
- "check-success=test (3.12)"
merge_conditions:
- "check-success=pep8"
- "check-success=test (3.8)"
- "check-success=test (3.9)"
- "check-success=test (3.10)"
- "check-success=test (3.11)"
- "check-success=test (3.12)"
16 changes: 11 additions & 5 deletions daiquiri/tests/test_daiquiri.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import io
import json
import logging
import sys
import typing
import unittest
import warnings

Expand Down Expand Up @@ -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()
Expand All @@ -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__)
Expand All @@ -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,
)
Expand Down
68 changes: 32 additions & 36 deletions daiquiri/tests/test_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
# under the License.
import json
import logging
import sys
import syslog
import typing
import unittest
Expand Down Expand Up @@ -100,6 +101,34 @@ 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:
Expand All @@ -108,41 +137,8 @@ def test_datadog(self) -> None:
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)),
]
)
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ classifier =
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
Programming Language :: Python :: 3.12

[options]
install_requires =
Expand Down
4 changes: 2 additions & 2 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist = py38,py39,py310,py311,pep8,docs
envlist = py38,py39,py310,py311,py312,pep8,docs

[testenv]
allowlist_externals = sh
Expand All @@ -10,7 +10,7 @@ commands =
sh -c "rm errors.log everything.log"

[testenv:pep8]
basepython = python3.10
basepython = python3.12
deps =
{[testenv]deps}
black
Expand Down

0 comments on commit 8ed6232

Please sign in to comment.