Deprecate sphinx.config.string_classes; remove all internal uses

With only a single text type across supported Python versions, the
string_classes is no longer necessary.

Internally, all uses were converted to the value `[str]`. For
.add_config_value() uses that also supply a default string, the type is
inferred.
This commit is contained in:
Jon Dufresne 2018-12-16 11:25:18 -08:00
parent 30ec4b6bba
commit 80861d105b
10 changed files with 41 additions and 42 deletions

View File

@ -54,6 +54,7 @@ Deprecated
* ``sphinx.addnodes.abbreviation`` * ``sphinx.addnodes.abbreviation``
* ``sphinx.application.Sphinx._setting_up_extension`` * ``sphinx.application.Sphinx._setting_up_extension``
* ``sphinx.config.check_unicode()`` * ``sphinx.config.check_unicode()``
* ``sphinx.config.string_classes``
* ``sphinx.ext.autodoc.importer._MockImporter`` * ``sphinx.ext.autodoc.importer._MockImporter``
* ``sphinx.ext.autosummary.Autosummary.warn()`` * ``sphinx.ext.autosummary.Autosummary.warn()``
* ``sphinx.ext.autosummary.Autosummary.genopt`` * ``sphinx.ext.autosummary.Autosummary.genopt``

View File

@ -157,6 +157,11 @@ The following is a list of deprecated interfaces.
- 4.0 - 4.0
- N/A - N/A
* - ``sphinx.config.string_classes``
- 2.0
- 4.0
- ``[str]``
* - ``sphinx.ext.autosummary.Autosummary.warn()`` * - ``sphinx.ext.autosummary.Autosummary.warn()``
- 2.0 - 2.0
- 4.0 - 4.0

View File

@ -17,7 +17,6 @@ import subprocess
from os import path, environ from os import path, environ
from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.builders.html import StandaloneHTMLBuilder
from sphinx.config import string_classes
from sphinx.errors import SphinxError from sphinx.errors import SphinxError
from sphinx.locale import __ from sphinx.locale import __
from sphinx.util import logging from sphinx.util import logging
@ -274,17 +273,17 @@ def setup(app):
app.add_config_value('applehelp_bundle_name', app.add_config_value('applehelp_bundle_name',
lambda self: make_filename(self.project), 'applehelp') lambda self: make_filename(self.project), 'applehelp')
app.add_config_value('applehelp_bundle_id', None, 'applehelp', string_classes) app.add_config_value('applehelp_bundle_id', None, 'applehelp', [str])
app.add_config_value('applehelp_dev_region', 'en-us', 'applehelp') app.add_config_value('applehelp_dev_region', 'en-us', 'applehelp')
app.add_config_value('applehelp_bundle_version', '1', 'applehelp') app.add_config_value('applehelp_bundle_version', '1', 'applehelp')
app.add_config_value('applehelp_icon', None, 'applehelp', string_classes) app.add_config_value('applehelp_icon', None, 'applehelp', [str])
app.add_config_value('applehelp_kb_product', app.add_config_value('applehelp_kb_product',
lambda self: '%s-%s' % (make_filename(self.project), self.release), lambda self: '%s-%s' % (make_filename(self.project), self.release),
'applehelp') 'applehelp')
app.add_config_value('applehelp_kb_url', None, 'applehelp', string_classes) app.add_config_value('applehelp_kb_url', None, 'applehelp', [str])
app.add_config_value('applehelp_remote_url', None, 'applehelp', string_classes) app.add_config_value('applehelp_remote_url', None, 'applehelp', [str])
app.add_config_value('applehelp_index_anchors', False, 'applehelp', string_classes) app.add_config_value('applehelp_index_anchors', False, 'applehelp', [str])
app.add_config_value('applehelp_min_term_length', None, 'applehelp', string_classes) app.add_config_value('applehelp_min_term_length', None, 'applehelp', [str])
app.add_config_value('applehelp_stopwords', app.add_config_value('applehelp_stopwords',
lambda self: self.language or 'en', 'applehelp') lambda self: self.language or 'en', 'applehelp')
app.add_config_value('applehelp_locale', lambda self: self.language or 'en', 'applehelp') app.add_config_value('applehelp_locale', lambda self: self.language or 'en', 'applehelp')

