]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-120268: Prohibit passing ``None`` to ``_pydatetime.date.fromtimestamp`` (#120269)
authorKirill Podoprigora <kirill.bast9@mail.ru>
Sat, 8 Jun 2024 20:45:57 +0000 (23:45 +0300)
committerGitHub <noreply@github.com>
Sat, 8 Jun 2024 20:45:57 +0000 (16:45 -0400)
This makes the pure Python implementation consistent with the C implementation.

Lib/_pydatetime.py
Lib/test/datetimetester.py
Misc/NEWS.d/next/Library/2024-06-08-14-36-40.gh-issue-120268.MNpd1q.rst [new file with mode: 0644]

index b7d569cc41740e0a36fa474f094d5c4d9b4036fd..34ccb2da13d0f31ac197e8d7b634b002456d4b20 100644 (file)
@@ -966,6 +966,8 @@ class date:
     @classmethod
     def fromtimestamp(cls, t):
         "Construct a date from a POSIX timestamp (like time.time())."
+        if t is None:
+            raise TypeError("'NoneType' object cannot be interpreted as an integer")
         y, m, d, hh, mm, ss, weekday, jday, dst = _time.localtime(t)
         return cls(y, m, d)
 
index b80da5697ef86509d02eed028a52e5ac4d1df8cf..28f75a803b4e041f9b28530993bfcfee30d19642 100644 (file)
@@ -1336,6 +1336,11 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
             self.assertRaises(OverflowError, self.theclass.fromtimestamp,
                               insane)
 
+    def test_fromtimestamp_with_none_arg(self):
+        # See gh-120268 for more details
+        with self.assertRaises(TypeError):
+            self.theclass.fromtimestamp(None)
+
     def test_today(self):
         import time
 
diff --git a/Misc/NEWS.d/next/Library/2024-06-08-14-36-40.gh-issue-120268.MNpd1q.rst b/Misc/NEWS.d/next/Library/2024-06-08-14-36-40.gh-issue-120268.MNpd1q.rst
new file mode 100644 (file)
index 0000000..d48d43c
--- /dev/null
@@ -0,0 +1,2 @@
+Prohibit passing ``None`` to pure-Python :meth:`datetime.date.fromtimestamp`
+to achieve consistency with C-extension implementation.