mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Use `parsedate_tz
` in the linkcheck builder
This commit is contained in:
@@ -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
|
||||
|
@@ -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')
|
||||
|
Reference in New Issue
Block a user