jenkins-bot has submitted this change and it was merged.
Change subject: Remove pwb installation from setup.py
......................................................................
Remove pwb installation from setup.py
setup.py install is run by pip or directly by the user to install
a package, typically into a system wide location. As this is a
system wide operation, it should not be followed by a per-user
configuration task like calling generate_user_files.py,
especially as it requires user interaction.
As a installed library, pywikibot should avoid requiring user
configuration files.
Change-Id: Ibcab9f783cbe8299f104c690466be32e22aa4c1a
---
M setup.py
1 file changed, 0 insertions(+), 20 deletions(-)
Approvals:
John Vandenberg: Looks good to me, but someone else must approve
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/setup.py b/setup.py
index 83a2119..1baafb7 100644
--- a/setup.py
+++ b/setup.py
@@ -85,23 +85,6 @@
use_setuptools()
from setuptools import setup, find_packages
-from setuptools.command import install
-
-
-class pwb_install(install.install):
-
- """
- Setuptools' install command subclassed to automatically call
- `generate_user_files.py` after installing the package.
- """
- def run(self):
- install.install.do_egg_install(self)
-
- if sys.stdin.isatty() and sys.stdout.isatty():
- import subprocess
- python = sys.executable
- python = python.replace("pythonw.exe", "python.exe") # for Windows
- subprocess.call([python, "generate_user_files.py"])
name = 'pywikibot'
version = '2.0b2'
@@ -135,8 +118,5 @@
'Environment :: Console',
'Programming Language :: Python :: 2.7'
],
- cmdclass={
- 'install': pwb_install
- },
use_2to3=False
)
--
To view, visit https://gerrit.wikimedia.org/r/170308
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibcab9f783cbe8299f104c690466be32e22aa4c1a
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(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: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [FIX] i18n: remove typo in sting to string
......................................................................
[FIX] i18n: remove typo in sting to string
Change-Id: I815ba1827c2d7e2be0d3201e89fa67c9ed096015
---
M pywikibot/i18n.py
1 file changed, 3 insertions(+), 3 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py
index 1e2fda9..23f218e 100644
--- a/pywikibot/i18n.py
+++ b/pywikibot/i18n.py
@@ -417,15 +417,15 @@
msg = {
'en': {
- # number value as format sting is allowed
+ # number value as format string is allowed
'test-plural': u'Bot: Changing %(num)s {{PLURAL:%(num)d|page|pages}}.',
},
'nl': {
- # format sting inside PLURAL tag is allowed
+ # format string inside PLURAL tag is allowed
'test-plural': u'Bot: Pas {{PLURAL:num|1 pagina|%(num)d pagina\'s}} aan.',
},
'fr': {
- # additional sting inside or outside PLURAL tag is allowed
+ # additional string inside or outside PLURAL tag is allowed
'test-plural': u'Robot: Changer %(descr)s {{PLURAL:num|une page|quelques pages}}.',
},
}
--
To view, visit https://gerrit.wikimedia.org/r/170573
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I815ba1827c2d7e2be0d3201e89fa67c9ed096015
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: Siebrand <siebrand(a)kitano.nl>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: More logging for retryable MediaWiki exceptions
......................................................................
More logging for retryable MediaWiki exceptions
The api layer retries the request when it sees a MediaWiki exception
of types DBConnectionError, DBQueryError, and ReadOnlyError, and it
doesnt log the details of the request/response. For other types of
MediaWiki exception, it only logs them, without a user-visible warning.
However as seen by bug 72850, even these retryable exceptions can be
permanent errors caused by MediaWiki bugs. We need bug reports to
mention these MediaWiki exceptions when they occur, so this change
uses pywikibot.error like happens for all non-fatal HTTP errors
other than 503, and log the request and response.
Also use bug 62974 as a reference for DBConnectionError, rather than
two revision number references to the mediawiki code review system.
Change-Id: Ia575f87f25e38619b4a0c047b2bdb6ccc5450761
---
M pywikibot/data/api.py
1 file changed, 15 insertions(+), 11 deletions(-)
Approvals:
Mpaa: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 167a064..a685848 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -671,20 +671,24 @@
if code.startswith(u'internal_api_error_'):
class_name = code[len(u'internal_api_error_'):]
- if class_name in ['DBConnectionError', # r 4984 & r 4580
- 'DBQueryError', # bug 58158
- 'ReadOnlyError' # bug 59227
- ]:
+ retry = class_name in ['DBConnectionError', # bug 62974
+ 'DBQueryError', # bug 58158
+ 'ReadOnlyError' # bug 59227
+ ]
- pywikibot.log(u'MediaWiki exception %s; retrying.'
- % class_name)
+ pywikibot.error("Detected MediaWiki API exception %s%s"
+ % (class_name,
+ "; retrying" if retry else "; raising"))
+ pywikibot.log(u"MediaWiki exception %s details:\n"
+ u" query=\n%s\n"
+ u" response=\n%s"
+ % (class_name,
+ pprint.pformat(self._params),
+ result))
+
+ if retry:
self.wait()
continue
-
- pywikibot.log(u"MediaWiki exception %s: query=\n%s"
- % (class_name,
- pprint.pformat(self._params)))
- pywikibot.log(u" response=\n%s" % result)
raise APIMWException(class_name, info, **result["error"])
--
To view, visit https://gerrit.wikimedia.org/r/170516
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia575f87f25e38619b4a0c047b2bdb6ccc5450761
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: 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: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Minimum version is MW API Version 1.14
......................................................................
Minimum version is MW API Version 1.14
Document that MW API version 1.14 is the lowest viable API known to
pass most tests.
Change-Id: I8242dff60d704a7b53057df857e374aba4b27ef7
---
M README.rst
1 file changed, 5 insertions(+), 3 deletions(-)
Approvals:
John Vandenberg: Looks good to me, but someone else must approve
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/README.rst b/README.rst
index 131da86..d529a53 100644
--- a/README.rst
+++ b/README.rst
@@ -2,9 +2,11 @@
===================
The Pywikibot framework is a Python library that interfaces with the
-`MediaWiki API <https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page>`_. Also included are
-various general function scripts that can be adapted for different
-tasks.
+`MediaWiki API <https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page>`_
+version 1.14 or higher.
+
+Also included are various general function scripts that can be adapted for
+different tasks.
Quick start
-----------
--
To view, visit https://gerrit.wikimedia.org/r/170510
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I8242dff60d704a7b53057df857e374aba4b27ef7
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(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: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Split the allusers test into multiple tests
......................................................................
Split the allusers test into multiple tests
One part of the all users tests fail on 1.12-1.15; it should be
a separate test the other parts of the allusers test pass.
Bug: 72850
Change-Id: Ibe825cdc186becb083b2fbb45c02ce2db152bafb
---
M tests/site_tests.py
1 file changed, 14 insertions(+), 2 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 0c13092..df22137 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -486,7 +486,7 @@
# self.assertIsInstance(cat, pywikibot.Category)
# self.assertLessEqual(cat.title(withNamespace=False), "Hij")
- def testAllUsers(self):
+ def test_allusers(self):
"""Test the site.allusers() method."""
mysite = self.get_site()
au = list(mysite.allusers(total=10))
@@ -496,19 +496,31 @@
self.assertIn("name", user)
self.assertIn("editcount", user)
self.assertIn("registration", user)
+
+ def test_allusers_with_start(self):
+ """Test the site.allusers(start=..) method."""
+ mysite = self.get_site()
for user in mysite.allusers(start="B", total=5):
self.assertIsInstance(user, dict)
self.assertIn("name", user)
self.assertGreaterEqual(user["name"], "B")
self.assertIn("editcount", user)
self.assertIn("registration", user)
+
+ def test_allusers_with_prefix(self):
+ """Test the site.allusers(prefix=..) method."""
+ mysite = self.get_site()
for user in mysite.allusers(prefix="C", total=5):
self.assertIsInstance(user, dict)
self.assertIn("name", user)
self.assertTrue(user["name"].startswith("C"))
self.assertIn("editcount", user)
self.assertIn("registration", user)
- for user in mysite.allusers(prefix="D", group="sysop", total=5):
+
+ def _test_allusers_with_group(self):
+ """Test the site.allusers(group=..) method."""
+ mysite = self.get_site()
+ for user in mysite.allusers(prefix="D", group="bot", total=5):
self.assertIsInstance(user, dict)
self.assertIn("name", user)
self.assertTrue(user["name"].startswith("D"))
--
To view, visit https://gerrit.wikimedia.org/r/170514
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ibe825cdc186becb083b2fbb45c02ce2db152bafb
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: Change pagegenerator tests to dry tests
......................................................................
Change pagegenerator tests to dry tests
Adjust NamespaceFilterPageGenerator such that the site parameter
is only needed if namespaces contains strings that are not integers.
Update many of the pagegenerators tests to work using a dry site.
Change-Id: I25ee1f17f6c0478da43c8c2e1576b69f0140b737
---
M pywikibot/pagegenerators.py
M tests/pagegenerators_tests.py
2 files changed, 31 insertions(+), 17 deletions(-)
Approvals:
Ladsgroup: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index b79dfda..928652d 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -871,6 +871,7 @@
@param total: Maxmum number of pages to retrieve in total
@type total: int
@param namespaces: list of namespace numbers to fetch contribs from
+ @type namespaces: list of int
@param site: Site for generator results.
@type site: L{pywikibot.site.BaseSite}
@@ -894,11 +895,12 @@
NOTE: API-based generators that have a "namespaces" parameter perform
namespace filtering more efficiently than this generator.
- @param site: Site for generator results.
+ @param namespaces: list of namespace numbers to limit results
+ @type namespaces: list of int
+ @param site: Site for generator results, only needed if
+ namespaces contains namespace names.
@type site: L{pywikibot.site.BaseSite}
"""
- if site is None:
- site = pywikibot.Site()
if isinstance(namespaces, (int, basestring)):
namespaces = [namespaces]
# convert namespace names to namespace numbers
@@ -909,6 +911,9 @@
# namespace might be given as str representation of int
index = int(ns)
except ValueError:
+ # FIXME: deprecate providing strings as namespaces
+ if site is None:
+ site = pywikibot.Site()
index = site.getNamespaceIndex(ns)
if index is None:
raise ValueError(u'Unknown namespace: %s' % ns)
diff --git a/tests/pagegenerators_tests.py b/tests/pagegenerators_tests.py
index 96e5dfa..aba6751 100755
--- a/tests/pagegenerators_tests.py
+++ b/tests/pagegenerators_tests.py
@@ -26,7 +26,7 @@
family = 'wikipedia'
code = 'en'
- cached = True
+ dry = True
titles = [
# just a bunch of randomly selected titles
@@ -58,49 +58,49 @@
def test_PagesFromTitlesGenerator(self):
self.assertFunction("PagesFromTitlesGenerator")
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
self.assertEqual(len(self.titles), len(tuple(gen)))
def test_NamespaceFilterPageGenerator(self):
self.assertFunction("NamespaceFilterPageGenerator")
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.NamespaceFilterPageGenerator(gen, 0)
self.assertEqual(len(tuple(gen)), 3)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.NamespaceFilterPageGenerator(gen, 1)
self.assertEqual(len(tuple(gen)), 4)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.NamespaceFilterPageGenerator(gen, 10)
self.assertEqual(len(tuple(gen)), 6)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.NamespaceFilterPageGenerator(gen, (1, 10))
self.assertEqual(len(tuple(gen)), 10)
def test_RegexFilterPageGenerator(self):
self.assertFunction("RegexFilterPageGenerator")
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, '/doc')
self.assertEqual(len(tuple(gen)), 2)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, '/doc',
quantifier='none')
self.assertEqual(len(tuple(gen)), 11)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'])
self.assertEqual(len(tuple(gen)), 4)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'],
quantifier='none')
self.assertEqual(len(tuple(gen)), 9)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, ['/doc', '/meta'],
quantifier='all')
self.assertEqual(len(tuple(gen)), 0)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, ['Template', '/meta'],
quantifier='all')
self.assertEqual(len(tuple(gen)), 1)
- gen = pagegenerators.PagesFromTitlesGenerator(self.titles)
+ gen = pagegenerators.PagesFromTitlesGenerator(self.titles, self.site)
gen = pagegenerators.RegexFilterPageGenerator(gen, ['template', '/meta'],
quantifier='any')
self.assertEqual(len(tuple(gen)), 4)
@@ -139,8 +139,17 @@
quantifier='none')
self.assertEqual(len(tuple(gen)), 9)
+
+class TestRepeatingGenerator(TestCase):
+
+ """Test RepeatingGenerator."""
+
+ family = 'wikipedia'
+ code = 'en'
+
+ cached = True
+
def test_RepeatingGenerator(self):
- self.assertFunction("RepeatingGenerator")
# site.recentchanges() includes external edits (from wikidata),
# so total=4 is not too high
items = list(
--
To view, visit https://gerrit.wikimedia.org/r/169660
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I25ee1f17f6c0478da43c8c2e1576b69f0140b737
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: 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 <>