jenkins-bot has submitted this change and it was merged.
Change subject: (bug 59223) Page.title(asLink=True) accepts a site object "insite",
......................................................................
(bug 59223) Page.title(asLink=True) accepts a site object "insite",
where the page is to be shown. This forces to format the link
with family and site code prefix if the "insite" site is different
from Page.site.
The default site is given by -lang and -family option or
from user-config.py if the options are omitted.
Change-Id: I145293e30fc155c50d300caa84af13f7b61b02c2
---
M pywikibot/page.py
1 file changed, 14 insertions(+), 5 deletions(-)
Approvals:
Merlijn van Deen: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/page.py b/pywikibot/page.py
index e1e3e4c..2949fa2 100644
--- a/pywikibot/page.py
+++ b/pywikibot/page.py
@@ -3,7 +3,7 @@
Objects representing various types of MediaWiki pages.
"""
#
-# (C) Pywikibot team, 2008-2013
+# (C) Pywikibot team, 2008-2014
#
# Distributed under the terms of the MIT license.
#
@@ -128,7 +128,7 @@
def title(self, underscore=False, withNamespace=True,
withSection=True, asUrl=False, asLink=False,
allowInterwiki=True, forceInterwiki=False, textlink=False,
- as_filename=False):
+ as_filename=False, insite=None):
"""Return the title of this Page, as a Unicode string.
@param underscore: if true, replace all ' ' characters with '_'
@@ -144,17 +144,26 @@
before Category: and Image: links
@param as_filename: if true, replace any characters that are unsafe
in filenames
+ @param insite: (only used if asLink is true) a site object where the
+ title is to be shown. default is the current family/lang given by
+ -family and -lang option i.e. config.family and config.mylang
"""
title = self._link.canonical_title()
if withSection and self._link.section:
title = title + "#" + self._link.section
if asLink:
+ if insite:
+ target_code = insite.code
+ target_family = insite.family.name
+ else:
+ target_code = config.mylang
+ target_family = config.family
if forceInterwiki or \
(allowInterwiki and
- (self.site.family.name != config.family
- or self.site.code != config.mylang)):
- if self.site.family.name != config.family \
+ (self.site.family.name != target_family
+ or self.site.code != target_code)):
+ if self.site.family.name != target_family \
and self.site.family.name != self.site.code:
return u'[[%s:%s:%s]]' % (self.site.family.name,
self.site.code,
--
To view, visit https://gerrit.wikimedia.org/r/105436
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I145293e30fc155c50d300caa84af13f7b61b02c2
Gerrit-PatchSet: 1
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: Russell Blau <russblau(a)imapmail.org>
Gerrit-Reviewer: jenkins-bot
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