Skip to content

Commit 898e90c

Browse files
authored
pythonGH-121970: Make DeprecatedRemoved a subclass of VersionChange (python#121971)
1 parent adf0b94 commit 898e90c

File tree

1 file changed

+24
-44
lines changed

1 file changed

+24
-44
lines changed

Doc/tools/extensions/pyspecific.py

Lines changed: 24 additions & 44 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy