From ae0b3d2fffd2dfd18c7726c15afded174ded75d4 Mon Sep 17 00:00:00 2001 From: Felix Schwarz Date: Thu, 6 Jul 2023 21:26:40 +0200 Subject: [PATCH] replace "datetime.utcfromtimestamp" with custom helper to avoid deprecation warnings when using Python 3.12 --- setup_docs.py | 8 +++----- src/borg/testsuite/helpers.py | 17 +++++++++++------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/setup_docs.py b/setup_docs.py index 41a41f35a6..0861140e28 100644 --- a/setup_docs.py +++ b/setup_docs.py @@ -6,7 +6,7 @@ import sys import textwrap from collections import OrderedDict -from datetime import datetime +from datetime import datetime, timezone import time from setuptools import Command @@ -470,10 +470,8 @@ def write_man_header(self, write, title, description): self.write_heading(write, description, double_sided=True) # man page metadata write(":Author: The Borg Collective") - write( - ":Date:", - datetime.utcfromtimestamp(int(os.environ.get("SOURCE_DATE_EPOCH", time.time()))).date().isoformat(), - ) + source_date_epoch = int(os.environ.get("SOURCE_DATE_EPOCH", time.time())) + write(":Date:", datetime.fromtimestamp(source_date_epoch, timezone.utc).date().isoformat()) write(":Manual section: 1") write(":Manual group: borg backup tool") write() diff --git a/src/borg/testsuite/helpers.py b/src/borg/testsuite/helpers.py index 0f96ad6cce..88936a9db9 100644 --- a/src/borg/testsuite/helpers.py +++ b/src/borg/testsuite/helpers.py @@ -1202,6 +1202,11 @@ def test_swidth_slice_mixed_characters(): assert swidth_slice(string, 6) == "나윤a" +def utcfromtimestamp(timestamp): + """Returns a naive datetime instance representing the timestamp in the UTC timezone""" + return datetime.fromtimestamp(timestamp, timezone.utc).replace(tzinfo=None) + + def test_safe_timestamps(): if SUPPORT_32BIT_PLATFORMS: # ns fit into int64 @@ -1213,9 +1218,9 @@ def test_safe_timestamps(): # datetime won't fall over its y10k problem beyond_y10k = 2**100 with pytest.raises(OverflowError): - datetime.utcfromtimestamp(beyond_y10k) - assert datetime.utcfromtimestamp(safe_s(beyond_y10k)) > datetime(2038, 1, 1) - assert datetime.utcfromtimestamp(safe_ns(beyond_y10k) / 1000000000) > datetime(2038, 1, 1) + utcfromtimestamp(beyond_y10k) + assert utcfromtimestamp(safe_s(beyond_y10k)) > datetime(2038, 1, 1) + assert utcfromtimestamp(safe_ns(beyond_y10k) / 1000000000) > datetime(2038, 1, 1) else: # ns fit into int64 assert safe_ns(2**64) <= 2**63 - 1 @@ -1226,9 +1231,9 @@ def test_safe_timestamps(): # datetime won't fall over its y10k problem beyond_y10k = 2**100 with pytest.raises(OverflowError): - datetime.utcfromtimestamp(beyond_y10k) - assert datetime.utcfromtimestamp(safe_s(beyond_y10k)) > datetime(2262, 1, 1) - assert datetime.utcfromtimestamp(safe_ns(beyond_y10k) / 1000000000) > datetime(2262, 1, 1) + utcfromtimestamp(beyond_y10k) + assert utcfromtimestamp(safe_s(beyond_y10k)) > datetime(2262, 1, 1) + assert utcfromtimestamp(safe_ns(beyond_y10k) / 1000000000) > datetime(2262, 1, 1) class TestPopenWithErrorHandling: