Skip to content

Commit 8f03625

Browse files
committed
fix: cachecontrol uses the deprecated utcnow method
Fixes psf#291 Signed-off-by: Frost Ming <me@frostming.com>
1 parent 51691a1 commit 8f03625

File tree

4 files changed

+18
-9
lines changed

4 files changed

+18
-9
lines changed

cacheyou/caches/redis_cache.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0
44

55

6-
from datetime import datetime
6+
from datetime import datetime, timezone
77

88
from cacheyou.cache import BaseCache
99

@@ -19,7 +19,10 @@ def set(self, key, value, expires=None):
1919
if not expires:
2020
self.conn.set(key, value)
2121
elif isinstance(expires, datetime):
22-
expires = expires - datetime.utcnow()
22+
now_utc = datetime.now(timezone.utc)
23+
if expires.tzinfo is None:
24+
now_utc = now_utc.replace(tzinfo=None)
25+
expires = expires - now_utc
2326
self.conn.setex(key, int(expires.total_seconds()), value)
2427
else:
2528
self.conn.setex(key, expires, value)

cacheyou/heuristics.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44

55
import calendar
66
import time
7-
from datetime import datetime, timedelta
7+
from datetime import datetime, timedelta, timezone
88
from email.utils import formatdate, parsedate, parsedate_tz
99

1010
TIME_FMT = "%a, %d %b %Y %H:%M:%S GMT"
1111

1212

1313
def expire_after(delta, date=None):
14-
date = date or datetime.utcnow()
14+
date = date or datetime.now(timezone.utc)
1515
return date + delta
1616

1717

@@ -63,7 +63,7 @@ def update_headers(self, response):
6363

6464
if "expires" not in response.headers:
6565
date = parsedate(response.headers["date"])
66-
expires = expire_after(timedelta(days=1), date=datetime(*date[:6]))
66+
expires = expire_after(timedelta(days=1), date=datetime(*date[:6], tzinfo=timezone.utc))
6767
headers["expires"] = datetime_to_header(expires)
6868
headers["cache-control"] = "public"
6969
return headers

tests/test_expires_heuristics.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import calendar
66
import time
7-
from datetime import datetime
7+
from datetime import datetime, timezone
88
from email.utils import formatdate, parsedate
99
from pprint import pprint
1010
from unittest.mock import Mock
@@ -157,7 +157,8 @@ def test_last_modified_is_used(self):
157157
resp = DummyResponse(200, {"Date": self.now, "Last-Modified": self.week_ago})
158158
modified = self.heuristic.update_headers(resp)
159159
assert ["expires"] == list(modified.keys())
160-
assert datetime(*parsedate(modified["expires"])[:6]) > datetime.now()
160+
expected = datetime(*parsedate(modified["expires"])[:6], tzinfo=timezone.utc)
161+
assert expected > datetime.now(timezone.utc)
161162

162163
def test_last_modified_is_not_used_when_cache_control_present(self):
163164
resp = DummyResponse(
@@ -185,7 +186,8 @@ def test_last_modified_is_used_when_cache_control_public(self):
185186
)
186187
modified = self.heuristic.update_headers(resp)
187188
assert ["expires"] == list(modified.keys())
188-
assert datetime(*parsedate(modified["expires"])[:6]) > datetime.now()
189+
expected = datetime(*parsedate(modified["expires"])[:6], tzinfo=timezone.utc)
190+
assert expected > datetime.now(timezone.utc)
189191

190192
def test_warning_not_added_when_response_more_recent_than_24_hours(self):
191193
resp = DummyResponse(200, {"Date": self.now, "Last-Modified": self.week_ago})

tests/test_storage_redis.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

5-
from datetime import datetime
5+
from datetime import datetime, timezone
66
from unittest.mock import Mock
77

88
from cacheyou.caches import RedisCache
@@ -17,6 +17,10 @@ def test_set_expiration_datetime(self):
1717
self.cache.set("foo", "bar", expires=datetime(2014, 2, 2))
1818
assert self.conn.setex.called
1919

20+
def test_set_expiration_datetime_aware(self):
21+
self.cache.set("foo", "bar", expires=datetime(2014, 2, 2, tzinfo=timezone.utc))
22+
assert self.conn.setex.called
23+
2024
def test_set_expiration_int(self):
2125
self.cache.set("foo", "bar", expires=600)
2226
assert self.conn.setex.called

0 commit comments

Comments
 (0)