View File

@ -15,7 +15,7 @@ from os import path
from sphinx import package_dir from sphinx import package_dir
from sphinx.builders import _epub_base from sphinx.builders import _epub_base
from sphinx.config import string_classes, ENUM from sphinx.config import ENUM
from sphinx.locale import __ from sphinx.locale import __
from sphinx.util import logging, xmlname_checker from sphinx.util import logging, xmlname_checker
from sphinx.util.fileutil import copy_asset_file from sphinx.util.fileutil import copy_asset_file
@ -275,8 +275,8 @@ def setup(app):
app.add_config_value('epub_max_image_width', 0, 'env') app.add_config_value('epub_max_image_width', 0, 'env')
app.add_config_value('epub_show_urls', 'inline', 'epub') app.add_config_value('epub_show_urls', 'inline', 'epub')
app.add_config_value('epub_use_index', lambda self: self.html_use_index, 'epub') app.add_config_value('epub_use_index', lambda self: self.html_use_index, 'epub')
app.add_config_value('epub_description', 'unknown', 'epub', string_classes) app.add_config_value('epub_description', 'unknown', 'epub')
app.add_config_value('epub_contributor', 'unknown', 'epub', string_classes) app.add_config_value('epub_contributor', 'unknown', 'epub')
app.add_config_value('epub_writing_mode', 'horizontal', 'epub', app.add_config_value('epub_writing_mode', 'horizontal', 'epub',
ENUM('horizontal', 'vertical')) ENUM('horizontal', 'vertical'))

View File

