Use `parsedate_tz` in the linkcheck builder

This commit is contained in:
Adam Turner
2023-08-13 19:39:08 +01:00
committed by Adam Turner
parent f1b2682d58
commit d4169a32e7
2 changed files with 6 additions and 8 deletions

View File

@@ -6,8 +6,7 @@ import json
import re
import socket
import time
from datetime import datetime, timezone
from email.utils import parsedate_to_datetime
from email.utils import parsedate_tz
from html.parser import HTMLParser
from os import path
from queue import PriorityQueue, Queue
@@ -490,14 +489,15 @@ class HyperlinkAvailabilityCheckWorker(Thread):
except ValueError:
try:
# An HTTP-date: time of next attempt.
until = parsedate_to_datetime(retry_after)
parsed = parsedate_tz(retry_after)
# the 10th element is the GMT offset in seconds
next_check = time.mktime(parsed[:9]) - parsed[9]
except (TypeError, ValueError):
# TypeError: Invalid date format.
# ValueError: Invalid date, e.g. Oct 52th.
pass
else:
next_check = datetime.timestamp(until)
delay = (until - datetime.now(timezone.utc)).total_seconds()
delay = next_check - time.time()
else:
next_check = time.time() + delay
netloc = urlsplit(response_url).netloc

View File

@@ -9,7 +9,6 @@ import textwrap
import time
import wsgiref.handlers
from base64 import b64encode
from datetime import datetime
from os import path
from queue import Queue
from unittest import mock
@@ -775,8 +774,7 @@ def test_too_many_requests_retry_after_int_delay(app, capsys, status):
@pytest.mark.sphinx('linkcheck', testroot='linkcheck-localserver', freshenv=True)
def test_too_many_requests_retry_after_HTTP_date(app, capsys):
now = datetime.now().timetuple()
retry_after = wsgiref.handlers.format_date_time(time.mktime(now))
retry_after = wsgiref.handlers.format_date_time(time.time())
with http_server(make_retry_after_handler([(429, retry_after), (200, None)])):
app.build()
content = (app.outdir / 'output.json').read_text(encoding='utf8')