summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--Makefile1
-rw-r--r--sphinx/ext/autodoc.py17
-rw-r--r--sphinx/util/requests.py14
4 files changed, 29 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 77f75a6c5..1167b8de1 100644
--- a/CHANGES
+++ b/CHANGES
@@ -210,6 +210,9 @@ Features added
Bugs fixed
----------
+* #3614: Sphinx crashes with requests-2.5.0
+* #3618: autodoc crashes with tupled arguments
+
Testing
--------
diff --git a/Makefile b/Makefile
index 28a33c8a0..a20df8f39 100644
--- a/Makefile
+++ b/Makefile
@@ -64,6 +64,7 @@ clean-backupfiles:
clean-generated:
find . -name '.DS_Store' -exec rm -f {} +
+ rm -rf Sphinx.egg-info/
rm -rf doc/_build/
rm -f sphinx/pycode/*.pickle
rm -f utils/*3.py*
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py
index 360c13768..58c7317a3 100644
--- a/sphinx/ext/autodoc.py
+++ b/sphinx/ext/autodoc.py
@@ -473,10 +473,19 @@ def formatargspec(function, args, varargs=None, varkw=None, defaults=None,
for i, arg in enumerate(args):
arg_fd = StringIO()
- arg_fd.write(format_arg_with_annotation(arg))
- if defaults and i >= defaults_start:
- arg_fd.write(' = ' if arg in annotations else '=')
- arg_fd.write(object_description(defaults[i - defaults_start])) # type: ignore
+ if isinstance(arg, list):
+ # support tupled arguments list (only for py2): def foo((x, y))
+ arg_fd.write('(')
+ arg_fd.write(format_arg_with_annotation(arg[0]))
+ for param in arg[1:]:
+ arg_fd.write(', ')
+ arg_fd.write(format_arg_with_annotation(param))
+ arg_fd.write(')')
+ else:
+ arg_fd.write(format_arg_with_annotation(arg))
+ if defaults and i >= defaults_start:
+ arg_fd.write(' = ' if arg in annotations else '=')
+ arg_fd.write(object_description(defaults[i - defaults_start])) # type: ignore
formatted.append(arg_fd.getvalue())
if varargs:
diff --git a/sphinx/util/requests.py b/sphinx/util/requests.py
index 3b4b7f8b6..09b7a43b1 100644
--- a/sphinx/util/requests.py
+++ b/sphinx/util/requests.py
@@ -36,6 +36,16 @@ except ImportError:
# for requests < 2.4.0
InsecureRequestWarning = None
+try:
+ from requests.packages.urllib3.exceptions import InsecurePlatformWarning
+except ImportError:
+ try:
+ # for Debian-jessie
+ from urllib3.exceptions import InsecurePlatformWarning
+ except ImportError:
+ # for requests < 2.4.0
+ InsecurePlatformWarning = None
+
# try to load requests[security] (but only if SSL is available)
try:
import ssl
@@ -48,8 +58,8 @@ else:
pkg_resources.VersionConflict):
if not getattr(ssl, 'HAS_SNI', False):
# don't complain on each url processed about the SSL issue
- requests.packages.urllib3.disable_warnings(
- requests.packages.urllib3.exceptions.InsecurePlatformWarning)
+ if InsecurePlatformWarning:
+ requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)
warnings.warn(
'Some links may return broken results due to being unable to '
'check the Server Name Indication (SNI) in the returned SSL cert '