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