Initialize sphinx config using application instead of config

Currently sphinx config is initialized using sphinx.config,
however in recent versions of Sphinx, plugin specific parameters
as man_pages for man builder has been moved to the extension
and is not initialized from sphinx.config but using sphinx.application.
This is making man_pages to be empty when using sphinx 1.5 and man
builder is not properly called.

This patch initializes sphinx config using sphinx.application which
works fine with both old and new Sphinx versions.

Closes-Bug: #1674795

Depends-On: I7bde8fc1f2a7db5bd73635aa197377bf5ac614d2
Change-Id: Ib7c1a6fe8fbb5acfcfcfac61d0b53f080ff2b1e4
This commit is contained in:
Alfredo Moralejo 2017-03-22 04:56:56 -04:00
parent 6448d036f7
commit 2d7c0045f4
2 changed files with 9 additions and 14 deletions

View File

@ -17,9 +17,7 @@
from distutils import log
import fnmatch
import os
import pkg_resources
import sys
import warnings
try:
import cStringIO
@ -29,7 +27,6 @@ except ImportError:
try:
from sphinx import apidoc
from sphinx import application
from sphinx import config
from sphinx import setup_command
except Exception as e:
# NOTE(dhellmann): During the installation of docutils, setuptools
@ -134,16 +131,6 @@ class LocalBuildDoc(setup_command.BuildDoc):
confoverrides['release'] = self.release
if self.today:
confoverrides['today'] = self.today
sphinx_config = config.Config(self.config_dir, 'conf.py', {}, [])
sphinx_ver = pkg_resources.parse_version(
pkg_resources.get_distribution("sphinx").version)
if sphinx_ver > pkg_resources.parse_version('1.2.3'):
sphinx_config.init_values(warnings.warn)
else:
sphinx_config.init_values()
if self.builder == 'man' and len(
getattr(sphinx_config, 'man_pages', '')) == 0:
return
if self.sphinx_initialized:
confoverrides['suppress_warnings'] = [
'app.add_directive', 'app.add_role',
@ -153,6 +140,10 @@ class LocalBuildDoc(setup_command.BuildDoc):
self.builder_target_dir, self.doctree_dir,
self.builder, confoverrides, status_stream,
freshenv=self.fresh_env, warningiserror=self.warning_is_error)
sphinx_config = app.config
if self.builder == 'man' and len(
getattr(sphinx_config, 'man_pages', '')) == 0:
return
self.sphinx_initialized = True
try:

View File

@ -224,6 +224,10 @@ class GitLogsTest(base.BaseTestCase):
self.assertTrue(co_author in authors)
class _SphinxConfig(object):
man_pages = ['foo']
class BaseSphinxTest(base.BaseTestCase):
def setUp(self):
@ -234,7 +238,7 @@ class BaseSphinxTest(base.BaseTestCase):
self.useFixture(fixtures.MonkeyPatch(
"sphinx.application.Sphinx.build", lambda *a, **kw: None))
self.useFixture(fixtures.MonkeyPatch(
"sphinx.config.Config.man_pages", ['foo']))
"sphinx.application.Sphinx.config", _SphinxConfig))
self.useFixture(fixtures.MonkeyPatch(
"sphinx.config.Config.init_values", lambda *a: None))
self.useFixture(fixtures.MonkeyPatch(