@ -31,7 +31,6 @@ from six import text_type
from sphinx import package_dir, __display_version__ from sphinx import package_dir, __display_version__
from sphinx.application import ENV_PICKLE_FILENAME from sphinx.application import ENV_PICKLE_FILENAME
from sphinx.builders import Builder from sphinx.builders import Builder
from sphinx.config import string_classes
from sphinx.deprecation import RemovedInSphinx30Warning from sphinx.deprecation import RemovedInSphinx30Warning
from sphinx.environment.adapters.asset import ImageAdapter from sphinx.environment.adapters.asset import ImageAdapter
from sphinx.environment.adapters.indexentries import IndexEntries from sphinx.environment.adapters.indexentries import IndexEntries
@ -1618,16 +1617,16 @@ def setup(app):
app.add_config_value('html_theme_options', {}, 'html') app.add_config_value('html_theme_options', {}, 'html')
app.add_config_value('html_title', app.add_config_value('html_title',
lambda self: _('%s %s documentation') % (self.project, self.release), lambda self: _('%s %s documentation') % (self.project, self.release),
'html', string_classes) 'html', [str])
app.add_config_value('html_short_title', lambda self: self.html_title, 'html') app.add_config_value('html_short_title', lambda self: self.html_title, 'html')
app.add_config_value('html_style', None, 'html', string_classes) app.add_config_value('html_style', None, 'html', [str])
app.add_config_value('html_logo', None, 'html', string_classes) app.add_config_value('html_logo', None, 'html', [str])
app.add_config_value('html_favicon', None, 'html', string_classes) app.add_config_value('html_favicon', None, 'html', [str])
app.add_config_value('html_css_files', [], 'html') app.add_config_value('html_css_files', [], 'html')
app.add_config_value('html_js_files', [], 'html') app.add_config_value('html_js_files', [], 'html')
app.add_config_value('html_static_path', [], 'html') app.add_config_value('html_static_path', [], 'html')
app.add_config_value('html_extra_path', [], 'html') app.add_config_value('html_extra_path', [], 'html')
app.add_config_value('html_last_updated_fmt', None, 'html', string_classes) app.add_config_value('html_last_updated_fmt', None, 'html', [str])
app.add_config_value('html_sidebars', {}, 'html') app.add_config_value('html_sidebars', {}, 'html')
app.add_config_value('html_additional_pages', {}, 'html') app.add_config_value('html_additional_pages', {}, 'html')
app.add_config_value('html_domain_indices', True, 'html', [list]) app.add_config_value('html_domain_indices', True, 'html', [list])
@ -1638,15 +1637,15 @@ def setup(app):
app.add_config_value('html_show_sourcelink', True, 'html') app.add_config_value('html_show_sourcelink', True, 'html')
app.add_config_value('html_sourcelink_suffix', '.txt', 'html') app.add_config_value('html_sourcelink_suffix', '.txt', 'html')
app.add_config_value('html_use_opensearch', '', 'html') app.add_config_value('html_use_opensearch', '', 'html')
app.add_config_value('html_file_suffix', None, 'html', string_classes) app.add_config_value('html_file_suffix', None, 'html', [str])
app.add_config_value('html_link_suffix', None, 'html', string_classes) app.add_config_value('html_link_suffix', None, 'html', [str])
app.add_config_value('html_show_copyright', True, 'html') app.add_config_value('html_show_copyright', True, 'html')
app.add_config_value('html_show_sphinx', True, 'html') app.add_config_value('html_show_sphinx', True, 'html')
app.add_config_value('html_context', {}, 'html') app.add_config_value('html_context', {}, 'html')
app.add_config_value('html_output_encoding', 'utf-8', 'html') app.add_config_value('html_output_encoding', 'utf-8', 'html')
app.add_config_value('html_compact_lists', True, 'html') app.add_config_value('html_compact_lists', True, 'html')
app.add_config_value('html_secnumber_suffix', '. ', 'html') app.add_config_value('html_secnumber_suffix', '. ', 'html')
app.add_config_value('html_search_language', None, 'html', string_classes) app.add_config_value('html_search_language', None, 'html', [str])
app.add_config_value('html_search_options', {}, 'html') app.add_config_value('html_search_options', {}, 'html')
app.add_config_value('html_search_scorer', '', None) app.add_config_value('html_search_scorer', '', None)
app.add_config_value('html_scaled_image_link', True, 'html') app.add_config_value('html_scaled_image_link', True, 'html')

View File

@ -18,7 +18,6 @@ from docutils import nodes
from sphinx import addnodes from sphinx import addnodes
from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.builders.html import StandaloneHTMLBuilder
from sphinx.config import string_classes
from sphinx.environment.adapters.indexentries import IndexEntries from sphinx.environment.adapters.indexentries import IndexEntries
from sphinx.locale import __ from sphinx.locale import __
from sphinx.util import logging from sphinx.util import logging
@ -346,8 +345,8 @@ def setup(app):
app.add_builder(HTMLHelpBuilder) app.add_builder(HTMLHelpBuilder)
app.add_config_value('htmlhelp_basename', default_htmlhelp_basename, None) app.add_config_value('htmlhelp_basename', default_htmlhelp_basename, None)
app.add_config_value('htmlhelp_file_suffix', None, 'html', string_classes) app.add_config_value('htmlhelp_file_suffix', None, 'html', [str])
app.add_config_value('htmlhelp_link_suffix', None, 'html', string_classes) app.add_config_value('htmlhelp_link_suffix', None, 'html', [str])
return { return {
'version': 'builtin', 'version': 'builtin',

View File

@ -22,7 +22,7 @@ from sphinx.builders.latex.transforms import (
FootnoteDocnameUpdater, LaTeXFootnoteTransform, LiteralBlockTransform, FootnoteDocnameUpdater, LaTeXFootnoteTransform, LiteralBlockTransform,
ShowUrlsTransform, DocumentTargetTransform, ShowUrlsTransform, DocumentTargetTransform,
) )
from sphinx.config import string_classes, ENUM from sphinx.config import ENUM
from sphinx.environment import NoUri from sphinx.environment import NoUri
from sphinx.environment.adapters.asset import ImageAdapter from sphinx.environment.adapters.asset import ImageAdapter
from sphinx.errors import SphinxError, ConfigError from sphinx.errors import SphinxError, ConfigError
@ -464,7 +464,7 @@ def setup(app):
lambda self: [(self.master_doc, make_filename(self.project) + '.tex', lambda self: [(self.master_doc, make_filename(self.project) + '.tex',
self.project, '', 'manual')], self.project, '', 'manual')],
None) None)
app.add_config_value('latex_logo', None, None, string_classes) app.add_config_value('latex_logo', None, None, [str])
app.add_config_value('latex_appendices', [], None) app.add_config_value('latex_appendices', [], None)
app.add_config_value('latex_use_latex_multicolumn', False, None) app.add_config_value('latex_use_latex_multicolumn', False, None)
app.add_config_value('latex_use_xindy', default_latex_use_xindy, None) app.add_config_value('latex_use_xindy', default_latex_use_xindy, None)

View File

@ -21,7 +21,6 @@ from docutils import nodes
from sphinx import addnodes from sphinx import addnodes
from sphinx import package_dir from sphinx import package_dir
from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.builders.html import StandaloneHTMLBuilder
from sphinx.config import string_classes
from sphinx.environment.adapters.indexentries import IndexEntries from sphinx.environment.adapters.indexentries import IndexEntries
from sphinx.locale import __ from sphinx.locale import __
from sphinx.util import logging from sphinx.util import logging
@ -273,7 +272,7 @@ def setup(app):
app.add_builder(QtHelpBuilder) app.add_builder(QtHelpBuilder)
app.add_config_value('qthelp_basename', lambda self: make_filename(self.project), None) app.add_config_value('qthelp_basename', lambda self: make_filename(self.project), None)
app.add_config_value('qthelp_namespace', None, 'html', string_classes) app.add_config_value('qthelp_namespace', None, 'html', [str])
app.add_config_value('qthelp_theme', 'nonav', 'html') app.add_config_value('qthelp_theme', 'nonav', 'html')
app.add_config_value('qthelp_theme_options', {}, 'html') app.add_config_value('qthelp_theme_options', {}, 'html')

View File

@ -78,6 +78,7 @@ class ENUM:
return value in self.candidates return value in self.candidates
# RemovedInSphinx40Warning
string_classes = [text_type] # type: List string_classes = [text_type] # type: List
@ -107,9 +108,9 @@ class Config:
'release': ('', 'env', []), 'release': ('', 'env', []),
'today': ('', 'env', []), 'today': ('', 'env', []),
# the real default is locale-dependent # the real default is locale-dependent
'today_fmt': (None, 'env', string_classes), 'today_fmt': (None, 'env', [str]),
'language': (None, 'env', string_classes), 'language': (None, 'env', [str]),
'locale_dirs': (['locales'], 'env', []), 'locale_dirs': (['locales'], 'env', []),
'figure_language_filename': ('{root}.{language}{ext}', 'env', [str]), 'figure_language_filename': ('{root}.{language}{ext}', 'env', [str]),
@ -118,24 +119,24 @@ class Config:
'source_encoding': ('utf-8-sig', 'env', []), 'source_encoding': ('utf-8-sig', 'env', []),
'source_parsers': ({}, 'env', []), 'source_parsers': ({}, 'env', []),
'exclude_patterns': ([], 'env', []), 'exclude_patterns': ([], 'env', []),
'default_role': (None, 'env', string_classes), 'default_role': (None, 'env', [str]),
'add_function_parentheses': (True, 'env', []), 'add_function_parentheses': (True, 'env', []),
'add_module_names': (True, 'env', []), 'add_module_names': (True, 'env', []),
'trim_footnote_reference_space': (False, 'env', []), 'trim_footnote_reference_space': (False, 'env', []),
'show_authors': (False, 'env', []), 'show_authors': (False, 'env', []),
'pygments_style': (None, 'html', string_classes), 'pygments_style': (None, 'html', [str]),
'highlight_language': ('default', 'env', []), 'highlight_language': ('default', 'env', []),
'highlight_options': ({}, 'env', []), 'highlight_options': ({}, 'env', []),
'templates_path': ([], 'html', []), 'templates_path': ([], 'html', []),
'template_bridge': (None, 'html', string_classes), 'template_bridge': (None, 'html', [str]),
'keep_warnings': (False, 'env', []), 'keep_warnings': (False, 'env', []),
'suppress_warnings': ([], 'env', []), 'suppress_warnings': ([], 'env', []),
'modindex_common_prefix': ([], 'html', []), 'modindex_common_prefix': ([], 'html', []),
'rst_epilog': (None, 'env', string_classes), 'rst_epilog': (None, 'env', [str]),
'rst_prolog': (None, 'env', string_classes), 'rst_prolog': (None, 'env', [str]),
'trim_doctest_flags': (True, 'env', []), 'trim_doctest_flags': (True, 'env', []),
'primary_domain': ('py', 'env', [NoneType]), # type: ignore 'primary_domain': ('py', 'env', [NoneType]), # type: ignore
'needs_sphinx': (None, None, string_classes), 'needs_sphinx': (None, None, [str]),
'needs_extensions': ({}, None, []), 'needs_extensions': ({}, None, []),
'manpages_url': (None, 'env', []), 'manpages_url': (None, 'env', []),
'nitpicky': (False, None, []), 'nitpicky': (False, None, []),
@ -145,7 +146,7 @@ class Config:
'numfig_format': ({}, 'env', []), # will be initialized in init_numfig_format() 'numfig_format': ({}, 'env', []), # will be initialized in init_numfig_format()
'math_number_all': (False, 'env', []), 'math_number_all': (False, 'env', []),
'math_eqref_format': (None, 'env', string_classes), 'math_eqref_format': (None, 'env', [str]),
'math_numfig': (True, 'env', []), 'math_numfig': (True, 'env', []),
'tls_verify': (True, 'env', []), 'tls_verify': (True, 'env', []),
'tls_cacerts': (None, 'env', []), 'tls_cacerts': (None, 'env', []),

