Commit b7b2ffc3 authored by Vegard Nossum's avatar Vegard Nossum Committed by Jonathan Corbet

docs: translations: use attribute to store current language

Akira Yokosawa reported [1] that the "translations" extension we added in
commit 7418ec5b ("docs: translations: add translations links when they
exist") broke the build on Sphinx versions v6.1.3 through 7.1.2 (possibly
others) with the following error:

    Exception occurred:
      File "/usr/lib/python3.12/site-packages/sphinx/util/nodes.py", line 624, in _copy_except__document
        newnode = self.__class__(rawsource=self.rawsource, **self.attributes)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    TypeError: LanguagesNode.__init__() missing 1 required positional argument: 'current_language'
    The full traceback has been saved in /tmp/sphinx-err-7xmwytuu.log, if you want to report the issue to the developers.

Solve this problem by making 'current_language' a true element attribute
of the LanguagesNode element, which is probably the more correct way to do
it anyway.

Tested on Sphinx 2.x, 3.x, 6.x, and 7.x.

[1]: https://lore.kernel.org/all/54a56c2e-a27c-45a0-b712-02a7bc7d2673@gmail.com/

Fixes: 7418ec5b ("docs: translations: add translations links when they exist")
Reported-by: default avatarAkira Yokosawa <akiyks@gmail.com>
Signed-off-by: default avatarVegard Nossum <vegard.nossum@oracle.com>
Closes: https://lore.kernel.org/all/54a56c2e-a27c-45a0-b712-02a7bc7d2673@gmail.com/
Tested-by: Akira Yokosawa <akiyks@gmail.com>  # Sphinx 4.3.2, 5.3.0 and 6.2.1
Signed-off-by: default avatarJonathan Corbet <corbet@lwn.net>
Link: https://lore.kernel.org/r/20240215064109.1193556-1-vegard.nossum@oracle.com
parent 0df8669f
...@@ -29,10 +29,7 @@ all_languages = { ...@@ -29,10 +29,7 @@ all_languages = {
} }
class LanguagesNode(nodes.Element): class LanguagesNode(nodes.Element):
def __init__(self, current_language, *args, **kwargs): pass
super().__init__(*args, **kwargs)
self.current_language = current_language
class TranslationsTransform(Transform): class TranslationsTransform(Transform):
default_priority = 900 default_priority = 900
...@@ -49,7 +46,8 @@ class TranslationsTransform(Transform): ...@@ -49,7 +46,8 @@ class TranslationsTransform(Transform):
# normalize docname to be the untranslated one # normalize docname to be the untranslated one
docname = os.path.join(*components[2:]) docname = os.path.join(*components[2:])
new_nodes = LanguagesNode(all_languages[this_lang_code]) new_nodes = LanguagesNode()
new_nodes['current_language'] = all_languages[this_lang_code]
for lang_code, lang_name in all_languages.items(): for lang_code, lang_name in all_languages.items():
if lang_code == this_lang_code: if lang_code == this_lang_code:
...@@ -84,7 +82,7 @@ def process_languages(app, doctree, docname): ...@@ -84,7 +82,7 @@ def process_languages(app, doctree, docname):
html_content = app.builder.templates.render('translations.html', html_content = app.builder.templates.render('translations.html',
context={ context={
'current_language': node.current_language, 'current_language': node['current_language'],
'languages': languages, 'languages': languages,
}) })
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment