jenkins-bot has submitted this change and it was merged.
Change subject: Code improvements, split code into parts
......................................................................
Code improvements, split code into parts
- findTranslated() becomes a generator
- Split featuredWithInterwiki() into main loop and
- add_template() to place/change the template
Change-Id: I40693c603423ee7aabba53a4226df20c1e81b88b
---
M scripts/featured.py
1 file changed, 115 insertions(+), 111 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/scripts/featured.py b/scripts/featured.py
index 5bdc367..cc374ae 100644
--- a/scripts/featured.py
+++ b/scripts/featured.py
@@ -229,7 +229,9 @@
self.filename = None
self.site = pywikibot.Site()
self.repo = self.site.data_repository()
- if self.getOption('fromlang') is True: # must be a list
+
+ # if no source site is given, give up
+ if self.getOption('fromlang') is True:
self.options['fromlang'] = False
# setup tasks running
@@ -406,56 +408,49 @@
if not quiet:
pywikibot.output(u"%s -> no corresponding page in %s"
% (page.title(), oursite))
- return
-
- if ourpage.section():
+ elif ourpage.section():
pywikibot.output(u"%s -> our page is a section link: %s"
% (page.title(), ourpage.title()))
- return
-
- if not ourpage.exists():
+ elif not ourpage.exists():
pywikibot.output(u"%s -> our page doesn't exist: %s"
% (page.title(), ourpage.title()))
- return
+ else:
+ if ourpage.isRedirectPage():
+ ourpage = ourpage.getRedirectTarget()
- if ourpage.isRedirectPage():
- ourpage = ourpage.getRedirectTarget()
- pywikibot.output(u"%s -> corresponding page is %s"
- % (page.title(), ourpage.title()))
- if ourpage.namespace() != 0:
- pywikibot.output(u"%s -> not in the main namespace, skipping"
- % page.title())
- return
-
- if ourpage.isRedirectPage():
- pywikibot.output(u"%s -> double redirect, skipping" %
page.title())
- return
-
- if not ourpage.exists():
- pywikibot.output(u"%s -> page doesn't exist, skipping"
- % ourpage.title())
- return
-
- backpage = None
- for link in ourpage.iterlanglinks():
- if link.site == page.site:
- backpage = pywikibot.Page(link)
- break
-
- if not backpage:
- pywikibot.output(u"%s -> no back interwiki ref" % page.title())
- return
-
- if backpage == page:
- # everything is ok
- return ourpage
- if backpage.isRedirectPage():
- backpage = backpage.getRedirectTarget()
- if backpage == page:
- # everything is ok
- return ourpage
- pywikibot.output(u"%s -> back interwiki ref target is %s"
- % (page.title(), backpage.title()))
+ pywikibot.output(u"%s -> corresponding page is %s"
+ % (page.title(), ourpage.title()))
+ if ourpage.namespace() != 0:
+ pywikibot.output(u"%s -> not in the main namespace,
skipping"
+ % page.title())
+ elif ourpage.isRedirectPage():
+ pywikibot.output(u"%s -> double redirect, skipping" %
page.title())
+ elif not ourpage.exists():
+ pywikibot.output(u"%s -> page doesn't exist, skipping"
+ % ourpage.title())
+ else:
+ backpage = None
+ for link in ourpage.iterlanglinks():
+ if link.site == page.site:
+ backpage = pywikibot.Page(link)
+ break
+ if not backpage:
+ pywikibot.output(u"%s -> no back interwiki ref" %
page.title())
+ elif backpage == page:
+ # everything is ok
+ yield ourpage
+ elif backpage.isRedirectPage():
+ backpage = backpage.getRedirectTarget()
+ if backpage == page:
+ # everything is ok
+ yield ourpage
+ else:
+ pywikibot.output(
+ u"%s -> back interwiki ref target is redirect to
%s"
+ % (page.title(), backpage.title()))
+ else:
+ pywikibot.output(u"%s -> back interwiki ref target is
%s"
+ % (page.title(), backpage.title()))
def getTemplateList(self, code, task):
add_templates = []
@@ -497,14 +492,12 @@
return add_templates, remove_templates
def featuredWithInterwiki(self, fromsite, task):
- """Place or remove the Link_GA/FA template on/from a
page"""
+ """ Read featured articles and find the corresponding pages.
- def compile_link(site, templates):
- """compile one link template list"""
- findtemplate = '(%s)' % '|'.join(templates)
- return re.compile(r"\{\{%s\|%s\}\}"
- % (findtemplate.replace(u' ', u'[ _]'),
- site.code), re.IGNORECASE)
+ Find corresponding pages on other sites, place the template and
+ remember the page in the cache dict.
+
+ """
tosite = self.site
if fromsite.code not in self.cache:
@@ -522,73 +515,84 @@
return # count only, we are ready here
gen = PreloadingGenerator(gen)
- add_tl, remove_tl = self.getTemplateList(tosite.code, task)
- re_Link_add = compile_link(fromsite, add_tl)
- re_Link_remove = compile_link(fromsite, remove_tl)
- interactive = self.getOption('interactive')
for source in gen:
if source.isRedirectPage():
source = source.getRedirectTarget()
if not source.exists():
pywikibot.output(u"source page doesn't exist: %s"
- % source.title())
+ % source)
continue
- atrans = self.findTranslated(source, tosite)
- if not atrans:
- continue
+ for dest in self.findTranslated(source, tosite):
+ self.add_template(source, dest, task, fromsite)
+ cc[source.title()] = dest.title()
- text = atrans.text
- m1 = add_tl and re_Link_add.search(text)
- m2 = remove_tl and re_Link_remove.search(text)
- changed = False
- if add_tl:
- if m1:
- pywikibot.output(u"(already added)")
- else:
- # insert just before interwiki
- if (not interactive or
- pywikibot.input(
- u'Connecting %s -> %s. Proceed? [Y/N]'
- % (source.title(), atrans.title())) in ['Y',
'y']):
- if self.getOption('side'):
- # Placing {{Link FA|xx}} right next to
- # corresponding interwiki
- text = (text[:m1.end()] +
- u" {{%s|%s}}" % (add_tl[0], fromsite.code)
+
- text[m1.end():])
- else:
- # Moving {{Link FA|xx}} to top of interwikis
- iw = pywikibot.getLanguageLinks(text, self.site)
- text = pywikibot.removeLanguageLinks(text, self.site)
- text += u"%s{{%s|%s}}%s" % (LS, add_tl[0],
- fromsite.code, LS)
- text = pywikibot.replaceLanguageLinks(text,
- iw, self.site)
- changed = True
- if remove_tl:
- if m2:
- if (changed or # Don't force the user to say "Y"
twice
- not interactive or
- pywikibot.input(
- u'Connecting %s -> %s. Proceed? [Y/N]'
- % (source.title(), atrans.title())) in ['Y',
'y']):
- text = re.sub(re_Link_remove, '', text)
- changed = True
- elif task == 'former':
- pywikibot.output(u"(already removed)")
- cc[source.title()] = atrans.title()
- if changed:
- comment = i18n.twtranslate(self.site, 'featured-' + task,
- {'page': unicode(source)})
- try:
- atrans.put(text, comment)
- except pywikibot.LockedPage:
- pywikibot.output(u'Page %s is locked!'
- % atrans.title())
- except pywikibot.PageNotSaved:
- pywikibot.output(u"Page not saved")
+ def add_template(self, source, dest, task, fromsite):
+ """Place or remove the Link_GA/FA template on/from a
page."""
+
+ def compile_link(site, templates):
+ """compile one link template list."""
+ findtemplate = '(%s)' % '|'.join(templates)
+ return re.compile(r"\{\{%s\|%s\}\}"
+ % (findtemplate.replace(u' ', u'[ _]'),
+ site.code), re.IGNORECASE)
+
+ tosite = dest.site
+ add_tl, remove_tl = self.getTemplateList(tosite.code, task)
+ re_Link_add = compile_link(fromsite, add_tl)
+ re_Link_remove = compile_link(fromsite, remove_tl)
+
+ text = dest.text
+ m1 = add_tl and re_Link_add.search(text)
+ m2 = remove_tl and re_Link_remove.search(text)
+ changed = False
+ interactive = self.getOption('interactive')
+ if add_tl:
+ if m1:
+ pywikibot.output(u"(already added)")
+ else:
+ # insert just before interwiki
+ if (not interactive or
+ pywikibot.input(
+ u'Connecting %s -> %s. Proceed? [Y/N]'
+ % (source.title(), dest.title())) in ['Y',
'y']):
+ if self.getOption('side'):
+ # Placing {{Link FA|xx}} right next to
+ # corresponding interwiki
+ text = (text[:m1.end()] +
+ u" {{%s|%s}}" % (add_tl[0], fromsite.code) +
+ text[m1.end():])
+ else:
+ # Moving {{Link FA|xx}} to top of interwikis
+ iw = pywikibot.getLanguageLinks(text, tosite)
+ text = pywikibot.removeLanguageLinks(text, tosite)
+ text += u"%s{{%s|%s}}%s" % (LS, add_tl[0],
+ fromsite.code, LS)
+ text = pywikibot.replaceLanguageLinks(text,
+ iw, tosite)
+ changed = True
+ if remove_tl:
+ if m2:
+ if (changed or # Don't force the user to say "Y" twice
+ not interactive or
+ pywikibot.input(
+ u'Connecting %s -> %s. Proceed? [Y/N]'
+ % (source.title(), dest.title())) in ['Y',
'y']):
+ text = re.sub(re_Link_remove, '', text)
+ changed = True
+ elif task == 'former':
+ pywikibot.output(u"(already removed)")
+ if changed:
+ comment = i18n.twtranslate(tosite, 'featured-' + task,
+ {'page': unicode(source)})
+ try:
+ dest.put(text, comment)
+ except pywikibot.LockedPage:
+ pywikibot.output(u'Page %s is locked!'
+ % dest.title())
+ except pywikibot.PageNotSaved:
+ pywikibot.output(u"Page not saved")
def main(*args):
--
To view, visit
https://gerrit.wikimedia.org/r/131475
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I40693c603423ee7aabba53a4226df20c1e81b88b
Gerrit-PatchSet: 12
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Xqt <info(a)gno.de>
Gerrit-Reviewer: Alex S.H. Lin <alexsh(a)mail2000.com.tw>
Gerrit-Reviewer: Huji <huji.huji(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: Nullzero <nullzero.free(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>