jenkins-bot merged this change.

View Change

Approvals: Framawiki: Looks good to me, approved jenkins-bot: Verified
[FEAT] Use generator from target site for transfer pages

For example copy wanted templates of German Wikipedia
from English Wikipedia to German Wikipedia

The command line is:
pwb transferbot -family:wikipedia -lang:en -tolang:de -wantedtemplates -target

Bug: T223713
Change-Id: Ie3f29c0b4a8be1ef6cd71bdee48f8feeb5a963cf
---
M scripts/transferbot.py
1 file changed, 40 insertions(+), 18 deletions(-)

diff --git a/scripts/transferbot.py b/scripts/transferbot.py
index a3e3e0a..eff9df1 100755
--- a/scripts/transferbot.py
+++ b/scripts/transferbot.py
@@ -16,6 +16,9 @@
-overwrite: Existing pages are skipped by default. Use this option to
overwrite pages.

+-target Use page generator of the target site
+
+
Internal links are *not* repaired!

Pages to work on can be specified using any of:
@@ -37,6 +40,10 @@
python pwb.py transferbot -family:wikipedia -lang:en \
-tofamily:wiktionary -tolang:ar -page:"Template:Query service"

+Copy 10 wanted templates of German Wikipedia from English Wikipedia to German
+ python pwb.py transferbot -family:wikipedia -lang:en \
+ -tolang:de -wantedtemplates:10 -target
+
"""
#
# (C) Merlijn van Deen, 2014
@@ -69,14 +76,10 @@
tofamily = fromsite.family.name
prefix = ''
overwrite = False
+ target = False
gen_args = []

- gen_factory = pagegenerators.GeneratorFactory()
-
for arg in local_args:
- if gen_factory.handleArg(arg):
- gen_args.append(arg)
- continue
if arg.startswith('-tofamily'):
tofamily = arg[len('-tofamily:'):]
elif arg.startswith('-tolang'):
@@ -85,34 +88,53 @@
prefix = arg[len('-prefix:'):]
elif arg == '-overwrite':
overwrite = True
-
- gen = gen_factory.getCombinedGenerator()
+ elif arg == '-target':
+ target = True
+ else:
+ gen_args.append(arg)

tosite = pywikibot.Site(tolang, tofamily)
additional_text = ('Target site not different from source site.'
if fromsite == tosite else '')

+ gen_factory = pagegenerators.GeneratorFactory(site=tosite if target
+ else fromsite)
+ unknown_args = [arg for arg in gen_args if not gen_factory.handleArg(arg)]
+
+ if unknown_args:
+ for item in unknown_args:
+ gen_args.remove(item)
+
+ gen = gen_factory.getCombinedGenerator()
+
+ suggest_help(missing_generator=not gen,
+ additional_text=additional_text,
+ unknown_parameters=unknown_args)
if additional_text or not gen:
- suggest_help(missing_generator=not gen,
- additional_text=additional_text)
return

gen_args = ' '.join(gen_args)
pywikibot.output("""
Page transfer configuration
---------------------------
- Source: %(fromsite)r
- Target: %(tosite)r
+ Source: {fromsite}
+ Target: {tosite}

- Generator of pages to transfer: %(gen_args)s
-
- Prefix for transferred pages: %(prefix)s
- """ % {'fromsite': fromsite, 'tosite': tosite,
- 'gen_args': gen_args, 'prefix': prefix if prefix else '(none)'})
+ Generator of pages to transfer: {gen_args}
+ {target}
+ Prefix for transferred pages: {prefix}
+ """.format(fromsite=fromsite, tosite=tosite, gen_args=gen_args,
+ prefix=prefix if prefix else '(none)',
+ target='from target site\n' if target else ''))

for page in gen:
- target_title = (prefix + page.namespace().canonical_prefix()
- + page.title(with_ns=False))
+ title = page.namespace().canonical_prefix() + page.title(with_ns=False)
+ if target:
+ # page is at target site, fetch it from source
+ target_title = prefix + page.title()
+ page = pywikibot.Page(fromsite, title)
+ else:
+ target_title = (prefix + title)
targetpage = pywikibot.Page(tosite, target_title)
edithistpage = pywikibot.Page(tosite, target_title + '/edithistory')


To view, visit change 517186. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie3f29c0b4a8be1ef6cd71bdee48f8feeb5a963cf
Gerrit-Change-Number: 517186
Gerrit-PatchSet: 5
Gerrit-Owner: Xqt <info@gno.de>
Gerrit-Reviewer: D3r1ck01 <xsavitar.wiki@aol.com>
Gerrit-Reviewer: Dalba <dalba.wiki@gmail.com>
Gerrit-Reviewer: Dvorapa <dvorapa@seznam.cz>
Gerrit-Reviewer: Framawiki <framawiki@tools.wmflabs.org>
Gerrit-Reviewer: John Vandenberg <jayvdb@gmail.com>
Gerrit-Reviewer: Nicolas NALLET <contact@semantiki.fr>
Gerrit-Reviewer: jenkins-bot (75)