mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge pull request #9143 from tk0miya/refactor_linkcheck
refactor: linkcheck: Use attributes of CheckResult in process_result()
This commit is contained in:
@@ -129,7 +129,7 @@ class CheckExternalLinksBuilder(DummyBuilder):
|
|||||||
|
|
||||||
# create queues and worker threads
|
# create queues and worker threads
|
||||||
self._wqueue: PriorityQueue[CheckRequestType] = PriorityQueue()
|
self._wqueue: PriorityQueue[CheckRequestType] = PriorityQueue()
|
||||||
self._rqueue: Queue = Queue()
|
self._rqueue: Queue[CheckResult] = Queue()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def anchors_ignore(self) -> List[Pattern]:
|
def anchors_ignore(self) -> List[Pattern]:
|
||||||
@@ -228,43 +228,42 @@ class CheckExternalLinksBuilder(DummyBuilder):
|
|||||||
)
|
)
|
||||||
return self._wqueue
|
return self._wqueue
|
||||||
|
|
||||||
def process_result(self, result: Tuple[str, str, int, str, str, int]) -> None:
|
def process_result(self, result: CheckResult) -> None:
|
||||||
uri, docname, lineno, status, info, code = result
|
filename = self.env.doc2path(result.docname, None)
|
||||||
|
linkstat = dict(filename=filename, lineno=result.lineno,
|
||||||
filename = self.env.doc2path(docname, None)
|
status=result.status, code=result.code, uri=result.uri,
|
||||||
linkstat = dict(filename=filename, lineno=lineno,
|
info=result.message)
|
||||||
status=status, code=code, uri=uri,
|
if result.status == 'unchecked':
|
||||||
info=info)
|
|
||||||
if status == 'unchecked':
|
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
return
|
return
|
||||||
if status == 'working' and info == 'old':
|
if result.status == 'working' and result.message == 'old':
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
return
|
return
|
||||||
if lineno:
|
if result.lineno:
|
||||||
logger.info('(%16s: line %4d) ', docname, lineno, nonl=True)
|
logger.info('(%16s: line %4d) ', result.docname, result.lineno, nonl=True)
|
||||||
if status == 'ignored':
|
if result.status == 'ignored':
|
||||||
if info:
|
if result.message:
|
||||||
logger.info(darkgray('-ignored- ') + uri + ': ' + info)
|
logger.info(darkgray('-ignored- ') + result.uri + ': ' + result.message)
|
||||||
else:
|
else:
|
||||||
logger.info(darkgray('-ignored- ') + uri)
|
logger.info(darkgray('-ignored- ') + result.uri)
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
elif status == 'local':
|
elif result.status == 'local':
|
||||||
logger.info(darkgray('-local- ') + uri)
|
logger.info(darkgray('-local- ') + result.uri)
|
||||||
self.write_entry('local', docname, filename, lineno, uri)
|
self.write_entry('local', result.docname, filename, result.lineno, result.uri)
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
elif status == 'working':
|
elif result.status == 'working':
|
||||||
logger.info(darkgreen('ok ') + uri + info)
|
logger.info(darkgreen('ok ') + result.uri + result.message)
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
elif status == 'broken':
|
elif result.status == 'broken':
|
||||||
if self.app.quiet or self.app.warningiserror:
|
if self.app.quiet or self.app.warningiserror:
|
||||||
logger.warning(__('broken link: %s (%s)'), uri, info,
|
logger.warning(__('broken link: %s (%s)'), result.uri, result.message,
|
||||||
location=(filename, lineno))
|
location=(filename, result.lineno))
|
||||||
else:
|
else:
|
||||||
logger.info(red('broken ') + uri + red(' - ' + info))
|
logger.info(red('broken ') + result.uri + red(' - ' + result.message))
|
||||||
self.write_entry('broken', docname, filename, lineno, uri + ': ' + info)
|
self.write_entry('broken', result.docname, filename, result.lineno,
|
||||||
|
result.uri + ': ' + result.message)
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
elif status == 'redirected':
|
elif result.status == 'redirected':
|
||||||
try:
|
try:
|
||||||
text, color = {
|
text, color = {
|
||||||
301: ('permanently', purple),
|
301: ('permanently', purple),
|
||||||
@@ -272,16 +271,17 @@ class CheckExternalLinksBuilder(DummyBuilder):
|
|||||||
303: ('with See Other', purple),
|
303: ('with See Other', purple),
|
||||||
307: ('temporarily', turquoise),
|
307: ('temporarily', turquoise),
|
||||||
308: ('permanently', purple),
|
308: ('permanently', purple),
|
||||||
}[code]
|
}[result.code]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
text, color = ('with unknown code', purple)
|
text, color = ('with unknown code', purple)
|
||||||
linkstat['text'] = text
|
linkstat['text'] = text
|
||||||
logger.info(color('redirect ') + uri + color(' - ' + text + ' to ' + info))
|
logger.info(color('redirect ') + result.uri +
|
||||||
self.write_entry('redirected ' + text, docname, filename,
|
color(' - ' + text + ' to ' + result.message))
|
||||||
lineno, uri + ' to ' + info)
|
self.write_entry('redirected ' + text, result.docname, filename,
|
||||||
|
result.lineno, result.uri + ' to ' + result.message)
|
||||||
self.write_linkstat(linkstat)
|
self.write_linkstat(linkstat)
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unknown status %s." % status)
|
raise ValueError("Unknown status %s." % result.status)
|
||||||
|
|
||||||
def write_entry(self, what: str, docname: str, filename: str, line: int,
|
def write_entry(self, what: str, docname: str, filename: str, line: int,
|
||||||
uri: str) -> None:
|
uri: str) -> None:
|
||||||
@@ -576,7 +576,7 @@ class HyperlinkAvailabilityCheckWorker(Thread):
|
|||||||
if status == 'rate-limited':
|
if status == 'rate-limited':
|
||||||
logger.info(darkgray('-rate limited- ') + uri + darkgray(' | sleeping...'))
|
logger.info(darkgray('-rate limited- ') + uri + darkgray(' | sleeping...'))
|
||||||
else:
|
else:
|
||||||
self.rqueue.put((uri, docname, lineno, status, info, code))
|
self.rqueue.put(CheckResult(uri, docname, lineno, status, info, code))
|
||||||
self.wqueue.task_done()
|
self.wqueue.task_done()
|
||||||
|
|
||||||
def limit_rate(self, response: Response) -> Optional[float]:
|
def limit_rate(self, response: Response) -> Optional[float]:
|
||||||
|
|||||||
Reference in New Issue
Block a user