jenkins-bot has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1332465?usp=email )

Change subject: make_i18n_dict: Fix pathlib conversion regressions
......................................................................

make_i18n_dict: Fix pathlib conversion regressions

Create parent directories for a new i18n output tree and deserialize
existing JSON text with json.loads(). This restores the behavior from before
the pathlib conversion.

Change-Id: I650f508e9f67587264332214f3fb04c471e02f34
---
M scripts/maintenance/make_i18n_dict.py
A tests/make_i18n_dict_tests.py
2 files changed, 56 insertions(+), 2 deletions(-)

Approvals:
  jenkins-bot: Verified
  Xqt: Looks good to me, approved




diff --git a/scripts/maintenance/make_i18n_dict.py 
b/scripts/maintenance/make_i18n_dict.py
index 701caba..65877ee 100755
--- a/scripts/maintenance/make_i18n_dict.py
+++ b/scripts/maintenance/make_i18n_dict.py
@@ -132,14 +132,14 @@
         if not self.dict:
             self.run(quiet)
         json_dir = Path(config.base_dir, 'scripts/i18n', self.scriptname)
-        json_dir.mkdir(exist_ok=True)
+        json_dir.mkdir(parents=True, exist_ok=True)

         for lang in self.dict:
             new_dict = {}

             file_path = json_dir / f'{lang}.json'
             if file_path.is_file():
-                new_dict = json.load(file_path.read_text(encoding='utf-8'))
+                new_dict = json.loads(file_path.read_text(encoding='utf-8'))

             new_dict['@metadata'] = new_dict.get('@metadata', {'authors': []})
             new_dict.update(self.dict[lang])
diff --git a/tests/make_i18n_dict_tests.py b/tests/make_i18n_dict_tests.py
new file mode 100755
index 0000000..204ef6f
--- /dev/null
+++ b/tests/make_i18n_dict_tests.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python3
+#
+# (C) Pywikibot team, 2026
+#
+# Distributed under the terms of the MIT license.
+#
+"""Tests for the make_i18n_dict maintenance script."""
+from __future__ import annotations
+
+import json
+import unittest
+from pathlib import Path
+from tempfile import TemporaryDirectory
+from unittest.mock import patch
+
+from scripts.maintenance import make_i18n_dict
+from tests.aspects import TestCase
+
+
+class MakeI18nDictTestCase(TestCase):
+
+    """Test :class:`make_i18n_dict.i18nBot`."""
+
+    net = False
+
+    def test_to_json_creates_and_updates_file(self) -> None:
+        """Test creating directories and updating an existing JSON file."""
+        bot = object.__new__(make_i18n_dict.i18nBot)
+        bot.scriptname = 'sample'
+        bot.dict = {'en': {'sample-first': 'first'}}
+
+        with TemporaryDirectory() as directory:
+            with patch.object(make_i18n_dict.config, 'base_dir', directory):
+                bot.to_json()
+
+                file_path = Path(directory, 'scripts/i18n/sample/en.json')
+                data = json.loads(file_path.read_text(encoding='utf-8'))
+                data['@metadata']['authors'].extend(['mahveotm', 'xqt'])
+                file_path.write_text(json.dumps(data), encoding='utf-8')
+
+                bot.dict = {'en': {'sample-second': 'second'}}
+                bot.to_json()
+
+            data = json.loads(file_path.read_text(encoding='utf-8'))
+
+        self.assertEqual(data, {
+            '@metadata': {'authors': ['mahveotm', 'xqt']},
+            'sample-first': 'first',
+            'sample-second': 'second',
+        })
+
+
+if __name__ == '__main__':
+    unittest.main()

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1332465?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I650f508e9f67587264332214f3fb04c471e02f34
Gerrit-Change-Number: 1332465
Gerrit-PatchSet: 2
Gerrit-Owner: Mahveotm <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to