summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2022-01-10 19:02:30 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2022-01-10 19:04:44 +0900
commit2a3ea2e490c2d34895e7d18c52943c01bd7ba30b (patch)
treecb1d001431f585d3b022daa6a1a281c86a711e82
parent87eda92a52e107e9243acac055037c3d6e50819c (diff)
downloadsphinx-git-2a3ea2e490c2d34895e7d18c52943c01bd7ba30b.tar.gz
Fix #10061: html theme: Confvals added by themes are not initialized
-rw-r--r--CHANGES2
-rw-r--r--sphinx/config.py17
-rw-r--r--sphinx/theming.py1
3 files changed, 17 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 6ce3e51f3..b12528a0a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -58,6 +58,8 @@ Bugs fixed
* #9878: mathjax: MathJax configuration is placed after loading MathJax itself
* #9857: Generated RFC links use outdated base url
* #9909: HTML, prevent line-wrapping in literal text.
+* #10061: html theme: Configuration values added by themes are not be able to
+ override from conf.py
* #9925: LaTeX: prohibit also with ``'xelatex'`` line splitting at dashes of
inline and parsed literals
* #9944: LaTeX: extra vertical whitespace for some nested declarations
diff --git a/sphinx/config.py b/sphinx/config.py
index 38ed1d388..a4a448366 100644
--- a/sphinx/config.py
+++ b/sphinx/config.py
@@ -251,6 +251,17 @@ class Config:
if name in self.values:
self.__dict__[name] = config[name]
+ def post_init_values(self) -> None:
+ """
+ Initialize additional config variables that are added after init_values() called.
+ """
+ config = self._raw_config
+ for name in config:
+ if name not in self.__dict__ and name in self.values:
+ self.__dict__[name] = config[name]
+
+ check_confval_types(None, self)
+
def __getattr__(self, name: str) -> Any:
if name.startswith('_'):
raise AttributeError(name)
@@ -427,7 +438,7 @@ def check_confval_types(app: "Sphinx", config: Config) -> None:
"but `{current}` is given.")
logger.warning(msg.format(name=confval.name,
current=confval.value,
- candidates=annotations.candidates))
+ candidates=annotations.candidates), once=True)
else:
if type(confval.value) is type(default):
continue
@@ -452,13 +463,13 @@ def check_confval_types(app: "Sphinx", config: Config) -> None:
permitted = " or ".join(wrapped_annotations)
logger.warning(msg.format(name=confval.name,
current=type(confval.value),
- permitted=permitted))
+ permitted=permitted), once=True)
else:
msg = __("The config value `{name}' has type `{current.__name__}', "
"defaults to `{default.__name__}'.")
logger.warning(msg.format(name=confval.name,
current=type(confval.value),
- default=type(default)))
+ default=type(default)), once=True)
def check_primary_domain(app: "Sphinx", config: Config) -> None:
diff --git a/sphinx/theming.py b/sphinx/theming.py
index cfbe74b57..819cec377 100644
--- a/sphinx/theming.py
+++ b/sphinx/theming.py
@@ -208,6 +208,7 @@ class HTMLThemeFactory:
try:
entry_point = theme_entry_points[name]
self.app.registry.load_extension(self.app, entry_point.module)
+ self.app.config.post_init_values()
return
except KeyError:
pass