Merge pull request #4529 from tk0miya/refactor_needs_extensions

Reimplement needs_extensions checker as a config-init handler
This commit is contained in:
Takeshi KOMIYA 2018-02-02 00:19:28 +09:00 committed by GitHub
commit f446f9a1e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 9 deletions

View File

@ -33,7 +33,6 @@ from sphinx.errors import (
ApplicationError, ConfigError, ExtensionError, VersionRequirementError
)
from sphinx.events import EventManager
from sphinx.extension import verify_required_extensions
from sphinx.locale import __
from sphinx.registry import SphinxComponentRegistry
from sphinx.util import import_object
@ -86,6 +85,7 @@ builtin_extensions = (
'sphinx.directives.code',
'sphinx.directives.other',
'sphinx.directives.patches',
'sphinx.extension',
'sphinx.io',
'sphinx.parsers',
'sphinx.registry',
@ -238,9 +238,6 @@ class Sphinx(object):
self.config.init_values()
self.emit('config-inited', self.config)
# check extension versions if requested
verify_required_extensions(self, self.config.needs_extensions)
# check primary_domain if requested
primary_domain = self.config.primary_domain
if primary_domain and not self.registry.has_domain(primary_domain):

View File

@ -17,8 +17,9 @@ from sphinx.util import logging
if False:
# For type annotation
from typing import Dict # NOQA
from typing import Any, Dict # NOQA
from sphinx.application import Sphinx # NOQA
from sphinx.config import Config # NOQA
logger = logging.getLogger(__name__)
@ -41,13 +42,13 @@ class Extension(object):
self.parallel_write_safe = kwargs.pop('parallel_write_safe', True)
def verify_required_extensions(app, requirements):
# type: (Sphinx, Dict[unicode, unicode]) -> None
def verify_needs_extensions(app, config):
# type: (Sphinx, Config) -> None
"""Verify the required Sphinx extensions are loaded."""
if requirements is None:
if config.needs_extensions is None:
return
for extname, reqversion in iteritems(requirements):
for extname, reqversion in iteritems(config.needs_extensions):
extension = app.extensions.get(extname)
if extension is None:
logger.warning(__('The %s extension is required by needs_extensions settings,'
@ -59,3 +60,14 @@ def verify_required_extensions(app, requirements):
'version %s and therefore cannot be built with '
'the loaded version (%s).') %
(extname, reqversion, extension.version))
def setup(app):
# type: (Sphinx) -> Dict[unicode, Any]
app.connect('config-inited', verify_needs_extensions)
return {
'version': 'builtin',
'parallel_read_safe': True,
'parallel_write_safe': True,
}