Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Sphinx for openSUSE:Factory 
checked in at 2021-04-19 21:05:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Sphinx (Old)
 and      /work/SRC/openSUSE:Factory/.python-Sphinx.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Sphinx"

Mon Apr 19 21:05:42 2021 rev:74 rq:885911 version:3.5.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Sphinx/python-Sphinx.changes      
2021-04-08 21:02:24.205916055 +0200
+++ /work/SRC/openSUSE:Factory/.python-Sphinx.new.12324/python-Sphinx.changes   
2021-04-19 21:05:53.876020250 +0200
@@ -1,0 +2,9 @@
+Fri Apr 16 07:02:35 UTC 2021 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 3.5.4:
+  * #9071: Restrict docutils to 0.16
+  * #9078: autodoc: Async staticmethods and classmethods are considered as non
+    async coroutine-functions with Python3.10
+  * #8870, #9001, #9051: html theme: The style are not applied with 
docutils-0.17
+
+-------------------------------------------------------------------

Old:
----
  Sphinx-3.5.3.tar.gz
  Sphinx-3.5.3.tar.gz.asc

New:
----
  Sphinx-3.5.4.tar.gz
  Sphinx-3.5.4.tar.gz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Sphinx.spec ++++++
--- /var/tmp/diff_new_pack.SaocdF/_old  2021-04-19 21:05:54.340020944 +0200
+++ /var/tmp/diff_new_pack.SaocdF/_new  2021-04-19 21:05:54.340020944 +0200
@@ -28,7 +28,7 @@
 %endif
 %define skip_python2 1
 Name:           python-Sphinx%{psuffix}
-Version:        3.5.3
+Version:        3.5.4
 Release:        0
 Summary:        Python documentation generator
 License:        BSD-2-Clause

++++++ Sphinx-3.5.3.tar.gz -> Sphinx-3.5.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/CHANGES new/Sphinx-3.5.4/CHANGES
--- old/Sphinx-3.5.3/CHANGES    2021-03-20 15:03:00.000000000 +0100
+++ new/Sphinx-3.5.4/CHANGES    2021-04-11 13:26:52.000000000 +0200
@@ -1,3 +1,22 @@
+Release 3.5.4 (released Apr 11, 2021)
+=====================================
+
+Dependencies
+------------
+
+* #9071: Restrict docutils to 0.16
+
+Bugs fixed
+----------
+
+* #9078: autodoc: Async staticmethods and classmethods are considered as non
+  async coroutine-functions with Python3.10
+* #8870, #9001, #9051: html theme: The style are not applied with docutils-0.17
+
+  - toctree captions
+  - The content of ``sidebar`` directive
+  - figures
+
 Release 3.5.3 (released Mar 20, 2021)
 =====================================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/PKG-INFO new/Sphinx-3.5.4/PKG-INFO
--- old/Sphinx-3.5.3/PKG-INFO   2021-03-20 15:03:27.273869300 +0100
+++ new/Sphinx-3.5.4/PKG-INFO   2021-04-11 13:27:26.356484200 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: Sphinx
-Version: 3.5.3
+Version: 3.5.4
 Summary: Python documentation generator
 Home-page: http://sphinx-doc.org/
 Author: Georg Brandl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/Sphinx.egg-info/PKG-INFO 
new/Sphinx-3.5.4/Sphinx.egg-info/PKG-INFO
--- old/Sphinx-3.5.3/Sphinx.egg-info/PKG-INFO   2021-03-20 15:03:25.000000000 
+0100
+++ new/Sphinx-3.5.4/Sphinx.egg-info/PKG-INFO   2021-04-11 13:27:24.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: Sphinx
-Version: 3.5.3
+Version: 3.5.4
 Summary: Python documentation generator
 Home-page: http://sphinx-doc.org/
 Author: Georg Brandl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/Sphinx.egg-info/requires.txt 
new/Sphinx-3.5.4/Sphinx.egg-info/requires.txt
--- old/Sphinx-3.5.3/Sphinx.egg-info/requires.txt       2021-03-20 
15:03:25.000000000 +0100
+++ new/Sphinx-3.5.4/Sphinx.egg-info/requires.txt       2021-04-11 
13:27:24.000000000 +0200
@@ -6,7 +6,7 @@
 sphinxcontrib-qthelp
 Jinja2>=2.3
 Pygments>=2.0
-docutils>=0.12
+docutils<0.17,>=0.12
 snowballstemmer>=1.1
 babel>=1.3
 alabaster<0.8,>=0.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/setup.py new/Sphinx-3.5.4/setup.py
--- old/Sphinx-3.5.3/setup.py   2021-03-20 14:54:40.000000000 +0100
+++ new/Sphinx-3.5.4/setup.py   2021-04-11 12:40:16.000000000 +0200
@@ -23,7 +23,7 @@
     'sphinxcontrib-qthelp',
     'Jinja2>=2.3',
     'Pygments>=2.0',
-    'docutils>=0.12',
+    'docutils>=0.12,<0.17',
     'snowballstemmer>=1.1',
     'babel>=1.3',
     'alabaster>=0.7,<0.8',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/__init__.py 
new/Sphinx-3.5.4/sphinx/__init__.py
--- old/Sphinx-3.5.3/sphinx/__init__.py 2021-03-20 15:03:00.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/__init__.py 2021-04-11 13:26:52.000000000 +0200
@@ -32,8 +32,8 @@
 warnings.filterwarnings('ignore', "'U' mode is deprecated",
                         DeprecationWarning, module='docutils.io')
 
-__version__ = '3.5.3'
-__released__ = '3.5.3'  # used when Sphinx builds its own docs
+__version__ = '3.5.4'
+__released__ = '3.5.4'  # used when Sphinx builds its own docs
 
 #: Version info for better programmatic use.
 #:
@@ -43,7 +43,7 @@
 #:
 #: .. versionadded:: 1.2
 #:    Before version 1.2, check the string ``sphinx.__version__``.
-version_info = (3, 5, 3, 'final', 0)
+version_info = (3, 5, 4, 'final', 0)
 
 package_dir = path.abspath(path.dirname(__file__))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/environment/adapters/toctree.py 
new/Sphinx-3.5.4/sphinx/environment/adapters/toctree.py
--- old/Sphinx-3.5.3/sphinx/environment/adapters/toctree.py     2021-03-20 
14:54:40.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/environment/adapters/toctree.py     2021-04-11 
12:40:16.000000000 +0200
@@ -237,7 +237,7 @@
         newnode = addnodes.compact_paragraph('', '')
         caption = toctree.attributes.get('caption')
         if caption:
-            caption_node = nodes.caption(caption, '', *[nodes.Text(caption)])
+            caption_node = nodes.title(caption, '', *[nodes.Text(caption)])
             caption_node.line = toctree.line
             caption_node.source = toctree.source
             caption_node.rawsource = toctree['rawcaption']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/themes/agogo/static/agogo.css_t 
new/Sphinx-3.5.4/sphinx/themes/agogo/static/agogo.css_t
--- old/Sphinx-3.5.3/sphinx/themes/agogo/static/agogo.css_t     2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/agogo/static/agogo.css_t     2021-04-11 
12:40:16.000000000 +0200
@@ -370,19 +370,25 @@
 
 /* Styles copied from basic theme */
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
     clear: left;
     float: left;
     margin-right: 1em;
 }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
     clear: right;
     float: right;
     margin-left: 1em;
 }
 
-img.align-center, .figure.align-center, object.align-center {
+img.align-center, figure.align-center, .figure.align-center, 
object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+img.align-default, figure.align-default, .figure.align-default {
   display: block;
   margin-left: auto;
   margin-right: auto;
@@ -407,11 +413,13 @@
 table caption span.caption-text {
 }
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* -- search page ----------------------------------------------------------- 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/themes/basic/static/basic.css_t 
new/Sphinx-3.5.4/sphinx/themes/basic/static/basic.css_t
--- old/Sphinx-3.5.3/sphinx/themes/basic/static/basic.css_t     2021-03-20 
14:54:40.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/basic/static/basic.css_t     2021-04-11 
12:40:16.000000000 +0200
@@ -277,25 +277,25 @@
     font-weight: bold;
 }
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, figure.align-left, .figure.align-left, object.align-left {
     clear: left;
     float: left;
     margin-right: 1em;
 }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, figure.align-right, .figure.align-right, object.align-right {
     clear: right;
     float: right;
     margin-left: 1em;
 }
 
-img.align-center, .figure.align-center, object.align-center {
+img.align-center, figure.align-center, .figure.align-center, 
object.align-center {
   display: block;
   margin-left: auto;
   margin-right: auto;
 }
 
-img.align-default, .figure.align-default {
+img.align-default, figure.align-default, .figure.align-default {
   display: block;
   margin-left: auto;
   margin-right: auto;
@@ -319,7 +319,8 @@
 
 /* -- sidebars -------------------------------------------------------------- 
*/
 
-div.sidebar {
+div.sidebar,
+aside.sidebar {
     margin: 0 0 0.5em 1em;
     border: 1px solid #ddb;
     padding: 7px;
@@ -377,12 +378,14 @@
 /* -- content of sidebars/topics/admonitions -------------------------------- 
*/
 
 div.sidebar > :last-child,
+aside.sidebar > :last-child,
 div.topic > :last-child,
 div.admonition > :last-child {
     margin-bottom: 0;
 }
 
 div.sidebar::after,
+aside.sidebar::after,
 div.topic::after,
 div.admonition::after,
 blockquote::after {
@@ -455,20 +458,22 @@
 
 /* -- figures --------------------------------------------------------------- 
*/
 
-div.figure {
+div.figure, figure {
     margin: 0.5em;
     padding: 0.5em;
 }
 
-div.figure p.caption {
+div.figure p.caption, figcaption {
     padding: 0.3em;
 }
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* -- field list styles ----------------------------------------------------- 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/themes/epub/static/epub.css_t 
new/Sphinx-3.5.4/sphinx/themes/epub/static/epub.css_t
--- old/Sphinx-3.5.3/sphinx/themes/epub/static/epub.css_t       2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/epub/static/epub.css_t       2021-04-11 
12:40:16.000000000 +0200
@@ -325,11 +325,13 @@
 
 /* -- figures --------------------------------------------------------------- 
*/
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* -- field list styles ----------------------------------------------------- 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/themes/nonav/static/nonav.css 
new/Sphinx-3.5.4/sphinx/themes/nonav/static/nonav.css
--- old/Sphinx-3.5.3/sphinx/themes/nonav/static/nonav.css       2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/nonav/static/nonav.css       2021-04-11 
12:40:16.000000000 +0200
@@ -314,11 +314,13 @@
 
 /* -- figures --------------------------------------------------------------- 
*/
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* -- field list styles ----------------------------------------------------- 
*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sphinx-3.5.3/sphinx/themes/scrolls/static/scrolls.css_t 
new/Sphinx-3.5.4/sphinx/themes/scrolls/static/scrolls.css_t
--- old/Sphinx-3.5.3/sphinx/themes/scrolls/static/scrolls.css_t 2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/scrolls/static/scrolls.css_t 2021-04-11 
12:40:16.000000000 +0200
@@ -478,11 +478,13 @@
     padding: 0 5px;
 }
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* math display */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sphinx-3.5.3/sphinx/themes/traditional/static/traditional.css_t 
new/Sphinx-3.5.4/sphinx/themes/traditional/static/traditional.css_t
--- old/Sphinx-3.5.3/sphinx/themes/traditional/static/traditional.css_t 
2021-03-16 17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/sphinx/themes/traditional/static/traditional.css_t 
2021-04-11 12:40:16.000000000 +0200
@@ -743,11 +743,13 @@
     margin: 0;
 }
 
-div.figure p.caption span.caption-number {
+div.figure p.caption span.caption-number,
+figcaption span.caption-number {
     font-style: italic;
 }
 
-div.figure p.caption span.caption-text {
+div.figure p.caption span.caption-text,
+figcaption span.caption-text {
 }
 
 /* :::: MATH DISPLAY :::: */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/util/inspect.py 
new/Sphinx-3.5.4/sphinx/util/inspect.py
--- old/Sphinx-3.5.3/sphinx/util/inspect.py     2021-03-20 14:54:40.000000000 
+0100
+++ new/Sphinx-3.5.4/sphinx/util/inspect.py     2021-04-11 12:40:16.000000000 
+0200
@@ -352,8 +352,18 @@
 
 def iscoroutinefunction(obj: Any) -> bool:
     """Check if the object is coroutine-function."""
-    # unwrap staticmethod, classmethod and partial (except wrappers)
-    obj = unwrap_all(obj, stop=lambda o: hasattr(o, '__wrapped__'))
+    def iswrappedcoroutine(obj: Any) -> bool:
+        """Check if the object is wrapped coroutine-function."""
+        if isstaticmethod(obj) or isclassmethod(obj) or ispartial(obj):
+            # staticmethod, classmethod and partial method are not a wrapped 
coroutine-function
+            # Note: Since 3.10, staticmethod and classmethod becomes a kind of 
wrappers
+            return False
+        elif hasattr(obj, '__wrapped__'):
+            return True
+        else:
+            return False
+
+    obj = unwrap_all(obj, stop=iswrappedcoroutine)
     if hasattr(obj, '__code__') and inspect.iscoroutinefunction(obj):
         # check obj.__code__ because iscoroutinefunction() crashes for custom 
method-like
         # objects (see https://github.com/sphinx-doc/sphinx/issues/6605)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/writers/html.py 
new/Sphinx-3.5.4/sphinx/writers/html.py
--- old/Sphinx-3.5.3/sphinx/writers/html.py     2021-03-20 14:54:40.000000000 
+0100
+++ new/Sphinx-3.5.4/sphinx/writers/html.py     2021-04-11 12:40:16.000000000 
+0200
@@ -404,7 +404,12 @@
 
     # overwritten
     def visit_title(self, node: Element) -> None:
-        super().visit_title(node)
+        if isinstance(node.parent, addnodes.compact_paragraph) and 
node.parent.get('toctree'):
+            self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
+            self.body.append('<span class="caption-text">')
+            self.context.append('</span></p>\n')
+        else:
+            super().visit_title(node)
         self.add_secnumber(node)
         self.add_fignumber(node.parent)
         if isinstance(node.parent, nodes.table):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/sphinx/writers/html5.py 
new/Sphinx-3.5.4/sphinx/writers/html5.py
--- old/Sphinx-3.5.3/sphinx/writers/html5.py    2021-03-20 14:54:40.000000000 
+0100
+++ new/Sphinx-3.5.4/sphinx/writers/html5.py    2021-04-11 12:40:16.000000000 
+0200
@@ -355,7 +355,12 @@
 
     # overwritten
     def visit_title(self, node: Element) -> None:
-        super().visit_title(node)
+        if isinstance(node.parent, addnodes.compact_paragraph) and 
node.parent.get('toctree'):
+            self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
+            self.body.append('<span class="caption-text">')
+            self.context.append('</span></p>\n')
+        else:
+            super().visit_title(node)
         self.add_secnumber(node)
         self.add_fignumber(node.parent)
         if isinstance(node.parent, nodes.table):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/roots/test-linkcheck/links.txt 
new/Sphinx-3.5.4/tests/roots/test-linkcheck/links.txt
--- old/Sphinx-3.5.3/tests/roots/test-linkcheck/links.txt       2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/tests/roots/test-linkcheck/links.txt       2021-04-10 
05:24:58.000000000 +0200
@@ -2,14 +2,14 @@
 
 * Also, if there is a `default namespace 
<https://www.w3.org/TR/2006/REC-xml-names-20060816/#defaulting>`__, that full 
URI gets prepended to all of the non-prefixed tags.
 
-* The URL having anchor: 
`http://www.sphinx-doc.org/en/1.4.8/tutorial.html#install-sphinx`_
+* The URL having anchor: 
`https://www.sphinx-doc.org/en/master/usage/installation.html#overview`_
 
 Some additional anchors to exercise ignore code
 
 * `Example Bar invalid <https://www.google.com/#!bar>`_
 * `Example Bar invalid <https://www.google.com#!bar>`_ tests that default 
ignore anchor of #! does not need to be prefixed with /
 * `Example Bar invalid <https://www.google.com/#top>`_
-* `Example anchor invalid 
<http://www.sphinx-doc.org/en/1.7/intro.html#does-not-exist>`_
+* `Example anchor invalid 
<http://www.sphinx-doc.org/en/master/index.html#does-not-exist>`_
 * `Complete nonsense <https://localhost:7777/doesnotexist>`_
 * `Example valid local file <conf.py>`_
 * `Example invalid local file <path/to/notfound>`_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_build_html.py 
new/Sphinx-3.5.4/tests/test_build_html.py
--- old/Sphinx-3.5.3/tests/test_build_html.py   2021-03-20 14:54:40.000000000 
+0100
+++ new/Sphinx-3.5.4/tests/test_build_html.py   2021-04-11 12:40:16.000000000 
+0200
@@ -24,6 +24,12 @@
 from sphinx.util import docutils, md5
 from sphinx.util.inventory import InventoryFile
 
+if docutils.__version_info__ < (0, 17):
+    FIGURE_CAPTION = ".//div[@class='figure 
align-default']/p[@class='caption']"
+else:
+    FIGURE_CAPTION = ".//figure/figcaption/p"
+
+
 ENV_WARNINGS = """\
 %(root)s/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:\\d+: \
 WARNING: Explicit markup ends without a blank line; unexpected unindent.
@@ -603,8 +609,7 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", None, True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
         (".//table/caption/span[@class='caption-number']", None, True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", None, True),
@@ -620,22 +625,19 @@
         (".//li/p/a/span", '^Sect.1 Foo$', True),
     ],
     'foo.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", None, True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
         (".//table/caption/span[@class='caption-number']", None, True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", None, True),
     ],
     'bar.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", None, True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
         (".//table/caption/span[@class='caption-number']", None, True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", None, True),
     ],
     'baz.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", None, True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
         (".//table/caption/span[@class='caption-number']", None, True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", None, True),
@@ -671,10 +673,8 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 9 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 10 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 9 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 10 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 9 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -695,14 +695,10 @@
         (".//li/p/code/span", '^Sect.{number}$', True),
     ],
     'foo.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 3 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 4 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -721,12 +717,9 @@
          "span[@class='caption-number']", '^Listing 4 $', True),
     ],
     'bar.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 5 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 7 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 8 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 5 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 7 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 8 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 5 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -741,8 +734,7 @@
          "span[@class='caption-number']", '^Listing 8 $', True),
     ],
     'baz.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 6 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 6 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 6 $', True),
         (".//div[@class='code-block-caption']/"
@@ -779,10 +771,8 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -803,14 +793,10 @@
         (".//li/p/a/span", '^Sect.1 Foo$', True),
     ],
     'foo.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.2 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.2 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -829,12 +815,9 @@
          "span[@class='caption-number']", '^Listing 1.4 $', True),
     ],
     'bar.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -849,8 +832,7 @@
          "span[@class='caption-number']", '^Listing 2.4 $', True),
     ],
     'baz.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.2 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.2 $', True),
         (".//div[@class='code-block-caption']/"
@@ -884,10 +866,8 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:2 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Tab_1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -908,14 +888,10 @@
         (".//li/p/a/span", '^Sect.1 Foo$', True),
     ],
     'foo.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:1.2 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:1.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:1.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:1.2 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:1.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:1.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Tab_1.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -934,12 +910,9 @@
          "span[@class='caption-number']", '^Code-1.4 $', True),
     ],
     'bar.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:2.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:2.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:2.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:2.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:2.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:2.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Tab_2.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -954,8 +927,7 @@
          "span[@class='caption-number']", '^Code-2.4 $', True),
     ],
     'baz.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Figure:2.2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Figure:2.2 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Tab_2.2 $', True),
         (".//div[@class='code-block-caption']/"
@@ -990,10 +962,8 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1014,14 +984,10 @@
         (".//li/p/a/span", '^Sect.1 Foo$', True),
     ],
     'foo.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.1.2 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.2.1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1.2 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.2.1 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1040,12 +1006,9 @@
          "span[@class='caption-number']", '^Listing 1.2.1 $', True),
     ],
     'bar.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.1.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.2.1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.2.1 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.1.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1060,8 +1023,7 @@
          "span[@class='caption-number']", '^Listing 2.2.1 $', True),
     ],
     'baz.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.1.2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1.2 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.1.2 $', True),
         (".//div[@class='code-block-caption']/"
@@ -1081,10 +1043,8 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2 $', True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1103,14 +1063,10 @@
         (".//li/p/a/span", '^Section.2.1$', True),
         (".//li/p/a/span", '^Fig.1 should be Fig.1$', True),
         (".//li/p/a/span", '^Sect.1 Foo$', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.2 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 1.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.2 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 1.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1127,12 +1083,9 @@
          "span[@class='caption-number']", '^Listing 1.3 $', True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", '^Listing 1.4 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.1 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.3 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.4 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.3 $', 
True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.4 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.1 $', True),
         (".//table/caption/span[@class='caption-number']",
@@ -1145,8 +1098,7 @@
          "span[@class='caption-number']", '^Listing 2.3 $', True),
         (".//div[@class='code-block-caption']/"
          "span[@class='caption-number']", '^Listing 2.4 $', True),
-        (".//div[@class='figure align-default']/p[@class='caption']/"
-         "span[@class='caption-number']", '^Fig. 2.2 $', True),
+        (FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.2 $', 
True),
         (".//table/caption/span[@class='caption-number']",
          '^Table 2.2 $', True),
         (".//div[@class='code-block-caption']/"
@@ -1164,12 +1116,9 @@
 
 @pytest.mark.parametrize("fname,expect", flat_dict({
     'index.html': [
-        (".//div[@class='figure align-default']/p[@class='caption']"
-         "/span[@class='caption-number']", "Fig. 1", True),
-        (".//div[@class='figure align-default']/p[@class='caption']"
-         "/span[@class='caption-number']", "Fig. 2", True),
-        (".//div[@class='figure align-default']/p[@class='caption']"
-         "/span[@class='caption-number']", "Fig. 3", True),
+        (FIGURE_CAPTION + "//span[@class='caption-number']", "Fig. 1", True),
+        (FIGURE_CAPTION + "//span[@class='caption-number']", "Fig. 2", True),
+        (FIGURE_CAPTION + "//span[@class='caption-number']", "Fig. 3", True),
         (".//div//span[@class='caption-number']", "No.1 ", True),
         (".//div//span[@class='caption-number']", "No.2 ", True),
         (".//li/p/a/span", 'Fig. 1', True),
@@ -1332,9 +1281,14 @@
 def test_html_anchor_for_figure(app):
     app.builder.build_all()
     content = (app.outdir / 'index.html').read_text()
-    assert ('<p class="caption"><span class="caption-text">The caption of 
pic</span>'
-            '<a class="headerlink" href="#id1" title="Permalink to this 
image">??</a></p>'
-            in content)
+    if docutils.__version_info__ < (0, 17):
+        assert ('<p class="caption"><span class="caption-text">The caption of 
pic</span>'
+                '<a class="headerlink" href="#id1" title="Permalink to this 
image">??</a></p>'
+                in content)
+    else:
+        assert ('<figcaption>\n<p><span class="caption-text">The caption of 
pic</span>'
+                '<a class="headerlink" href="#id1" title="Permalink to this 
image">??</a></p>\n</figcaption>'
+                in content)
 
 
 @pytest.mark.sphinx('html', testroot='directives-raw')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_build_linkcheck.py 
new/Sphinx-3.5.4/tests/test_build_linkcheck.py
--- old/Sphinx-3.5.3/tests/test_build_linkcheck.py      2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/tests/test_build_linkcheck.py      2021-04-10 
05:24:58.000000000 +0200
@@ -97,7 +97,7 @@
     assert "Anchor 'top' not found" == \
         rowsby["https://www.google.com/#top"]["info";]
     assert "Anchor 'does-not-exist' not found" == \
-        
rowsby["http://www.sphinx-doc.org/en/1.7/intro.html#does-not-exist"]["info";]
+        
rowsby["http://www.sphinx-doc.org/en/master/index.html#does-not-exist"]["info";]
     # images should fail
     assert "Not Found for url: https://www.google.com/image.png"; in \
         rowsby["https://www.google.com/image.png"]["info";]
@@ -108,7 +108,7 @@
     confoverrides={'linkcheck_anchors_ignore': ["^!", "^top$"],
                    'linkcheck_ignore': [
                        'https://localhost:7777/doesnotexist',
-                       'http://www.sphinx-doc.org/en/1.7/intro.html#',
+                       'http://www.sphinx-doc.org/en/master/index.html#',
                        'https://www.google.com/image.png',
                        'https://www.google.com/image2.png',
                        'path/to/notfound']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_environment_toctree.py 
new/Sphinx-3.5.4/tests/test_environment_toctree.py
--- old/Sphinx-3.5.3/tests/test_environment_toctree.py  2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/tests/test_environment_toctree.py  2021-04-10 
19:17:55.000000000 +0200
@@ -10,7 +10,7 @@
 
 import pytest
 from docutils import nodes
-from docutils.nodes import bullet_list, caption, comment, list_item, reference
+from docutils.nodes import bullet_list, comment, list_item, reference, title
 
 from sphinx import addnodes
 from sphinx.addnodes import compact_paragraph, only
@@ -211,7 +211,7 @@
     app.build()
     toctree = TocTree(app.env).get_toctree_for('index', app.builder, 
collapse=False)
     assert_node(toctree,
-                [compact_paragraph, ([caption, "Table of Contents"],
+                [compact_paragraph, ([title, "Table of Contents"],
                                      bullet_list,
                                      bullet_list,
                                      bullet_list)])
@@ -251,7 +251,7 @@
     app.build()
     toctree = TocTree(app.env).get_toctree_for('index', app.builder, 
collapse=True)
     assert_node(toctree,
-                [compact_paragraph, ([caption, "Table of Contents"],
+                [compact_paragraph, ([title, "Table of Contents"],
                                      bullet_list,
                                      bullet_list,
                                      bullet_list)])
@@ -283,7 +283,7 @@
     toctree = TocTree(app.env).get_toctree_for('index', app.builder,
                                                collapse=False, maxdepth=3)
     assert_node(toctree,
-                [compact_paragraph, ([caption, "Table of Contents"],
+                [compact_paragraph, ([title, "Table of Contents"],
                                      bullet_list,
                                      bullet_list,
                                      bullet_list)])
@@ -329,7 +329,7 @@
     toctree = TocTree(app.env).get_toctree_for('index', app.builder, 
collapse=False,
                                                includehidden=False)
     assert_node(toctree,
-                [compact_paragraph, ([caption, "Table of Contents"],
+                [compact_paragraph, ([title, "Table of Contents"],
                                      bullet_list,
                                      bullet_list)])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_ext_autodoc.py 
new/Sphinx-3.5.4/tests/test_ext_autodoc.py
--- old/Sphinx-3.5.3/tests/test_ext_autodoc.py  2021-03-20 14:54:40.000000000 
+0100
+++ new/Sphinx-3.5.4/tests/test_ext_autodoc.py  2021-04-11 12:40:16.000000000 
+0200
@@ -1373,9 +1373,16 @@
 def test_enum_class(app):
     options = {"members": None}
     actual = do_autodoc(app, 'class', 'target.enums.EnumCls', options)
+
+    if sys.version_info < (3, 10):
+        sig = '(value)'
+    else:
+        sig = ('(value, names=None, *, module=None, qualname=None, type=None, 
start=1, '
+               'boundary=None)')
+
     assert list(actual) == [
         '',
-        '.. py:class:: EnumCls(value)',
+        '.. py:class:: EnumCls%s' % sig,
         '   :module: target.enums',
         '',
         '   this is enum class',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_ext_autosummary.py 
new/Sphinx-3.5.4/tests/test_ext_autosummary.py
--- old/Sphinx-3.5.3/tests/test_ext_autosummary.py      2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/tests/test_ext_autosummary.py      2021-04-10 
05:24:58.000000000 +0200
@@ -74,7 +74,7 @@
 
 
 def test_extract_summary(capsys):
-    settings = Mock(language_code='',
+    settings = Mock(language_code='en',
                     id_prefix='',
                     auto_id_prefix='',
                     pep_reference=False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_ext_graphviz.py 
new/Sphinx-3.5.4/tests/test_ext_graphviz.py
--- old/Sphinx-3.5.3/tests/test_ext_graphviz.py 2021-03-16 17:35:47.000000000 
+0100
+++ new/Sphinx-3.5.4/tests/test_ext_graphviz.py 2021-04-10 05:24:58.000000000 
+0200
@@ -13,6 +13,7 @@
 import pytest
 
 from sphinx.ext.graphviz import ClickableMapDefinition
+from sphinx.util import docutils
 
 
 @pytest.mark.sphinx('html', testroot='ext-graphviz')
@@ -21,9 +22,15 @@
     app.builder.build_all()
 
     content = (app.outdir / 'index.html').read_text()
-    html = (r'<div class="figure align-default" .*?>\s*'
-            r'<div class="graphviz"><img .*?/></div>\s*<p class="caption">'
-            r'<span class="caption-text">caption of 
graph</span>.*</p>\s*</div>')
+    if docutils.__version_info__ < (0, 17):
+        html = (r'<div class="figure align-default" .*?>\s*'
+                r'<div class="graphviz"><img .*?/></div>\s*<p class="caption">'
+                r'<span class="caption-text">caption of 
graph</span>.*</p>\s*</div>')
+    else:
+        html = (r'<figure class="align-default" .*?>\s*'
+                r'<div class="graphviz"><img .*?/></div>\s*<figcaption>\s*'
+                r'<p><span class="caption-text">caption of 
graph</span>.*</p>\s*'
+                r'</figcaption>\s*</figure>')
     assert re.search(html, content, re.S)
 
     html = 'Hello <div class="graphviz"><img .*?/></div>\n graphviz world'
@@ -33,9 +40,15 @@
             'class="graphviz neato-graph" />')
     assert re.search(html, content, re.S)
 
-    html = (r'<div class="figure align-right" .*?>\s*'
-            r'<div class="graphviz"><img .*?/></div>\s*<p class="caption">'
-            r'<span class="caption-text">on 
<em>right</em></span>.*</p>\s*</div>')
+    if docutils.__version_info__ < (0, 17):
+        html = (r'<div class="figure align-right" .*?>\s*'
+                r'<div class="graphviz"><img .*?/></div>\s*<p class="caption">'
+                r'<span class="caption-text">on 
<em>right</em></span>.*</p>\s*</div>')
+    else:
+        html = (r'<figure class="align-right" .*?>\s*'
+                r'<div class="graphviz"><img .*?/></div>\s*<figcaption>\s*'
+                r'<p><span class="caption-text">on 
<em>right</em></span>.*</p>\s*'
+                r'</figcaption>\s*</figure>')
     assert re.search(html, content, re.S)
 
     html = (r'<div align=\"center\" class=\"align-center\">'
@@ -53,13 +66,24 @@
 
     content = (app.outdir / 'index.html').read_text()
 
-    html = (r'<div class=\"figure align-default\" .*?>\n'
-            r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
-            r'\s*<p class=\"warning\">digraph foo {\n'
-            r'bar -&gt; baz\n'
-            r'}</p></object></div>\n'
-            r'<p class=\"caption\"><span class=\"caption-text\">'
-            r'caption of graph</span>.*</p>\n</div>')
+    if docutils.__version_info__ < (0, 17):
+        html = (r'<div class=\"figure align-default\" .*?>\n'
+                r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
+                r'\s*<p class=\"warning\">digraph foo {\n'
+                r'bar -&gt; baz\n'
+                r'}</p></object></div>\n'
+                r'<p class=\"caption\"><span class=\"caption-text\">'
+                r'caption of graph</span>.*</p>\n</div>')
+    else:
+        html = (r'<figure class=\"align-default\" .*?>\n'
+                r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
+                r'\s*<p class=\"warning\">digraph foo {\n'
+                r'bar -&gt; baz\n'
+                r'}</p></object></div>\n'
+                r'<figcaption>\n'
+                r'<p><span class=\"caption-text\">caption of 
graph</span>.*</p>\n'
+                r'</figcaption>\n'
+                r'</figure>')
     assert re.search(html, content, re.S)
 
     html = (r'Hello <div class="graphviz"><object.*>\n'
@@ -67,14 +91,25 @@
             r' graphviz world')
     assert re.search(html, content, re.S)
 
-    html = (r'<div class=\"figure align-right\" .*\>\n'
-            r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
-            r'\s*<p class=\"warning\">digraph bar {\n'
-            r'foo -&gt; bar\n'
-            r'}</p></object></div>\n'
-            r'<p class=\"caption\"><span class=\"caption-text\">'
-            r'on <em>right</em></span>.*</p>\n'
-            r'</div>')
+    if docutils.__version_info__ < (0, 17):
+        html = (r'<div class=\"figure align-right\" .*\>\n'
+                r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
+                r'\s*<p class=\"warning\">digraph bar {\n'
+                r'foo -&gt; bar\n'
+                r'}</p></object></div>\n'
+                r'<p class=\"caption\"><span class=\"caption-text\">'
+                r'on <em>right</em></span>.*</p>\n'
+                r'</div>')
+    else:
+        html = (r'<figure class=\"align-right\" .*\>\n'
+                r'<div class="graphviz"><object data=\".*\.svg\".*>\n'
+                r'\s*<p class=\"warning\">digraph bar {\n'
+                r'foo -&gt; bar\n'
+                r'}</p></object></div>\n'
+                r'<figcaption>\n'
+                r'<p><span class=\"caption-text\">on 
<em>right</em></span>.*</p>\n'
+                r'</figcaption>\n'
+                r'</figure>')
     assert re.search(html, content, re.S)
 
     html = (r'<div align=\"center\" class=\"align-center\">'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_ext_inheritance_diagram.py 
new/Sphinx-3.5.4/tests/test_ext_inheritance_diagram.py
--- old/Sphinx-3.5.3/tests/test_ext_inheritance_diagram.py      2021-03-16 
17:35:47.000000000 +0100
+++ new/Sphinx-3.5.4/tests/test_ext_inheritance_diagram.py      2021-04-10 
05:24:58.000000000 +0200
@@ -16,6 +16,7 @@
 
 from sphinx.ext.inheritance_diagram import (InheritanceDiagram, 
InheritanceException,
                                             import_classes)
+from sphinx.util import docutils
 
 
 @pytest.mark.sphinx(buildername="html", testroot="inheritance")
@@ -147,12 +148,20 @@
 
     content = (app.outdir / 'index.html').read_text()
 
-    pattern = ('<div class="figure align-default" id="id1">\n'
-               '<div class="graphviz">'
-               '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
-               'class="inheritance graphviz" /></div>\n<p class="caption">'
-               '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
-               'title="Permalink to this image">\xb6</a></p>')
+    if docutils.__version_info__ < (0, 17):
+        pattern = ('<div class="figure align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
+                   'class="inheritance graphviz" /></div>\n<p class="caption">'
+                   '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
+                   'title="Permalink to this image">\xb6</a></p>\n</div>\n')
+    else:
+        pattern = ('<figure class="align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
+                   'class="inheritance graphviz" /></div>\n<figcaption>\n<p>'
+                   '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
+                   'title="Permalink to this 
image">\xb6</a></p>\n</figcaption>\n</figure>\n')
     assert re.search(pattern, content, re.M)
 
 
@@ -164,14 +173,25 @@
 
     content = (app.outdir / 'index.html').read_text()
 
-    pattern = ('<div class="figure align-default" id="id1">\n'
-               '<div class="graphviz">'
-               '<object data="_images/inheritance-\\w+.svg" '
-               'type="image/svg\\+xml" class="inheritance graphviz">\n'
-               '<p class=\"warning\">Inheritance diagram of test.Foo</p>'
-               '</object></div>\n<p class="caption"><span 
class="caption-text">'
-               'Test Foo!</span><a class="headerlink" href="#id1" '
-               'title="Permalink to this image">\xb6</a></p>')
+    if docutils.__version_info__ < (0, 17):
+        pattern = ('<div class="figure align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<object data="_images/inheritance-\\w+.svg" '
+                   'type="image/svg\\+xml" class="inheritance graphviz">\n'
+                   '<p class=\"warning\">Inheritance diagram of test.Foo</p>'
+                   '</object></div>\n<p class="caption"><span 
class="caption-text">'
+                   'Test Foo!</span><a class="headerlink" href="#id1" '
+                   'title="Permalink to this image">\xb6</a></p>\n</div>\n')
+    else:
+        pattern = ('<figure class="align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<object data="_images/inheritance-\\w+.svg" '
+                   'type="image/svg\\+xml" class="inheritance graphviz">\n'
+                   '<p class=\"warning\">Inheritance diagram of test.Foo</p>'
+                   '</object></div>\n<figcaption>\n<p><span 
class="caption-text">'
+                   'Test Foo!</span><a class="headerlink" href="#id1" '
+                   'title="Permalink to this 
image">\xb6</a></p>\n</figcaption>\n</figure>\n')
+
     assert re.search(pattern, content, re.M)
 
 
@@ -204,12 +224,20 @@
 
     content = (app.outdir / 'index.html').read_text()
 
-    pattern = ('<div class="figure align-default" id="id1">\n'
-               '<div class="graphviz">'
-               '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
-               'class="inheritance graphviz" /></div>\n<p class="caption">'
-               '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
-               'title="Permalink to this image">\xb6</a></p>')
+    if docutils.__version_info__ < (0, 17):
+        pattern = ('<div class="figure align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
+                   'class="inheritance graphviz" /></div>\n<p class="caption">'
+                   '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
+                   'title="Permalink to this image">\xb6</a></p>\n</div>\n')
+    else:
+        pattern = ('<figure class="align-default" id="id1">\n'
+                   '<div class="graphviz">'
+                   '<img src="_images/inheritance-\\w+.png" alt="Inheritance 
diagram of test.Foo" '
+                   'class="inheritance graphviz" /></div>\n<figcaption>\n<p>'
+                   '<span class="caption-text">Test Foo!</span><a 
class="headerlink" href="#id1" '
+                   'title="Permalink to this 
image">\xb6</a></p>\n</figcaption>\n</figure>\n')
     assert re.search(pattern, content, re.M)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tests/test_intl.py 
new/Sphinx-3.5.4/tests/test_intl.py
--- old/Sphinx-3.5.3/tests/test_intl.py 2021-03-20 14:54:40.000000000 +0100
+++ new/Sphinx-3.5.4/tests/test_intl.py 2021-04-11 12:40:16.000000000 +0200
@@ -20,6 +20,7 @@
 from sphinx import locale
 from sphinx.testing.util import (assert_node, assert_not_re_search, 
assert_re_search,
                                  assert_startswith, etree_parse, path, 
strip_escseq)
+from sphinx.util import docutils
 
 sphinx_intl = pytest.mark.sphinx(
     testroot='intl',
@@ -1083,8 +1084,12 @@
     result = (app.outdir / 'raw.html').read_text()
 
     # raw block should not be translated
-    expected_expr = """<iframe src="http://sphinx-doc.org";></iframe></div>"""
-    assert_count(expected_expr, result, 1)
+    if docutils.__version_info__ < (0, 17):
+        expected_expr = """<iframe 
src="http://sphinx-doc.org";></iframe></div>"""
+        assert_count(expected_expr, result, 1)
+    else:
+        expected_expr = """<iframe 
src="http://sphinx-doc.org";></iframe></section>"""
+        assert_count(expected_expr, result, 1)
 
     # [figure.txt]
 
@@ -1157,8 +1162,12 @@
     result = (app.outdir / 'raw.html').read_text()
 
     # raw block should be translated
-    expected_expr = """<iframe src="HTTP://SPHINX-DOC.ORG"></iframe></div>"""
-    assert_count(expected_expr, result, 1)
+    if docutils.__version_info__ < (0, 17):
+        expected_expr = """<iframe 
src="HTTP://SPHINX-DOC.ORG"></iframe></div>"""
+        assert_count(expected_expr, result, 1)
+    else:
+        expected_expr = """<iframe 
src="HTTP://SPHINX-DOC.ORG"></iframe></section>"""
+        assert_count(expected_expr, result, 1)
 
     # [figure.txt]
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sphinx-3.5.3/tox.ini new/Sphinx-3.5.4/tox.ini
--- old/Sphinx-3.5.3/tox.ini    2021-03-20 14:54:40.000000000 +0100
+++ new/Sphinx-3.5.4/tox.ini    2021-04-11 12:40:16.000000000 +0200
@@ -22,6 +22,7 @@
     du14: docutils==0.14
     du15: docutils==0.15
     du16: docutils==0.16
+    du17: docutils==0.17
 extras =
     test
 setenv =

++++++ python3.inv ++++++
Binary files /var/tmp/diff_new_pack.SaocdF/_old and 
/var/tmp/diff_new_pack.SaocdF/_new differ

Reply via email to