From 03544a5cdd0c14a1d7dbe5d5c0a306a8025d4bb3 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Sun, 14 Jul 2024 16:53:03 -0400 Subject: [PATCH 1/7] fix: update utcnow for python 3.12 deprecation See https://github.com/python/cpython/issues/81669 See https://blog.miguelgrinberg.com/post/it-s-time-for-a-change-datetime-utcnow-is-now-deprecated --- json_logging/dto.py | 6 +++--- json_logging/formatters.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/json_logging/dto.py b/json_logging/dto.py index 4cf39a8..9c349d0 100644 --- a/json_logging/dto.py +++ b/json_logging/dto.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timezone from json_logging import util @@ -32,14 +32,14 @@ class DefaultRequestResponseDTO(RequestResponseDTOBase): def __init__(self, request, **kwargs): super(DefaultRequestResponseDTO, self).__init__(request, **kwargs) - utcnow = datetime.utcnow() + utcnow = datetime.now(timezone.utc).replace(tzinfo=None) self._request_start = utcnow self["request_received_at"] = util.iso_time_format(utcnow) # noinspection PyAttributeOutsideInit def on_request_complete(self, response): super(DefaultRequestResponseDTO, self).on_request_complete(response) - utcnow = datetime.utcnow() + utcnow = datetime.now(timezone.utc).replace(tzinfo=None) time_delta = utcnow - self._request_start self["response_time_ms"] = int(time_delta.total_seconds()) * 1000 + int(time_delta.microseconds / 1000) self["response_sent_at"] = util.iso_time_format(utcnow) diff --git a/json_logging/formatters.py b/json_logging/formatters.py index d0a428a..9c3417d 100644 --- a/json_logging/formatters.py +++ b/json_logging/formatters.py @@ -1,7 +1,7 @@ import logging import sys import traceback -from datetime import datetime +from datetime import datetime, timezone import json_logging @@ -61,7 +61,7 @@ def format(self, record): return json_logging.JSON_SERIALIZER(log_object) def _format_log_object(self, record, request_util): - utcnow = datetime.utcnow() + utcnow = datetime.now(timezone.utc).replace(tzinfo=None) base_obj = { "written_at": json_logging.util.iso_time_format(utcnow), From e3defbaf5593ff0232e3b9f0dd02306d004d42c6 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 13:11:53 -0400 Subject: [PATCH 2/7] fix: remove replace(tzinfo=None) since both times are relative. --- .github/workflows/code_quality.yml | 2 +- json_logging/dto.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index 9256df9..f10709d 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -36,7 +36,7 @@ jobs: strategy: matrix: - python-version: ["3.7", "3.8", "3.9"] + python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ] steps: - name: Set up Python ${{ matrix.python-version }} diff --git a/json_logging/dto.py b/json_logging/dto.py index 9c349d0..a68136c 100644 --- a/json_logging/dto.py +++ b/json_logging/dto.py @@ -32,14 +32,14 @@ class DefaultRequestResponseDTO(RequestResponseDTOBase): def __init__(self, request, **kwargs): super(DefaultRequestResponseDTO, self).__init__(request, **kwargs) - utcnow = datetime.now(timezone.utc).replace(tzinfo=None) + utcnow = datetime.now(timezone.utc) self._request_start = utcnow self["request_received_at"] = util.iso_time_format(utcnow) # noinspection PyAttributeOutsideInit def on_request_complete(self, response): super(DefaultRequestResponseDTO, self).on_request_complete(response) - utcnow = datetime.now(timezone.utc).replace(tzinfo=None) + utcnow = datetime.now(timezone.utc) time_delta = utcnow - self._request_start self["response_time_ms"] = int(time_delta.total_seconds()) * 1000 + int(time_delta.microseconds / 1000) self["response_sent_at"] = util.iso_time_format(utcnow) From c4b77226c5790313417d40bea5d9de9199e1f278 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 13:16:19 -0400 Subject: [PATCH 3/7] fix: remove unused global causing flake8 complaint --- json_logging/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/json_logging/__init__.py b/json_logging/__init__.py index 94ee039..61c5b26 100644 --- a/json_logging/__init__.py +++ b/json_logging/__init__.py @@ -61,7 +61,6 @@ def config_root_logger(): if ENABLE_JSON_LOGGING: ENABLE_JSON_LOGGING_DEBUG and _logger.debug("Update root logger to using JSONLogFormatter") - global _default_formatter util.update_formatter_for_loggers([logging.root], _default_formatter) From 73a18ada4959ac31b20b80a65edd51c5e1aa41db Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 13:20:34 -0400 Subject: [PATCH 4/7] fix: test up to py3.12 --- .github/workflows/code_quality.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index f10709d..4558679 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -36,7 +36,7 @@ jobs: strategy: matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ] + python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] steps: - name: Set up Python ${{ matrix.python-version }} From 3cc2abd2e8ac56df95d7f766e7a9c64f5b2a0e89 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 13:35:33 -0400 Subject: [PATCH 5/7] fix: add support for taskName in py 3.12 --- tests/conftest.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index a3e80b9..bedebf4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,6 +1,10 @@ """Global fixtures and settings for the pytest test suite""" import sys import os +from helpers import constants # Add test helper modules to search path with out making "tests" a Python package sys.path.append(os.path.join(os.path.dirname(__file__), "helpers")) + +if sys.version_info.major > 3 or (sys.version_info.major == 3 and sys.version_info.minor >= 12): + constants.STANDARD_MSG_ATTRIBUTES.add('taskName') From b502bc7d8e673b7af7aadee6b75e208998e0f7c4 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 13:41:53 -0400 Subject: [PATCH 6/7] fix: pin sanic --- tests/smoketests/sanic/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/smoketests/sanic/requirements.txt b/tests/smoketests/sanic/requirements.txt index 0050908..4e01c5e 100644 --- a/tests/smoketests/sanic/requirements.txt +++ b/tests/smoketests/sanic/requirements.txt @@ -1,4 +1,4 @@ -sanic +sanic==20.3.0 requests pytest -e . From 81ca2f78521018787846968ccb90e7c0e6fe97c8 Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Mon, 28 Apr 2025 14:56:45 -0400 Subject: [PATCH 7/7] fix: add python 3.13 to CI --- .github/workflows/code_quality.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/code_quality.yml b/.github/workflows/code_quality.yml index 4558679..93d37ee 100644 --- a/.github/workflows/code_quality.yml +++ b/.github/workflows/code_quality.yml @@ -36,7 +36,7 @@ jobs: strategy: matrix: - python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] + python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ] steps: - name: Set up Python ${{ matrix.python-version }}