Fix #3008: `linkcheck` builder ignores self-signed certificate URL

This commit is contained in:
Takeshi KOMIYA 2016-10-06 12:46:23 +09:00
parent ce7fea9a35
commit 4c7bec6460
3 changed files with 23 additions and 3 deletions

View File

@ -10,6 +10,8 @@ Incompatible changes
Features added
--------------
* #3008: ``linkcheck`` builder ignores self-signed certificate URL
Bugs fixed
----------

View File

@ -35,7 +35,7 @@ from sphinx.builders import Builder
from sphinx.util import encode_uri
from sphinx.util.console import purple, red, darkgreen, darkgray, \
darkred, turquoise
from sphinx.util.requests import requests, useragent_header
from sphinx.util.requests import requests, useragent_header, is_ssl_error
class AnchorCheckParser(HTMLParser):
@ -152,6 +152,9 @@ class CheckExternalLinksBuilder(Builder):
else:
return 'broken', str(err), 0
except Exception as err:
if is_ssl_error(err):
return 'ignored', str(err), 0
else:
return 'broken', str(err), 0
if response.url.rstrip('/') == req_url.rstrip('/'):
return 'working', '', 0
@ -211,6 +214,9 @@ class CheckExternalLinksBuilder(Builder):
if lineno:
self.info('(line %4d) ' % lineno, nonl=1)
if status == 'ignored':
if info:
self.info(darkgray('-ignored- ') + uri + ': ' + info)
else:
self.info(darkgray('-ignored- ') + uri)
elif status == 'local':
self.info(darkgray('-local- ') + uri)

View File

@ -14,6 +14,7 @@ from __future__ import absolute_import
import requests
import warnings
import pkg_resources
from requests.packages.urllib3.exceptions import SSLError
# try to load requests[security]
try:
@ -41,3 +42,14 @@ except pkg_resources.UnknownExtra:
useragent_header = [('User-Agent',
'Mozilla/5.0 (X11; Linux x86_64; rv:25.0) Gecko/20100101 Firefox/25.0')]
def is_ssl_error(exc):
if isinstance(exc, SSLError):
return True
else:
args = getattr(exc, 'args', [])
if args and isinstance(args[0], SSLError):
return True
else:
return False