Deprecate Config.check_unicode()

This commit is contained in:
Takeshi KOMIYA 2018-03-29 10:25:03 +09:00
parent 00e9e560b1
commit a24601aa24
4 changed files with 25 additions and 11 deletions

View File

@ -36,6 +36,7 @@ Deprecated
* ``Config.__init__()`` has changed; the *dirname*, *filename* and *tags* * ``Config.__init__()`` has changed; the *dirname*, *filename* and *tags*
argument has been deprecated argument has been deprecated
* ``Config.check_types()`` is deprecated * ``Config.check_types()`` is deprecated
* ``Config.check_unicode()`` is deprecated
For more details, see `deprecation APIs list For more details, see `deprecation APIs list
<http://www.sphinx-doc.org/en/master/extdev/index.html#deprecated-apis>`_ <http://www.sphinx-doc.org/en/master/extdev/index.html#deprecated-apis>`_

View File

@ -113,6 +113,11 @@ The following is a list of deprecated interface.
- (will be) Removed - (will be) Removed
- Alternatives - Alternatives
* - ``Config.check_unicode()``
- 1.8
- 3.0
- ``sphinx.config.check_unicode()``
* - ``Config.check_types()`` * - ``Config.check_types()``
- 1.8 - 1.8
- 3.0 - 3.0

View File

@ -26,7 +26,7 @@ from six.moves import cStringIO
import sphinx import sphinx
from sphinx import package_dir, locale from sphinx import package_dir, locale
from sphinx.config import Config from sphinx.config import Config, check_unicode
from sphinx.deprecation import RemovedInSphinx20Warning, RemovedInSphinx30Warning from sphinx.deprecation import RemovedInSphinx20Warning, RemovedInSphinx30Warning
from sphinx.environment import BuildEnvironment from sphinx.environment import BuildEnvironment
from sphinx.errors import ApplicationError, ConfigError, VersionRequirementError from sphinx.errors import ApplicationError, ConfigError, VersionRequirementError
@ -190,8 +190,7 @@ class Sphinx(object):
else: else:
self.config = Config.read(path.join(self.confdir, CONFIG_FILENAME), self.config = Config.read(path.join(self.confdir, CONFIG_FILENAME),
confoverrides or {}, self.tags) confoverrides or {}, self.tags)
self.config.check_unicode() check_unicode(self.config)
# defer checking types until i18n has been initialized
# initialize some limited config variables before initialize i18n and loading # initialize some limited config variables before initialize i18n and loading
# extensions # extensions

View File

@ -34,7 +34,6 @@ if False:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
nonascii_re = re.compile(br'[\x80-\xff]')
copyright_year_re = re.compile(r'^((\d{4}-)?)(\d{4})(?=[ ,])') copyright_year_re = re.compile(r'^((\d{4}-)?)(\d{4})(?=[ ,])')
if PY3: if PY3:
@ -196,13 +195,9 @@ class Config(object):
def check_unicode(self): def check_unicode(self):
# type: () -> None # type: () -> None
# check all string values for non-ASCII characters in bytestrings, warnings.warn('Config.check_unicode() is deprecated. Use check_unicode() instead.',
# since that can result in UnicodeErrors all over the place RemovedInSphinx30Warning)
for name, value in iteritems(self._raw_config): check_unicode(self)
if isinstance(value, binary_type) and nonascii_re.search(value):
logger.warning(__('the config value %r is set to a string with non-ASCII '
'characters; this can lead to Unicode errors occurring. '
'Please use Unicode strings, e.g. %r.'), name, u'Content')
def convert_overrides(self, name, value): def convert_overrides(self, name, value):
# type: (unicode, Any) -> Any # type: (unicode, Any) -> Any
@ -434,6 +429,20 @@ def check_confval_types(app, config):
default=type(default))) default=type(default)))
def check_unicode(config):
# type: (Config) -> None
"""check all string values for non-ASCII characters in bytestrings,
since that can result in UnicodeErrors all over the place
"""
nonascii_re = re.compile(br'[\x80-\xff]')
for name, value in iteritems(config._raw_config):
if isinstance(value, binary_type) and nonascii_re.search(value):
logger.warning(__('the config value %r is set to a string with non-ASCII '
'characters; this can lead to Unicode errors occurring. '
'Please use Unicode strings, e.g. %r.'), name, u'Content')
def setup(app): def setup(app):
# type: (Sphinx) -> Dict[unicode, Any] # type: (Sphinx) -> Dict[unicode, Any]
app.connect('config-inited', convert_source_suffix) app.connect('config-inited', convert_source_suffix)