View File

@ -13,7 +13,7 @@ import mock
import pytest import pytest
import sphinx import sphinx
from sphinx.config import Config, ENUM, string_classes, check_confval_types from sphinx.config import Config, ENUM, check_confval_types
from sphinx.errors import ExtensionError, ConfigError, VersionRequirementError from sphinx.errors import ExtensionError, ConfigError, VersionRequirementError
from sphinx.testing.path import path from sphinx.testing.path import path
@ -228,12 +228,8 @@ TYPECHECK_WARNINGS = [
('value8', B(), None, C(), False), # sibling type ('value8', B(), None, C(), False), # sibling type
('value9', None, None, 'foo', False), # no default or no annotations ('value9', None, None, 'foo', False), # no default or no annotations
('value10', None, None, 123, False), # no default or no annotations ('value10', None, None, 123, False), # no default or no annotations
('value11', None, [str], 'bar', False), # str vs unicode ('value11', None, [str], 'bar', False), # str
('value12', 'string', None, 'bar', False), # str vs unicode ('value12', 'string', None, 'bar', False), # str
('value13', None, string_classes, 'bar', False), # string_classes
('value14', None, string_classes, 'bar', False), # string_classes
('value15', 'unicode', None, 'bar', False), # str vs unicode
('value16', 'unicode', None, 'bar', False), # str vs unicode
] ]