summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Pope <nick@nickpope.me.uk>2023-11-21 17:13:08 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-11-28 06:19:38 +0100
commit6089230d3ec580f2f44e85f23962c14905fefcfd (patch)
treeeb243025bb58a778e16466fe96dac9dbc067bb95
parent0fcd72bc48eade21ce9202d7a71692f9b5a42bd2 (diff)
Refs #34986 -- Fixed mocking in utils_tests.test_http.HttpDateProcessingTests.test_parsing_rfc850.
Mocking in the `datetime` module can be tricky. In CPython the datetime C module is used, but PyPy uses a pure Python implementation. This caused issues with the prior approach to mocking `datetime.datetime`. See https://docs.python.org/3/library/unittest.mock-examples.html#partial-mocking
-rw-r--r--django/utils/http.py7
-rw-r--r--tests/utils_tests/test_http.py3
2 files changed, 4 insertions, 6 deletions
diff --git a/django/utils/http.py b/django/utils/http.py
index cfd982fc01..78dfee7fee 100644
--- a/django/utils/http.py
+++ b/django/utils/http.py
@@ -1,8 +1,8 @@
import base64
-import datetime
import re
import unicodedata
from binascii import Error as BinasciiError
+from datetime import datetime, timezone
from email.utils import formatdate
from urllib.parse import quote, unquote
from urllib.parse import urlencode as original_urlencode
@@ -113,10 +113,9 @@ def parse_http_date(date):
else:
raise ValueError("%r is not in a valid HTTP date format" % date)
try:
- tz = datetime.timezone.utc
year = int(m["year"])
if year < 100:
- current_year = datetime.datetime.now(tz=tz).year
+ current_year = datetime.now(tz=timezone.utc).year
current_century = current_year - (current_year % 100)
if year - (current_year % 100) > 50:
# year that appears to be more than 50 years in the future are
@@ -129,7 +128,7 @@ def parse_http_date(date):
hour = int(m["hour"])
min = int(m["min"])
sec = int(m["sec"])
- result = datetime.datetime(year, month, day, hour, min, sec, tzinfo=tz)
+ result = datetime(year, month, day, hour, min, sec, tzinfo=timezone.utc)
return int(result.timestamp())
except Exception as exc:
raise ValueError("%r is not a valid date" % date) from exc
diff --git a/tests/utils_tests/test_http.py b/tests/utils_tests/test_http.py
index 818c35e597..68df04696a 100644
--- a/tests/utils_tests/test_http.py
+++ b/tests/utils_tests/test_http.py
@@ -334,10 +334,9 @@ class HttpDateProcessingTests(unittest.TestCase):
)
@unittest.skipIf(platform.architecture()[0] == "32bit", "The Year 2038 problem.")
- @mock.patch("django.utils.http.datetime.datetime")
+ @mock.patch("django.utils.http.datetime")
def test_parsing_rfc850(self, mocked_datetime):
mocked_datetime.side_effect = datetime
- mocked_datetime.now = mock.Mock()
now_1 = datetime(2019, 11, 6, 8, 49, 37, tzinfo=timezone.utc)
now_2 = datetime(2020, 11, 6, 8, 49, 37, tzinfo=timezone.utc)
now_3 = datetime(2048, 11, 6, 8, 49, 37, tzinfo=timezone.utc)