Preload builder module before init config values

This commit is contained in:
Takeshi KOMIYA 2016-12-12 23:19:48 +09:00
parent 9fd0205b27
commit 7d9a47d79b

View File

@ -199,6 +199,10 @@ class Sphinx(object):
# load all user-given extension modules # load all user-given extension modules
for extension in self.config.extensions: for extension in self.config.extensions:
self.setup_extension(extension) self.setup_extension(extension)
# preload builder module (before init config values)
self.preload_builder(buildername)
# the config file itself can be an extension # the config file itself can be an extension
if self.config.setup: if self.config.setup:
self._setting_up_extension = ['conf.py'] self._setting_up_extension = ['conf.py']
@ -294,11 +298,11 @@ class Sphinx(object):
logger.info(_('failed: %s'), err) logger.info(_('failed: %s'), err)
self._init_env(freshenv=True) self._init_env(freshenv=True)
def create_builder(self, buildername): def preload_builder(self, buildername):
# type: (unicode) -> Builder # type: (unicode) -> None
if buildername is None: if buildername is None:
logger.info(_('No builder selected, using default: html')) return
buildername = 'html'
if buildername not in self.builderclasses: if buildername not in self.builderclasses:
entry_points = iter_entry_points('sphinx.builders', buildername) entry_points = iter_entry_points('sphinx.builders', buildername)
try: try:
@ -307,8 +311,15 @@ class Sphinx(object):
raise SphinxError(_('Builder name %s not registered or available' raise SphinxError(_('Builder name %s not registered or available'
' through entry point') % buildername) ' through entry point') % buildername)
load_extension(self, entry_point.module_name) load_extension(self, entry_point.module_name)
builderclass = self.builderclasses[buildername]
return builderclass(self) def create_builder(self, buildername):
# type: (unicode) -> Builder
if buildername is None:
buildername = 'html'
if buildername not in self.builderclasses:
raise SphinxError(_('Builder name %s not registered') % buildername)
return self.builderclasses[buildername](self)
def _init_builder(self): def _init_builder(self):
# type: () -> None # type: () -> None