jenkins-bot has submitted this change and it was merged.
Change subject: (bug 55127) Implement network timeouts
......................................................................
(bug 55127) Implement network timeouts
A hung connection will now raise an SSLError (or equivalent
for HTTP connections) after 120 seconds (config.socket_timeout)
Change-Id: Ief38beaf912d4dd1c267eff46e2b73bff8edc447
---
M pywikibot/comms/threadedhttp.py
1 file changed, 3 insertions(+), 0 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/comms/threadedhttp.py b/pywikibot/comms/threadedhttp.py
index 90d4de7..0447b77 100644
--- a/pywikibot/comms/threadedhttp.py
+++ b/pywikibot/comms/threadedhttp.py
@@ -150,6 +150,8 @@
will be used when not supplied.
@param max_redirects: (optional) The maximum number of redirects to
follow. 5 is default.
+ @param timeout: (optional) Socket timeout in seconds. Default is
+ config.socket_timeout. Disable with None.
"""
try:
@@ -163,6 +165,7 @@
self.max_redirects = kwargs.pop('max_redirects', 5)
if len(args) < 3:
kwargs.setdefault('proxy_info', config.proxy)
+ kwargs.setdefault('timeout', config.socket_timeout)
httplib2.Http.__init__(self, *args, **kwargs)
def request(self, uri, method="GET", body=None, headers=None,
--
To view, visit https://gerrit.wikimedia.org/r/110853
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ief38beaf912d4dd1c267eff46e2b73bff8edc447
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: (Bug 60406) - site.loadrevisions(): None is returned if no Page param is passed
......................................................................
(Bug 60406) - site.loadrevisions(): None is returned if no Page param is
passed
API params passed to API.Generator in keywd dict
instead of modifying gen.request.param.
Change-Id: Ia6bd0f191070c51ae0f7c0e945870a462f1640ec
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 74 insertions(+), 49 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index e3b505b..20ee4bb 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -1833,14 +1833,14 @@
**cmargs)
return cmgen
- def loadrevisions(self, page=None, getText=False, revids=None,
+ def loadrevisions(self, page, getText=False, revids=None,
startid=None, endid=None, starttime=None,
endtime=None, rvdir=None, user=None, excludeuser=None,
section=None, sysop=False, step=None, total=None):
"""Retrieve and store revision information.
By default, retrieves the last (current) revision of the page,
- I{unless} any of the optional parameters revids, startid, endid,
+ unless any of the optional parameters revids, startid, endid,
starttime, endtime, rvdir, user, excludeuser, or limit are
specified. Unless noted below, all parameters not specified
default to False.
@@ -1857,9 +1857,9 @@
(getText must be True); section must be given by number (top of
the article is section 0), not name
@type section: int
- @param revids: retrieve only the specified revision ids (required
- unless page is specified)
- @type revids: list of ints
+ @param revids: retrieve only the specified revision ids (raise
+ Exception if any of revids does not correspond to page
+ @type revids: an int, a str or a list of ints or strings
@param startid: retrieve revisions starting with this revid
@param endid: stop upon retrieving this revid
@param starttime: retrieve revisions starting at this Timestamp
@@ -1884,9 +1884,6 @@
total is None) # if True, retrieving current revision
# check for invalid argument combinations
- if page is None and revids is None:
- raise ValueError(
- "loadrevisions: either page or revids argument required")
if (startid is not None or endid is not None) and \
(starttime is not None or endtime is not None):
raise ValueError(
@@ -1906,54 +1903,56 @@
raise ValueError(
"loadrevisions: endid > startid with rvdir=False")
- # assemble API request
+ rvargs = dict(type_arg=u"info|revisions")
+
+ if getText:
+ rvargs[u"rvprop"] = u"ids|flags|timestamp|user|comment|content"
+ if section is not None:
+ rvargs[u"rvsection"] = unicode(section)
+
if revids is None:
rvtitle = page.title(withSection=False).encode(self.encoding())
- rvgen = self._generator(api.PropertyGenerator,
- type_arg=u"info|revisions",
- titles=rvtitle, step=step, total=total)
+ rvargs[u"titles"] = rvtitle
else:
if isinstance(revids, (int, basestring)):
ids = unicode(revids)
else:
ids = u"|".join(unicode(r) for r in revids)
- rvgen = self._generator(api.PropertyGenerator,
- type_arg=u"info|revisions", revids=ids,
- step=step, total=total)
- if getText:
- rvgen.request[u"rvprop"] = u"ids|flags|timestamp|user|comment|content"
- if section is not None:
- rvgen.request[u"rvsection"] = unicode(section)
+ rvargs[u"revids"] = ids
+
+ if rvdir:
+ rvargs[u"rvdir"] = u"newer"
+ elif rvdir is not None:
+ rvargs[u"rvdir"] = u"older"
+ if startid:
+ rvargs[u"rvstartid"] = startid
+ if endid:
+ rvargs[u"rvendid"] = endid
+ if starttime:
+ rvargs[u"rvstart"] = str(starttime)
+ if endtime:
+ rvargs[u"rvend"] = str(endtime)
+ if user:
+ rvargs[u"rvuser"] = user
+ elif excludeuser:
+ rvargs[u"rvexcludeuser"] = excludeuser
+ # TODO if sysop: something
+
+ # assemble API request
+ rvgen = self._generator(api.PropertyGenerator,
+ step=step, total=total, **rvargs)
+
if latest or "revids" in rvgen.request:
rvgen.set_maximum_items(-1) # suppress use of rvlimit parameter
- if rvdir:
- rvgen.request[u"rvdir"] = u"newer"
- elif rvdir is not None:
- rvgen.request[u"rvdir"] = u"older"
- if startid:
- rvgen.request[u"rvstartid"] = startid
- if endid:
- rvgen.request[u"rvendid"] = endid
- if starttime:
- rvgen.request[u"rvstart"] = str(starttime)
- if endtime:
- rvgen.request[u"rvend"] = str(endtime)
- if user:
- rvgen.request[u"rvuser"] = user
- elif excludeuser:
- rvgen.request[u"rvexcludeuser"] = excludeuser
- # TODO if sysop: something
+
for pagedata in rvgen:
- if page is not None:
- if not self.sametitle(pagedata['title'],
- page.title(withSection=False)):
- raise Error(
- u"loadrevisions: Query on %s returned data on '%s'"
- % (page, pagedata['title']))
- if "missing" in pagedata:
- raise NoPage(page)
- else:
- page = pywikibot.Page(self, pagedata['title'])
+ if not self.sametitle(pagedata['title'],
+ page.title(withSection=False)):
+ raise Error(
+ u"loadrevisions: Query on %s returned data on '%s'"
+ % (page, pagedata['title']))
+ if "missing" in pagedata:
+ raise NoPage(page)
api.update_page(page, pagedata)
def pageinterwiki(self, page):
diff --git a/tests/site_tests.py b/tests/site_tests.py
index 8b8498e..6c93c0c 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -1003,6 +1003,32 @@
self.assertTrue(hasattr(self.mainpage, "_revisions"))
self.assertTrue(self.mainpage._revid in self.mainpage._revisions)
self.assertEqual(len(self.mainpage._revisions), 15)
+ self.assertEqual(self.mainpage._text, None)
+
+ def testLoadRevisions_getText(self):
+ """Test the site.loadrevisions() method with getText=True"""
+
+ self.mysite.loadrevisions(self.mainpage, getText=True, total=5)
+ self.assertTrue(len(self.mainpage._text) > 0)
+
+ def testLoadRevisions_revids(self):
+ """Test the site.loadrevisions() method, listing based on revid."""
+
+ #revids as list of int
+ self.mysite.loadrevisions(self.mainpage, revids=[139992, 139993])
+ self.assertTrue(all(rev in self.mainpage._revisions for rev in [139992, 139993]))
+ #revids as list of str
+ self.mysite.loadrevisions(self.mainpage, revids=['139994', '139995'])
+ self.assertTrue(all(rev in self.mainpage._revisions for rev in [139994, 139995]))
+ #revids as int
+ self.mysite.loadrevisions(self.mainpage, revids=140000)
+ self.assertTrue(140000 in self.mainpage._revisions)
+ #revids as str
+ self.mysite.loadrevisions(self.mainpage, revids='140001')
+ self.assertTrue(140001 in self.mainpage._revisions)
+ #revids belonging to a different page raises Exception
+ self.assertRaises(pywikibot.Error, self.mysite.loadrevisions,
+ self.mainpage, revids=130000)
def testLoadRevisions_querycontinue(self):
"""Test the site.loadrevisions() method with query-continue"""
@@ -1017,7 +1043,7 @@
self.assertEqual(len(self.mainpage._revisions), 15)
def testLoadRevisions_timestamp(self):
- """Test the site.loadrevisions() method, listing based con timestamp."""
+ """Test the site.loadrevisions() method, listing based on timestamp."""
self.mysite.loadrevisions(self.mainpage, rvdir=True, total=15)
self.assertEqual(len(self.mainpage._revisions), 15)
@@ -1037,8 +1063,8 @@
self.mainpage, rvdir=False,
starttime="2002-01-01T00:00:00Z", endtime="2002-02-01T000:00:00Z")
- def testLoadRevisions_revid(self):
- """Test the site.loadrevisions() method, listing based con revid."""
+ def testLoadRevisions_rev_id(self):
+ """Test the site.loadrevisions() method, listing based on rev_id."""
self.mysite.loadrevisions(self.mainpage, rvdir=True, total=15)
self.assertEqual(len(self.mainpage._revisions), 15)
--
To view, visit https://gerrit.wikimedia.org/r/109955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia6bd0f191070c51ae0f7c0e945870a462f1640ec
Gerrit-PatchSet: 3
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Mpaa <mpaa.wiki(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: Fix translations in i18n example
......................................................................
Fix translations in i18n example
Change-Id: I93005d0314af89623ac03752c6f681991934c311
---
M pywikibot/i18n.py
1 file changed, 3 insertions(+), 3 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/i18n.py b/pywikibot/i18n.py
index e44d3f7..56fb9da 100644
--- a/pywikibot/i18n.py
+++ b/pywikibot/i18n.py
@@ -401,11 +401,11 @@
},
'nl': {
# format sting inside PLURAL tag is allowed
- 'test-changing': u'Bot: Endrer {{PLURAL:num|1 pagina|%(num)d pagina\'s}}.',
+ 'test-changing': u'Bot: Pas {{PLURAL:num|1 pagina|%(num)d pagina\'s}} aan.',
},
'fr': {
# additional sting inside or outside PLURAL tag is allowed
- 'test-changing': u'Robot: Changer %(descr)s {{PLURAL:num|une page|un peu pages}}.',
+ 'test-changing': u'Robot: Changer %(descr)s {{PLURAL:num|une page|quelques pages}}.',
},
}
#use a number
@@ -422,7 +422,7 @@
Robot: Changer seulement une pages.
#use format strings also outside
>>> i18n.twntranslate('fr', 'test-changing', 10) % {'descr': 'seulement'}
- Robot: Changer seulement un peu pages.
+ Robot: Changer seulement quelques pages.
The translations are retrieved from i18n.<package>, based on the callers
import table.
--
To view, visit https://gerrit.wikimedia.org/r/110692
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I93005d0314af89623ac03752c6f681991934c311
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>
jenkins-bot has submitted this change and it was merged.
Change subject: [bug 60564] Re-enable pageName for summary message
......................................................................
[bug 60564] Re-enable pageName for summary message
- pageName is extracted from command option handled by pagegenerators
if availlable. Otherwise we ask for the message.
- -images option is deprecated. -imagelinks from pagegenerators is
used. We just append the right option command to the option list
- deprecated setAction() is removed
- docu replacement from pagegenerators
Change-Id: Ie65f05430e14d4b18060b26577232a47ea51b78d
---
M scripts/delete.py
1 file changed, 47 insertions(+), 44 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/delete.py b/scripts/delete.py
index cf8c3d4..60c9ed8 100644
--- a/scripts/delete.py
+++ b/scripts/delete.py
@@ -3,20 +3,20 @@
This script can be used to delete and undelete pages en masse.
Of course, you will need an admin account on the relevant wiki.
-Syntax: python delete.py [-category categoryName]
+These command line parameters can be used to specify which pages to work on:
-Command line options:
+¶ms;
--page: Delete specified page
--cat: Delete all pages in the given category.
--links: Delete all pages linked from a given page.
--file: Delete all pages listed in a text file.
--ref: Delete all pages referring from a given page.
--images: Delete all images used on a given page.
--always: Don't prompt to delete pages, just do it.
--summary: Supply a custom edit summary.
--undelete: Actually undelete pages instead of deleting.
- Obviously makes sense only with -page and -file.
+Furthermore, the following command line parameters are supported:
+
+-always: Don't prompt to delete pages, just do it.
+
+-summary: Supply a custom edit summary.
+
+-undelete: Actually undelete pages instead of deleting.
+ Obviously makes sense only with -page and -file.
+
+Usage: python delete.py [-category categoryName]
Examples:
@@ -25,7 +25,7 @@
python delete.py -cat:"To delete" -always
"""
#
-# (C) Pywikibot team, 2013
+# (c) Pywikibot team, 2014
#
# Distributed under the terms of the MIT license.
#
@@ -36,36 +36,45 @@
from pywikibot import i18n
from pywikibot import pagegenerators
+# This is required for the text that is shown when you run this script
+# with the parameter -help.
+docuReplacements = {
+ '¶ms;': pagegenerators.parameterHelp,
+}
+
class DeletionRobot:
""" This robot allows deletion of pages en masse. """
def __init__(self, generator, summary, always=False, undelete=True):
- """ Arguments:
- * generator - A page generator.
- * always - Delete without prompting?
+ """
+ Arguments:
+ * generator - A page generator.
+ * always - Delete without prompting?
"""
self.generator = generator
self.summary = summary
- self.always = always
+ self.prompt = not always
self.undelete = undelete
def run(self):
- """ Starts the robot's action. """
- #Loop through everything in the page generator and delete it.
+ """ Starts the robot's action:
+ Loop through everything in the page generator and delete it.
+
+ """
for page in self.generator:
pywikibot.output(u'Processing page %s' % page.title())
if self.undelete:
- page.undelete(self.summary, throttle=True)
+ page.undelete(self.summary)
else:
- page.delete(self.summary, not self.always, throttle=True)
+ page.delete(self.summary, self.prompt)
def main():
genFactory = pagegenerators.GeneratorFactory()
pageName = ''
- summary = ''
+ summary = None
always = False
doImages = False
undelete = False
@@ -84,17 +93,18 @@
else:
summary = arg[len('-summary:'):]
elif arg.startswith('-images'):
- doImages = True
- if len(arg) == len('-images'):
- pageName = pywikibot.input(
- u'Enter the page with the images to delete:')
- else:
- pageName = arg[len('-images'):]
+ pywikibot.output('\n\03{lightred}-image option is deprecated. '
+ 'Please use -imagelinks instead.\03{default}\n')
+ localargs.append('-imagelinks' + arg[7:])
elif arg.startswith('-undelete'):
undelete = True
else:
genFactory.handleArg(arg)
- if not summary:
+ found = arg.find(':') + 1
+ if found:
+ pageName = arg[found:]
+
+ if pageName and not summary:
if arg.startswith('-category'):
summary = i18n.twtranslate(mysite, 'delete-from-category',
{'page': pageName})
@@ -104,30 +114,23 @@
elif arg.startswith('-ref'):
summary = i18n.twtranslate(mysite, 'delete-referring-pages',
{'page': pageName})
+ elif arg.startswith('-imagelinks'):
+ summary = i18n.twtranslate(mysite, 'delete-images',
+ {'page': pageName})
elif arg.startswith('-file'):
summary = i18n.twtranslate(mysite, 'delete-from-file')
-
- if doImages:
- if not summary:
- summary = i18n.twtranslate(mysite, 'delete-images',
- {'page': pageName})
- page = pywikibot.Page(mysite, pageName)
- generator = pagegenerators.ImagesPageGenerator(page)
- if not summary:
+ if summary is None:
summary = pywikibot.input(u'Enter a reason for the %sdeletion:'
% ['', 'un'][undelete])
- if not generator:
- generator = genFactory.getCombinedGenerator()
- if not generator:
- # syntax error, show help text from the top of this file
- pywikibot.showHelp('delete')
- return
+ generator = genFactory.getCombinedGenerator()
if generator:
- pywikibot.setAction(summary)
# We are just deleting pages, so we have no need of using a preloading
# page generator to actually get the text of those pages.
bot = DeletionRobot(generator, summary, always, undelete)
bot.run()
+ else:
+ # Show help text from the top of this file
+ pywikibot.showHelp()
if __name__ == "__main__":
--
To view, visit https://gerrit.wikimedia.org/r/110153
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie65f05430e14d4b18060b26577232a47ea51b78d
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Huji <huji.huji(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Pyfisch <pyfisch(a)gmail.com>
Gerrit-Reviewer: jenkins-bot <>