jenkins-bot has submitted this change and it was merged.
Change subject: Add bot to transfer pages to another wiki, with history
......................................................................
Add bot to transfer pages to another wiki, with history
Change-Id: I1503c812b19bc5744bc5e17484facc577a2d471e
---
A scripts/transferbot.py
1 file changed, 135 insertions(+), 0 deletions(-)
Approvals:
Xqt: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/transferbot.py b/scripts/transferbot.py
new file mode 100644
index 0000000..8ab1769
--- /dev/null
+++ b/scripts/transferbot.py
@@ -0,0 +1,135 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+"""
+This script transfers pages from a source wiki to a target wiki. It also
+copies edit history to a subpage.
+
+Target site can be specified with -tofamily and -tolang
+Source site can be specified with -fromfamily and -fromlang
+Page prefix on the new site can be specified with -prefix
+
+Existing pages are skipped by default. Pass -overwrite to overwrite pages.
+
+Internal links are *not* repaired!
+
+Pages to work on can be specified using any of:
+¶ms;
+
+Example commands:
+
+# Transfer all pages in category "Query service" from the Toolserver wiki to
+# wikitech, adding Nova_Resource:Tools/Tools/ as prefix
+transferbot.py -v -family:toolserver -tofamily:wikitech -cat:"Query service" -prefix:Nova_Resource:Tools/Tools/
+
+# Copy the template "Query service" from the Toolserver wiki to wikitech
+transferbot.py -v -family:toolserver -tofamily:wikitech -page:"Template:Query service"
+
+"""
+
+#
+# (C) Merlijn van Deen, 2014
+#
+# Distributed under the terms of the MIT license.
+#
+
+import pywikibot
+from pywikibot import pagegenerators
+
+docuReplacements = {
+ '¶ms;': pagegenerators.parameterHelp,
+}
+
+
+def main():
+ tohandle = pywikibot.handleArgs()
+
+ fromsite = pywikibot.getSite()
+ tolang = fromsite.code
+ tofamily = None
+ prefix = ''
+ template = None
+ overwrite = False
+
+ genFactory = pagegenerators.GeneratorFactory()
+
+ for arg in tohandle:
+ if genFactory.handleArg(arg):
+ continue
+ if arg.startswith('-tofamily'):
+ tofamily = arg[len('-tofamily:'):]
+ elif arg.startswith('-tolang'):
+ tolang = arg[len('-tolang:'):]
+ elif arg.startswith('-prefix'):
+ prefix = arg[len('-prefix:'):]
+ elif arg.startswith('-template'):
+ prefix = arg[len('-template:'):]
+ elif arg == "-overwrite":
+ overwrite = True
+
+ gen = genFactory.getCombinedGenerator()
+
+ if not tofamily:
+ raise Exception('Target family not specified')
+
+ from pywikibot import config
+
+ # we change the config family to make sure we get sensible backlinks
+ # i.e. [[wikipedia:en:pagename]] instead of [[pagename]]
+ # this should really be fixed in Page.title() (bug #59223)
+ # we can't do this before, as the pagegenerator would work on the
+ # incorrect site...
+ config.mylang = tolang
+ config.family = tofamily
+
+ tosite = pywikibot.Site()
+
+ if not gen:
+ raise Exception('Target pages not specified')
+
+ pywikibot.output(u"""
+ Page transfer configuration
+ ---------------------------
+ Source: %(fromsite)r
+ Target: %(tosite)r
+
+ Pages to transfer: %(gen)r
+
+ Prefix for transferred pages: %(prefix)s
+ """ % locals())
+
+ for page in gen:
+ summary = "Moved page from %s" % page.title(asLink=True)
+ targetpage = pywikibot.Page(tosite, prefix + page.title())
+ edithistpage = pywikibot.Page(tosite, prefix + page.title() + "/edithistory")
+
+ if targetpage.exists() and not overwrite:
+ pywikibot.output(
+ u"Skipped %s (target page %s exists)" % (
+ page.title(asLink=True),
+ targetpage.title(asLink=True)
+ )
+ )
+ continue
+
+ pywikibot.output(u"Moving %s to %s..." % (page.title(asLink=True), targetpage.title(asLink=True)))
+
+ pywikibot.log("Getting page text.")
+ text = page.get(get_redirect=True)
+ text += "<noinclude>\n\n<small>This page was moved from %s. It's edit history can be viewed at %s</small></noinclude>" % (
+ page.title(asLink=True), edithistpage.title(asLink=True))
+
+ pywikibot.log("Getting edit history.")
+ historytable = page.getVersionHistoryTable()
+
+ pywikibot.log("Putting page text.")
+ targetpage.put(text, comment=summary)
+
+ pywikibot.log("Putting edit history.")
+ edithistpage.put(historytable, comment=summary)
+
+if __name__ == "__main__":
+ try:
+ main()
+ finally:
+ pywikibot.stopme()
--
To view, visit https://gerrit.wikimedia.org/r/105009
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I1503c812b19bc5744bc5e17484facc577a2d471e
Gerrit-PatchSet: 4
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 59227) retry on all internal_api_error_s
......................................................................
(bug 59227) retry on all internal_api_error_s
follow-up for https://gerrit.wikimedia.org/r/#/c/105099/
Name of API exception is provided since r26140
Change-Id: Ic62a1e83130370f62f863de9ff313512754cac14
---
M pywikibot/data/api.py
1 file changed, 1 insertion(+), 3 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/data/api.py b/pywikibot/data/api.py
index 141b6d9..043cc52 100644
--- a/pywikibot/data/api.py
+++ b/pywikibot/data/api.py
@@ -389,9 +389,7 @@
u"Pausing due to database lag: " + info)
self.site.throttle.lag(int(lag.group("lag")))
continue
- if code in (u'internal_api_error_DBConnectionError',
- u'internal_api_error_DBQueryError',
- u'internal_api_error_ReadOnlyError'):
+ if code.startswith(u'internal_api_error_'):
self.wait()
continue
# raise error
--
To view, visit https://gerrit.wikimedia.org/r/105152
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ic62a1e83130370f62f863de9ff313512754cac14
Gerrit-PatchSet: 2
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
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: Multichill <maarten(a)mdammers.nl>
Gerrit-Reviewer: Russell Blau <russblau(a)imapmail.org>
Gerrit-Reviewer: jenkins-bot
jenkins-bot has submitted this change and it was merged.
Change subject: Bug 58944 - site.mediawiki_message: support multiple messages
......................................................................
Bug 58944 - site.mediawiki_message: support multiple messages
Added site.mediawiki_messages() added to handle request of several messages.
https://bugzilla.wikimedia.org/show_bug.cgi?id=58944
Change-Id: I64710f67c04a0d2b93c70d9edd472f8bab4ce309
---
M pywikibot/site.py
M tests/site_tests.py
2 files changed, 42 insertions(+), 14 deletions(-)
Approvals:
Mpaa: Looks good to me, but someone else must approve
Xqt: Looks good to me, approved
Merlijn van Deen: Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/pywikibot/site.py b/pywikibot/site.py
index a090d04..d51ae54 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -997,24 +997,42 @@
self.login(sysop)
return 'hasmsg' in self._userinfo
+ def mediawiki_messages(self, keys):
+ """Return the MediaWiki message text for each 'key' in keys
+ in a dict:
+ -. dict['key'] = text message
+
+ """
+
+ if not all(_key in self._msgcache for _key in keys):
+ msg_query = api.QueryGenerator(
+ site=self,
+ meta="allmessages",
+ ammessages='|'.join(keys),
+ )
+ for _key in keys:
+ for msg in msg_query:
+ if msg['name'] == _key and not 'missing' in msg:
+ self._msgcache[_key] = msg['*']
+ break
+ else:
+ raise KeyError("Site %(self)s has no message '%(_key)s'"
+ % locals())
+
+ return dict((_key, self._msgcache[_key]) for _key in keys)
+
def mediawiki_message(self, key):
- """Return the MediaWiki message text for key "key" """
- if not key in self._msgcache:
- msg_query = api.QueryGenerator(site=self, meta="allmessages",
- ammessages=key)
- for msg in msg_query:
- if msg['name'] == key and not 'missing' in msg:
- self._msgcache[key] = msg['*']
- break
- else:
- raise KeyError("Site %(self)s has no message '%(key)s'"
- % locals())
- return self._msgcache[key]
+ """Return the MediaWiki message text for key 'key' """
+ return self.mediawiki_messages([key])[key]
def has_mediawiki_message(self, key):
- """Return True iff this site defines a MediaWiki message for 'key'."""
+ """Return True if this site defines a MediaWiki message for 'key' """
+ return self.has_all_mediawiki_messages([key])
+
+ def has_all_mediawiki_messages(self, keys):
+ """Return True if this site defines MediaWiki messages for all 'keys'; False otherwise."""
try:
- v = self.mediawiki_message(key)
+ v = self.mediawiki_messages(keys)
return True
except KeyError:
return False
diff --git a/tests/site_tests.py b/tests/site_tests.py
index ce7b930..ee86e70 100644
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -144,12 +144,22 @@
except pywikibot.NoUsername:
pywikibot.warning(
"Cannot test Site methods for sysop; no sysop account configured.")
+
for msg in ("1movedto2", "about", "aboutpage", "aboutsite",
"accesskey-n-portal"):
self.assertTrue(mysite.has_mediawiki_message(msg))
self.assertType(mysite.mediawiki_message(msg), basestring)
self.assertFalse(mysite.has_mediawiki_message("nosuchmessage"))
self.assertRaises(KeyError, mysite.mediawiki_message, "nosuchmessage")
+
+ msg = ("1movedto2", "about", "aboutpage")
+ self.assertType(mysite.mediawiki_messages(msg), dict)
+ self.assertTrue(mysite.mediawiki_messages(msg))
+
+ msg = ("1movedto2", "about", "aboutpage", "nosuchmessage")
+ self.assertFalse(mysite.has_all_mediawiki_messages(msg))
+ self.assertRaises(KeyError, mysite.mediawiki_messages, msg)
+
self.assertType(mysite.getcurrenttimestamp(), basestring)
self.assertType(mysite.siteinfo, dict)
self.assertType(mysite.case(), basestring)
--
To view, visit https://gerrit.wikimedia.org/r/104211
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I64710f67c04a0d2b93c70d9edd472f8bab4ce309
Gerrit-PatchSet: 8
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: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot