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