|
From: <mi...@us...> - 2026-09-02 15:46:40
|
Revision: 10398
http://sourceforge.net/p/docutils/code/10398
Author: milde
Date: 2026-09-02 15:46:37 +0000 (Wed, 02 Sep 2026)
Log Message:
-----------
Stop `languages.get_language()` from returning incompatible modules.
`get_language()` now returns ``None`` if the module found is not a
compatible translation definitions module. Fixes [bugs:#522].
Modified Paths:
--------------
trunk/docutils/HISTORY.rst
trunk/docutils/docutils/languages/__init__.py
trunk/docutils/test/test_language.py
Modified: trunk/docutils/HISTORY.rst
===================================================================
--- trunk/docutils/HISTORY.rst 2026-08-31 08:26:50 UTC (rev 10397)
+++ trunk/docutils/HISTORY.rst 2026-09-02 15:46:37 UTC (rev 10398)
@@ -49,6 +49,11 @@
- Remove `BinaryFileOutput`. Use `FileOutput`
(works with `bytes` since Docutils 0.20).
+* docutils/languages/__init__.py
+
+ - `get_language()` now returns ``None`` if the module found is not a
+ compatible language definitions module. Fixes bug #522.
+
* docutils/nodes.py
- Remove "name" from `reference.valid_attributes`.
Modified: trunk/docutils/docutils/languages/__init__.py
===================================================================
--- trunk/docutils/docutils/languages/__init__.py 2026-08-31 08:26:50 UTC (rev 10397)
+++ trunk/docutils/docutils/languages/__init__.py 2026-09-02 15:46:37 UTC (rev 10398)
@@ -55,8 +55,8 @@
self.cache: dict[str, LanguageModuleT] = {}
def import_from_packages(self, name: str, reporter: Reporter = None
- ) -> LanguageModuleT:
- """Try loading module `name` from `self.packages`."""
+ ) -> LanguageModuleT|None:
+ """Try loading language module `name` from `self.packages`."""
module = None
for package in self.packages:
try:
@@ -70,6 +70,8 @@
reporter.info(f'Module "{package+name}" not found.')
continue
break
+ else:
+ module = None
return module
@overload
Modified: trunk/docutils/test/test_language.py
===================================================================
--- trunk/docutils/test/test_language.py 2026-08-31 08:26:50 UTC (rev 10397)
+++ trunk/docutils/test/test_language.py 2026-09-02 15:46:37 UTC (rev 10398)
@@ -116,5 +116,27 @@
self.assertIn(name, set(module.roles.values()))
+class LanguageTestCase(unittest.TestCase):
+
+ def test_get_language_fallback(self):
+ # Return fallback (English) for unsupported languages ...
+ module = languages.get_language('xx-xxx')
+ self.assertEqual(module, languages.en)
+ # also, if there is an equally named module in the Python path.
+ module = languages.get_language('re') # the regular expressions module
+ self.assertEqual(module, languages.en)
+
+
+class RstLanguageTestCase(unittest.TestCase):
+
+ def test_get_language_fallback(self):
+ # Return None for unsupported languages ...
+ module = rst_languages.get_language('xx-xxx')
+ self.assertEqual(module, None)
+ # also, if there is an equally named module in the Python path.
+ module = rst_languages.get_language('re') # regular expressions module
+ self.assertEqual(module, None)
+
+
if __name__ == '__main__':
unittest.main()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|