jenkins-bot has submitted this change and it was merged.

Change subject: use collections.OrderedDict instead of built-in dict for params
......................................................................


use collections.OrderedDict instead of built-in dict for params

to preserve their order
in both extract_templates_and_params()
and extract_templates_and_params_regex()

Bug: 55882
Change-Id: I4253824897f3fe4849ad09ed7e7931cf97e6e4a3
---
M pywikibot/textlib.py
M tests/textlib_tests.py
2 files changed, 14 insertions(+), 10 deletions(-)

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



diff --git a/pywikibot/textlib.py b/pywikibot/textlib.py
index 4535b4d..80942ec 100644
--- a/pywikibot/textlib.py
+++ b/pywikibot/textlib.py
@@ -20,6 +20,7 @@
     mwparserfromhell = False
 import pywikibot
 import datetime
+from collections import OrderedDict
 import re
 import sys
 if sys.version_info[0] == 2:
@@ -919,7 +920,7 @@
     code = mwparserfromhell.parse(text)
     result = []
     for template in code.filter_templates(recursive=True):
-        params = {}
+        params = OrderedDict()
         for param in template.params:
             params[unicode(param.name)] = unicode(param.value)
         result.append((unicode(template.name.strip()), params))
@@ -1041,7 +1042,7 @@
 
             # Parameters
             paramString = m.group('params')
-            params = {}
+            params = OrderedDict()
             numbered_param = 1
             if paramString:
                 # Replace wikilinks with markers
diff --git a/tests/textlib_tests.py b/tests/textlib_tests.py
index 06770d2..bbe7f5b 100644
--- a/tests/textlib_tests.py
+++ b/tests/textlib_tests.py
@@ -12,6 +12,7 @@
     mwparserfromhell = False
 import codecs
 import os
+from collections import OrderedDict
 
 import pywikibot
 import pywikibot.textlib as textlib
@@ -43,17 +44,19 @@
         if not (pywikibot.config.use_mwparserfromhell and mwparserfromhell):
             return  # We'll test the regex function in the test below
         func = textlib.extract_templates_and_params  # It's really long.
-        self.assertEqual(func('{{a}}'), [('a', {})])
-        self.assertEqual(func('{{a|b=c}}'), [('a', {'b': 'c'})])
-        self.assertEqual(func('{{a|b|c=d}}'), [('a', {u'1': 'b', 'c': 'd'})])
-        self.assertEqual(func('{{a|b={{c}}}}'), [(u'a', {u'b': u'{{c}}'}), 
('c', {})])
+        self.assertEqual(func('{{a}}'), [('a', OrderedDict())])
+        self.assertEqual(func('{{a|b=c}}'), [('a', OrderedDict((('b', 'c'), 
)))])
+        self.assertEqual(func('{{a|b|c=d}}'), [('a', OrderedDict((('1', 'b'), 
('c', 'd'))))])
+        self.assertEqual(func('{{a|b={{c}}}}'), [('c', {}), ('a', 
OrderedDict((('b', '{{c}}'), )))])
+        self.assertEqual(func('{{a|b=c|f=g|d=e|1=}}'), [('a', 
OrderedDict((('b', 'c'), ('f', 'g'), ('d', 'e'), ('1', ''))))])
 
     def testExtractTemplatesRegex(self):
         func = textlib.extract_templates_and_params_regex  # It's really long.
-        self.assertEqual(func('{{a}}'), [('a', {})])
-        self.assertEqual(func('{{a|b=c}}'), [('a', {'b': 'c'})])
-        self.assertEqual(func('{{a|b|c=d}}'), [('a', {u'1': 'b', 'c': 'd'})])
-        self.assertEqual(func('{{a|b={{c}}}}'), [('c', {}), (u'a', {u'b': 
u'{{c}}'})])
+        self.assertEqual(func('{{a}}'), [('a', OrderedDict())])
+        self.assertEqual(func('{{a|b=c}}'), [('a', OrderedDict((('b', 'c'), 
)))])
+        self.assertEqual(func('{{a|b|c=d}}'), [('a', OrderedDict((('1', 'b'), 
('c', 'd'))))])
+        self.assertEqual(func('{{a|b={{c}}}}'), [('c', {}), ('a', 
OrderedDict((('b', '{{c}}'), )))])
+        self.assertEqual(func('{{a|b=c|f=g|d=e|1=}}'), [('a', 
OrderedDict((('b', 'c'), ('f', 'g'), ('d', 'e'), ('1', ''))))])
 
     def testSpacesInSection(self):
         self.assertContains("enwiki_help_editing", u"Minor_edits")

-- 
To view, visit https://gerrit.wikimedia.org/r/126147
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I4253824897f3fe4849ad09ed7e7931cf97e6e4a3
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Ricordisamoa <[email protected]>
Gerrit-Reviewer: Strainu <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to