https://github.com/python/cpython/commit/88618d2910718cb8a8e420a0083c647654ef577a
commit: 88618d2910718cb8a8e420a0083c647654ef577a
branch: 3.12
author: Miss Islington (bot) <31488909+miss-isling...@users.noreply.github.com>
committer: AA-Turner <9087854+aa-tur...@users.noreply.github.com>
date: 2024-07-19T10:46:37Z
summary:

[3.12] GH-121970: Make ``DeprecatedRemoved`` a subclass of ``VersionChange`` 
(GH-121971) (#122020)

GH-121970: Make ``DeprecatedRemoved`` a subclass of ``VersionChange`` 
(GH-121971)
(cherry picked from commit 898e90c3bef77174f22193b114483b9cd196921a)

Co-authored-by: Adam Turner <9087854+aa-tur...@users.noreply.github.com>

files:
M Doc/tools/extensions/pyspecific.py

diff --git a/Doc/tools/extensions/pyspecific.py 
b/Doc/tools/extensions/pyspecific.py
index 31d5594abd49a6..c50139b7b8329a 100644
--- a/Doc/tools/extensions/pyspecific.py
+++ b/Doc/tools/extensions/pyspecific.py
@@ -15,11 +15,13 @@
 from time import asctime
 from pprint import pformat
 
+import sphinx
 from docutils import nodes
 from docutils.io import StringOutput
 from docutils.utils import new_document, unescape
 from sphinx import addnodes
 from sphinx.builders import Builder
+from sphinx.domains.changeset import VersionChange, versionlabels, 
versionlabel_classes
 from sphinx.domains.python import PyFunction, PyMethod
 from sphinx.errors import NoUri
 from sphinx.locale import _ as sphinx_gettext
@@ -393,56 +395,34 @@ def run(self):
 
 # Support for documenting version of removal in deprecations
 
-class DeprecatedRemoved(SphinxDirective):
-    has_content = True
+class DeprecatedRemoved(VersionChange):
     required_arguments = 2
-    optional_arguments = 1
-    final_argument_whitespace = True
-    option_spec = {}
 
-    _deprecated_label = sphinx_gettext('Deprecated since version {deprecated}, 
will be removed in version {removed}')
-    _removed_label = sphinx_gettext('Deprecated since version {deprecated}, 
removed in version {removed}')
+    _deprecated_label = sphinx_gettext('Deprecated since version %s, will be 
removed in version %s')
+    _removed_label = sphinx_gettext('Deprecated since version %s, removed in 
version %s')
 
     def run(self):
-        node = addnodes.versionmodified()
-        node.document = self.state.document
-        node['type'] = 'deprecated-removed'
-        version = (self.arguments[0], self.arguments[1])
-        node['version'] = version
-        current_version = tuple(int(e) for e in self.config.version.split('.'))
-        removed_version = tuple(int(e) for e in self.arguments[1].split('.'))
+        # Replace the first two arguments (deprecated version and removed 
version)
+        # with a single tuple of both versions.
+        version_deprecated = self.arguments[0]
+        version_removed = self.arguments.pop(1)
+        self.arguments[0] = version_deprecated, version_removed
+
+        # Set the label based on if we have reached the removal version
+        current_version = tuple(map(int, self.config.version.split('.')))
+        removed_version = tuple(map(int,  version_removed.split('.')))
         if current_version < removed_version:
-            label = self._deprecated_label
-        else:
-            label = self._removed_label
-
-        text = label.format(deprecated=self.arguments[0], 
removed=self.arguments[1])
-        if len(self.arguments) == 3:
-            inodes, messages = self.state.inline_text(self.arguments[2],
-                                                      self.lineno+1)
-            para = nodes.paragraph(self.arguments[2], '', *inodes, 
translatable=False)
-            node.append(para)
+            versionlabels[self.name] = self._deprecated_label
+            versionlabel_classes[self.name] = 'deprecated'
         else:
-            messages = []
-        if self.content:
-            self.state.nested_parse(self.content, self.content_offset, node)
-        if len(node):
-            if isinstance(node[0], nodes.paragraph) and node[0].rawsource:
-                content = nodes.inline(node[0].rawsource, translatable=True)
-                content.source = node[0].source
-                content.line = node[0].line
-                content += node[0].children
-                node[0].replace_self(nodes.paragraph('', '', content, 
translatable=False))
-            node[0].insert(0, nodes.inline('', '%s: ' % text,
-                                           classes=['versionmodified']))
-        else:
-            para = nodes.paragraph('', '',
-                                   nodes.inline('', '%s.' % text,
-                                                classes=['versionmodified']),
-                                   translatable=False)
-            node.append(para)
-        self.env.get_domain('changeset').note_changeset(node)
-        return [node] + messages
+            versionlabels[self.name] = self._removed_label
+            versionlabel_classes[self.name] = 'removed'
+        try:
+            return super().run()
+        finally:
+            # reset versionlabels and versionlabel_classes
+            versionlabels[self.name] = ''
+            versionlabel_classes[self.name] = ''
 
 
 # Support for including Misc/NEWS

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to