https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
Bug ID: 69664 Summary: WikibasePage.save fails on python2.6 Product: Pywikibot Version: core (2.0) Hardware: All OS: All Status: NEW Severity: normal Priority: Unprioritized Component: Wikidata Assignee: Pywikipedia-bugs@lists.wikimedia.org Reporter: jayvdb@gmail.com Web browser: --- Mobile Platform: ---
Following on from bug 66120, we now get a TypeError during save (and other Page write methods). The test added in the last changeset is identifying the issue:
ERROR: test_page_methods (__main__.TestPageMethods) Test ItemPage methods inherited from superclass Page. ---------------------------------------------------------------------- Traceback (most recent call last): File "tests/wikibase_tests.py", line 418, in test_page_methods self.assertRaises(pywikibot.PageNotSaved, self.wdp.save) File "/usr/local/lib/python2.6/site-packages/unittest2/case.py", line 475, in assertRaises callableObj(*args, **kwargs) File ".../pywikibot/__init__.py", line 476, in wrapper return method(*__args, **__kw) File ".../pywikibot/page.py", line 954, in save if not force and not self.botMayEdit(): File ".../pywikibot/page.py", line 883, in botMayEdit templates = self.templatesWithParams() File ".../pywikibot/__init__.py", line 476, in wrapper return method(*__args, **__kw) File ".../pywikibot/page.py", line 1257, in templatesWithParams templates = textlib.extract_templates_and_params(self.text) File ".../pywikibot/textlib.py", line 923, in extract_templates_and_params return extract_templates_and_params_regex(text) File ".../pywikibot/textlib.py", line 943, in extract_templates_and_params_regex thistxt = removeDisabledParts(text) File ".../pywikibot/textlib.py", line 293, in removeDisabledParts return toRemoveR.sub('', text) TypeError: expected string or buffer
That test hasnt caused an error for a while, but this test is against test.wikidata.org which has had a few other bugs needing fixing, and the server config appears to be changing frequently (getting better).
The error we see now is:
1. Page.save method calls botMayEdit 2. which calls templatesWithParams to look for {{nobots}} 3. which loads 'self.text' and 4. asks textlib.extract_templates_and_params() to extract all the templates
Page.text calls Page.get, which is supposed to return a string.
On a WikibasePage, .get returns a dict instead of a string.
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
Ricordisamoa ricordisamoa@openmailbox.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |CommodoreFabianus@gmx.de
--- Comment #1 from Ricordisamoa ricordisamoa@openmailbox.org --- *** Bug 70241 has been marked as a duplicate of this bug. ***
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
--- Comment #2 from Fabian CommodoreFabianus@gmx.de --- Currently I see there two “easy” fixes: One way to fix it would be in the second step to look either if text is a str/unicode.
The second would be to check if page is not a WikibasePage. But that one would break as soon as another Page subclass is introduced which also hasn't a text. Maybe it doesn't make sense that Wikibase is a subclass of Page, because the value stored internally are very different (but that now a bit late, because it's in the API now).
I'm not sure how redirects work actually. Would they return a string?
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
John Mark Vandenberg jayvdb@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- See Also| |https://bugzilla.wikimedia. | |org/show_bug.cgi?id=70978 Blocks| |70987
--- Comment #3 from John Mark Vandenberg jayvdb@gmail.com --- The same problem is happening on py3 win32
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
--- Comment #4 from Fabian CommodoreFabianus@gmx.de --- *** Bug 70978 has been marked as a duplicate of this bug. ***
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
Fabian CommodoreFabianus@gmx.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Summary|WikibasePage.save fails on |WikibasePage.save fails |python2.6 |without mwparserfromhell
--- Comment #5 from Fabian CommodoreFabianus@gmx.de --- When I
https://bugzilla.wikimedia.org/show_bug.cgi?id=69664
Fabian CommodoreFabianus@gmx.de changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|Pywikipedia-bugs@lists.wiki |CommodoreFabianus@gmx.de |media.org |
--- Comment #6 from Fabian CommodoreFabianus@gmx.de --- Okay that didn't go so well: What I meant to write was, that when mwparserfromhell is not installed it uses the regex which get's a dict in all versions of Python. I was able to reproduce the same error in Python 2.7.8.
But mwparserfromhell uses the string representation of the text so it quietly tries to interpret the dictionary, and as long as there is no 'template' code in any of the data it won't return any templates.
I might have a fix ready (at least in theory).
pywikipedia-bugs@lists.wikimedia.org