Merge pull request #9143 from tk0miya/refactor_linkcheck

refactor: linkcheck: Use attributes of CheckResult in process_result()
This commit is contained in:
Takeshi KOMIYA
2021-05-01 01:30:56 +09:00
committed by GitHub

View File

@@ -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]: