Skip to content

Commit 2c4a60b

Browse files
[3.13] GH-121970: Make DeprecatedRemoved a subclass of VersionChange (GH-121971) (#122019)
GH-121970: Make ``DeprecatedRemoved`` a subclass of ``VersionChange`` (GH-121971) (cherry picked from commit 898e90c) Co-authored-by: Adam Turner <[email protected]>
1 parent 3b7b3b0 commit 2c4a60b

File tree

1 file changed

+24
-44
lines changed

1 file changed

+24
-44
lines changed

Doc/tools/extensions/pyspecific.py

+24-44
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
from time import asctime
1616
from pprint import pformat
1717

18+
import sphinx
1819
from docutils import nodes
1920
from docutils.io import StringOutput
2021
from docutils.utils import new_document, unescape
2122
from sphinx import addnodes
2223
from sphinx.builders import Builder
24+
from sphinx.domains.changeset import VersionChange, versionlabels, versionlabel_classes
2325
from sphinx.domains.python import PyFunction, PyMethod
2426
from sphinx.errors import NoUri
2527
from sphinx.locale import _ as sphinx_gettext
@@ -393,56 +395,34 @@ def run(self):
393395

394396
# Support for documenting version of removal in deprecations
395397

396-
class DeprecatedRemoved(SphinxDirective):
397-
has_content = True
398+
class DeprecatedRemoved(VersionChange):
398399
required_arguments = 2
399-
optional_arguments = 1
400-
final_argument_whitespace = True
401-
option_spec = {}
402400

403-
_deprecated_label = sphinx_gettext('Deprecated since version {deprecated}, will be removed in version {removed}')
404-
_removed_label = sphinx_gettext('Deprecated since version {deprecated}, removed in version {removed}')
401+
_deprecated_label = sphinx_gettext('Deprecated since version %s, will be removed in version %s')
402+
_removed_label = sphinx_gettext('Deprecated since version %s, removed in version %s')
405403

406404
def run(self):
407-
node = addnodes.versionmodified()
408-
node.document = self.state.document
409-
node['type'] = 'deprecated-removed'
410-
version = (self.arguments[0], self.arguments[1])
411-
node['version'] = version
412-
current_version = tuple(int(e) for e in self.config.version.split('.'))
413-
removed_version = tuple(int(e) for e in self.arguments[1].split('.'))
405+
# Replace the first two arguments (deprecated version and removed version)
406+
# with a single tuple of both versions.
407+
version_deprecated = self.arguments[0]
408+
version_removed = self.arguments.pop(1)
409+
self.arguments[0] = version_deprecated, version_removed
410+
411+
# Set the label based on if we have reached the removal version
412+
current_version = tuple(map(int, self.config.version.split('.')))
413+
removed_version = tuple(map(int, version_removed.split('.')))
414414
if current_version < removed_version:
415-
label = self._deprecated_label
416-
else:
417-
label = self._removed_label
418-
419-
text = label.format(deprecated=self.arguments[0], removed=self.arguments[1])
420-
if len(self.arguments) == 3:
421-
inodes, messages = self.state.inline_text(self.arguments[2],
422-
self.lineno+1)
423-
para = nodes.paragraph(self.arguments[2], '', *inodes, translatable=False)
424-
node.append(para)
415+
versionlabels[self.name] = self._deprecated_label
416+
versionlabel_classes[self.name] = 'deprecated'
425417
else:
426-
messages = []
427-
if self.content:
428-
self.state.nested_parse(self.content, self.content_offset, node)
429-
if len(node):
430-
if isinstance(node[0], nodes.paragraph) and node[0].rawsource:
431-
content = nodes.inline(node[0].rawsource, translatable=True)
432-
content.source = node[0].source
433-
content.line = node[0].line
434-
content += node[0].children
435-
node[0].replace_self(nodes.paragraph('', '', content, translatable=False))
436-
node[0].insert(0, nodes.inline('', '%s: ' % text,
437-
classes=['versionmodified']))
438-
else:
439-
para = nodes.paragraph('', '',
440-
nodes.inline('', '%s.' % text,
441-
classes=['versionmodified']),
442-
translatable=False)
443-
node.append(para)
444-
self.env.get_domain('changeset').note_changeset(node)
445-
return [node] + messages
418+
versionlabels[self.name] = self._removed_label
419+
versionlabel_classes[self.name] = 'removed'
420+
try:
421+
return super().run()
422+
finally:
423+
# reset versionlabels and versionlabel_classes
424+
versionlabels[self.name] = ''
425+
versionlabel_classes[self.name] = ''
446426

447427

448428
# Support for including Misc/NEWS

0 commit comments

Comments
 (0)