Build Update for wikimedia/pywikibot-core
-------------------------------------
Build: #2037
Status: Errored
Duration: 27 minutes and 51 seconds
Commit: 7aa8e18 (master)
Author: Fabian Neundorf
Message: [FIX] Tests: Allow no protected page
Because test.wikidata has only two protected pages at that point and
both aren't in the main namespace the tests error.
Change-Id: I713a1f722a4c0678e4f407ba09973dba473fe8f7
View the changeset: https://github.com/wikimedia/pywikibot-core/compare/6e887dd808d1...7aa8e187…
View the full build log and details: https://travis-ci.org/wikimedia/pywikibot-core/builds/53782720
--
You can configure recipients for build notifications in your .travis.yml file. See http://docs.travis-ci.com/user/notifications
jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] socketIO: Use older version to support WMF
......................................................................
[FIX] socketIO: Use older version to support WMF
The WMF is using socket.io 0.9 but the newest version of socketIO_client
(0.6.1) supports only socket.io 1.0. That causes a 404 error and makes
it unusuable. Use the latest version which still support 0.9. See also
T91393.
Bug: T85716
Change-Id: Icf10f7f907baaf346ad1e37400685853e4d774fe
---
M setup.py
1 file changed, 2 insertions(+), 1 deletion(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/setup.py b/setup.py
index 744405e..274cdc2 100644
--- a/setup.py
+++ b/setup.py
@@ -27,7 +27,8 @@
'IRC': [irc_dep],
'mwparserfromhell': ['mwparserfromhell>=0.3.3'],
'Tkinter': ['Pillow'],
- 'rcstream': ['socketIO-client'],
+ # 0.6.1 supports socket.io 1.0, but WMF is using 0.9 (T91393 and T85716)
+ 'rcstream': ['socketIO-client<0.6.1'],
}
if sys.version_info[0] == 2:
--
To view, visit https://gerrit.wikimedia.org/r/195537
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icf10f7f907baaf346ad1e37400685853e4d774fe
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] Request: Login when API is denied
......................................................................
[FIX] Request: Login when API is denied
When the API is denied for anonymous users it should try logging in and
then redo the request.
Change-Id: Ibb08dd7c1b6ba329a2e459cad1e1587ccc4b47fc
---
M pywikibot/data/api.py
M tests/api_tests.py
2 files changed, 27 insertions(+), 0 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 4394a13..741a75b 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -1327,6 +1327,10 @@
self._is_wikibase_error_retryable(result["error"]):
self.wait()
continue
+ # If readapidenied is returned try to login
+ if code == 'readapidenied' and self.site._loginstatus in (-3, -1):
+ self.site.login()
+ continue
# raise error
try:
pywikibot.log(u"API Error: query=\n%s"
diff --git a/tests/api_tests.py b/tests/api_tests.py
index 1611e93..215c750 100644
--- a/tests/api_tests.py
+++ b/tests/api_tests.py
@@ -11,6 +11,8 @@
import types
import pywikibot.data.api as api
+import pywikibot.family
+import pywikibot.site
from pywikibot.tools import MediaWikiVersion
from tests.aspects import (
@@ -633,6 +635,27 @@
self.assertEqual(req._data, data)
+class TestLazyLogin(TestCase):
+
+ """
+ Test that it tries to login when read API access is denied.
+
+ Because there is no such family configured it creates an AutoFamily and
+ BaseSite on it's own. It's testing against steward.wikimedia.org.
+ """
+
+ net = True
+ hostname = 'steward.wikimedia.org'
+
+ def test_access_denied(self):
+ """Test the query."""
+ fam = pywikibot.family.AutoFamily(
+ 'steward', 'https://steward.wikimedia.org/w/api.php')
+ site = pywikibot.site.APISite('steward', fam)
+ req = api.Request(site=site, action='query')
+ self.assertRaises(pywikibot.NoUsername, req.submit)
+
+
if __name__ == '__main__':
try:
unittest.main()
--
To view, visit https://gerrit.wikimedia.org/r/195300
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibb08dd7c1b6ba329a2e459cad1e1587ccc4b47fc
Gerrit-PatchSet: 3
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Legoktm <legoktm.wikipedia(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] Tests: Allow no protected page
......................................................................
[FIX] Tests: Allow no protected page
Because test.wikidata has only two protected pages at that point and
both aren't in the main namespace the tests error.
Change-Id: I713a1f722a4c0678e4f407ba09973dba473fe8f7
---
M tests/site_tests.py
1 file changed, 3 insertions(+), 0 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/site_tests.py b/tests/site_tests.py
index f6933ba..db78da7 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -715,6 +715,9 @@
for level in all_levels:
if list(site.protectedpages(type='edit', level=level, total=1)):
levels.add(level)
+ if not levels:
+ raise unittest.SkipTest('The site "{0}" has no protected pages in '
+ 'main namespace.'.format(site))
# select one level which won't yield all pages from above
level = next(iter(levels))
if len(levels) == 1:
--
To view, visit https://gerrit.wikimedia.org/r/195532
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I713a1f722a4c0678e4f407ba09973dba473fe8f7
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [IMPROV] Implement some compat methods
......................................................................
[IMPROV] Implement some compat methods
This adds and implements some methods which were in compat but not in
core.
Change-Id: Ib6c80c6e6ce5bcd711b62d39e30b75789264f977
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 95 insertions(+), 0 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
XZise: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index 90897fe..f96a215 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -2758,6 +2758,31 @@
"""
return self.tokens[tokentype]
+ @deprecated("the 'tokens' property")
+ def getToken(self, getalways=True, getagain=False, sysop=False):
+ """DEPRECATED: Get edit token."""
+ if self.username(sysop) != self.user():
+ raise ValueError('The token for {0} was requested but only the '
+ 'token for {1} can be retrieved.'.format(
+ self.username(sysop), self.user()))
+ if not getalways:
+ raise ValueError('In pywikibot/core getToken does not support the '
+ 'getalways parameter.')
+ token = self.validate_tokens(['edit'])[0]
+ if getagain and token in self.tokens:
+ # invalidate token
+ del self.tokens._tokens[self.user()][token]
+ return self.tokens[token]
+
+ @deprecated("the 'tokens' property")
+ def getPatrolToken(self, sysop=False):
+ """DEPRECATED: Get patrol token."""
+ if self.username(sysop) != self.user():
+ raise ValueError('The token for {0} was requested but only the '
+ 'token for {1} can be retrieved.'.format(
+ self.username(sysop), self.user()))
+ return self.tokens['patrol']
+
# following group of methods map more-or-less directly to API queries
def pagebacklinks(self, page, followRedirects=False, filterRedirects=None,
@@ -5288,6 +5313,35 @@
step=step, total=total)
return lrgen
+ @deprecated_args(lvl='level')
+ def protectedpages(self, namespace=0, type='edit', level=False, total=None):
+ """
+ Return protected pages depending on protection level and type.
+
+ For protection types which aren't 'create' it uses L{APISite.allpages},
+ while it uses for 'create' the 'query+protectedtitles' module.
+
+ @param namespaces: The searched namespace.
+ @type namespaces: int or Namespace or str
+ @param type: The protection type to search for (default 'edit').
+ @type type: str
+ @param level: The protection level (like 'autoconfirmed'). If False it
+ shows all protection levels.
+ @type level: str or False
+ @return: The pages which are protected.
+ @rtype: generator of Page
+ """
+ namespaces = Namespace.resolve(namespace, self.namespaces)
+ # always assert that, so we are be sure that type could be 'create'
+ assert('create' in self.protection_types())
+ if type == 'create':
+ return self._generator(
+ api.PageGenerator, type_arg='protectedtitles',
+ namespaces=namespaces, gptlevel=level, total=total)
+ else:
+ return self.allpages(namespace=namespaces[0], protect_level=level,
+ protect_type=type, total=total)
+
class DataSite(APISite):
diff --git a/tests/site_tests.py b/tests/site_tests.py
index b3ac597..bcc2e51 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -692,6 +692,43 @@
site.lock_page(page=p1, block=False)
site.unlock_page(page=p1)
+ def test_protectedpages_create(self):
+ """Test that protectedpages returns protected page titles."""
+ pages = list(self.get_site().protectedpages(type='create', total=10))
+ for page in pages:
+ self.assertFalse(page.exists())
+ self.assertLessEqual(len(pages), 10)
+
+ def test_protectedpages_edit(self):
+ """Test that protectedpages returns protected pages."""
+ site = self.get_site()
+ pages = list(site.protectedpages(type='edit', total=10))
+ for page in pages:
+ self.assertTrue(page.exists())
+ self.assertIn('edit', page.protection())
+ self.assertLessEqual(len(pages), 10)
+
+ def test_protectedpages_edit_level(self):
+ site = self.get_site()
+ levels = set()
+ all_levels = site.protection_levels().difference([''])
+ for level in all_levels:
+ if list(site.protectedpages(type='edit', level=level, total=1)):
+ levels.add(level)
+ # select one level which won't yield all pages from above
+ level = next(iter(levels))
+ if len(levels) == 1:
+ # if only one level found, then use any other except that
+ level = next(iter(all_levels.difference([level])))
+ invalid_levels = all_levels.difference([level])
+ pages = list(site.protectedpages(type='edit', level=level, total=10))
+ for page in pages:
+ self.assertTrue(page.exists())
+ self.assertIn('edit', page.protection())
+ self.assertEqual(page.protection()['edit'][0], level)
+ self.assertNotIn(page.protection()['edit'][0], invalid_levels)
+ self.assertLessEqual(len(pages), 10)
+
class TestImageUsage(DefaultSiteTestCase):
@@ -1460,6 +1497,10 @@
def testInvalidToken(self):
self.assertRaises(pywikibot.Error, lambda t: self.mysite.tokens[t], "invalidtype")
+ def test_deprecated_token(self):
+ self.assertEqual(self.mysite.getToken(), self.mysite.tokens['edit'])
+ self.assertEqual(self.mysite.getPatrolToken(), self.mysite.tokens['patrol'])
+
class TestSiteExtensions(WikimediaDefaultSiteTestCase):
--
To view, visit https://gerrit.wikimedia.org/r/191479
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ib6c80c6e6ce5bcd711b62d39e30b75789264f977
Gerrit-PatchSet: 6
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] Win32 UI: Don't encode in Python 3
......................................................................
[FIX] Win32 UI: Don't encode in Python 3
The text has to be encoded for the streams in Python 2, but in Python 3
the streams like sys.stdout are working on Unicode strings.
Bug: T91921
Change-Id: I20480388fecc5dd0d476ce7896a5e5d410391270
---
M pywikibot/userinterfaces/terminal_interface_win32.py
1 file changed, 8 insertions(+), 2 deletions(-)
Approvals:
Mpaa: Looks good to me, approved
Dalba: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/pywikibot/userinterfaces/terminal_interface_win32.py b/pywikibot/userinterfaces/terminal_interface_win32.py
index 7e3fd89..7c0dd98 100755
--- a/pywikibot/userinterfaces/terminal_interface_win32.py
+++ b/pywikibot/userinterfaces/terminal_interface_win32.py
@@ -8,6 +8,7 @@
__version__ = '$Id$'
import re
+import sys
from . import terminal_interface_base
try:
@@ -72,7 +73,10 @@
tagM = colorTagR.search(text)
if tagM:
# print the text up to the tag.
- targetStream.write(text[:tagM.start()].encode(self.encoding, 'replace'))
+ text_before_tag = text[:tagM.start()]
+ if sys.version_info[0] == 2:
+ text_before_tag = text_before_tag.encode(self.encoding, 'replace')
+ targetStream.write(text_before_tag)
newColor = tagM.group('name')
if newColor == 'default':
if len(colorStack) > 0:
@@ -88,7 +92,9 @@
ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, windowsColors[newColor])
text = text[tagM.end():]
# print the rest of the text
- targetStream.write(text.encode(self.encoding, 'replace'))
+ if sys.version_info[0] == 2:
+ text = text.encode(self.encoding, 'replace')
+ targetStream.write(text)
# just to be sure, reset the color
ctypes.windll.kernel32.SetConsoleTextAttribute(std_out_handle, windowsColors['default'])
--
To view, visit https://gerrit.wikimedia.org/r/195086
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I20480388fecc5dd0d476ce7896a5e5d410391270
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: Dalba <dalba.wiki(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Ricordisamoa <ricordisamoa(a)openmailbox.org>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: jenkins-bot <>