mirror of https://github.com/python/cpython
GH-121970: Make ``DeprecatedRemoved`` a subclass of ``VersionChange`` (#121971)
This commit is contained in:
parent
adf0b94d1c
commit
898e90c3be
|
@ -15,11 +15,13 @@ from os import getenv, path
|
||||||
from time import asctime
|
from time import asctime
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
|
|
||||||
|
import sphinx
|
||||||
from docutils import nodes
|
from docutils import nodes
|
||||||
from docutils.io import StringOutput
|
from docutils.io import StringOutput
|
||||||
from docutils.utils import new_document, unescape
|
from docutils.utils import new_document, unescape
|
||||||
from sphinx import addnodes
|
from sphinx import addnodes
|
||||||
from sphinx.builders import Builder
|
from sphinx.builders import Builder
|
||||||
|
from sphinx.domains.changeset import VersionChange, versionlabels, versionlabel_classes
|
||||||
from sphinx.domains.python import PyFunction, PyMethod
|
from sphinx.domains.python import PyFunction, PyMethod
|
||||||
from sphinx.errors import NoUri
|
from sphinx.errors import NoUri
|
||||||
from sphinx.locale import _ as sphinx_gettext
|
from sphinx.locale import _ as sphinx_gettext
|
||||||
|
@ -393,56 +395,34 @@ class PyAbstractMethod(PyMethod):
|
||||||
|
|
||||||
# Support for documenting version of removal in deprecations
|
# Support for documenting version of removal in deprecations
|
||||||
|
|
||||||
class DeprecatedRemoved(SphinxDirective):
|
class DeprecatedRemoved(VersionChange):
|
||||||
has_content = True
|
|
||||||
required_arguments = 2
|
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}')
|
_deprecated_label = sphinx_gettext('Deprecated since version %s, will be removed in version %s')
|
||||||
_removed_label = sphinx_gettext('Deprecated since version {deprecated}, removed in version {removed}')
|
_removed_label = sphinx_gettext('Deprecated since version %s, removed in version %s')
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
node = addnodes.versionmodified()
|
# Replace the first two arguments (deprecated version and removed version)
|
||||||
node.document = self.state.document
|
# with a single tuple of both versions.
|
||||||
node['type'] = 'deprecated-removed'
|
version_deprecated = self.arguments[0]
|
||||||
version = (self.arguments[0], self.arguments[1])
|
version_removed = self.arguments.pop(1)
|
||||||
node['version'] = version
|
self.arguments[0] = version_deprecated, version_removed
|
||||||
current_version = tuple(int(e) for e in self.config.version.split('.'))
|
|
||||||
removed_version = tuple(int(e) for e in self.arguments[1].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])
|
# Set the label based on if we have reached the removal version
|
||||||
if len(self.arguments) == 3:
|
current_version = tuple(map(int, self.config.version.split('.')))
|
||||||
inodes, messages = self.state.inline_text(self.arguments[2],
|
removed_version = tuple(map(int, version_removed.split('.')))
|
||||||
self.lineno+1)
|
if current_version < removed_version:
|
||||||
para = nodes.paragraph(self.arguments[2], '', *inodes, translatable=False)
|
versionlabels[self.name] = self._deprecated_label
|
||||||
node.append(para)
|
versionlabel_classes[self.name] = 'deprecated'
|
||||||
else:
|
else:
|
||||||
messages = []
|
versionlabels[self.name] = self._removed_label
|
||||||
if self.content:
|
versionlabel_classes[self.name] = 'removed'
|
||||||
self.state.nested_parse(self.content, self.content_offset, node)
|
try:
|
||||||
if len(node):
|
return super().run()
|
||||||
if isinstance(node[0], nodes.paragraph) and node[0].rawsource:
|
finally:
|
||||||
content = nodes.inline(node[0].rawsource, translatable=True)
|
# reset versionlabels and versionlabel_classes
|
||||||
content.source = node[0].source
|
versionlabels[self.name] = ''
|
||||||
content.line = node[0].line
|
versionlabel_classes[self.name] = ''
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
# Support for including Misc/NEWS
|
# Support for including Misc/NEWS
|
||||||
|
|
Loading…
Reference in New Issue