jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/364471 )
Change subject: [FEAT] Merge items in interwikidata.py
......................................................................
[FEAT] Merge items in interwikidata.py
Bug: T146255
Change-Id: Idc4e3e55dabce96039cf810fc47e8e723358cdf6
---
M scripts/interwikidata.py
1 file changed, 35 insertions(+), 4 deletions(-)
Approvals:
jenkins-bot: Verified
Xqt: Looks good to me, approved
diff --git a/scripts/interwikidata.py b/scripts/interwikidata.py
index af36424..a480dfd 100644
--- a/scripts/interwikidata.py
+++ b/scripts/interwikidata.py
@@ -16,7 +16,9 @@
-clean Clean pages.
--create Create items only.
+-create Create items.
+
+-merge Merge items.
-summary: Use your own edit summary for cleaning the page.
"""
@@ -57,6 +59,7 @@
self.availableOptions.update({
'clean': False,
'create': False,
+ 'merge': False,
'summary': None,
'ignore_ns': False, # used by interwikidata_tests only
})
@@ -93,9 +96,12 @@
item = self.try_to_add()
if self.getOption('create') and item is None:
item = self.create_item()
+ else:
+ if self.getOption('merge'):
+ item = self.try_to_merge(item)
- self.current_item = item
if item and self.getOption('clean'):
+ self.current_item = item
self.clean_page()
def create_item(self):
@@ -152,8 +158,8 @@
self.current_page.text, site=self.current_page.site)
self.put_current(new_text, summary=self.getOption('summary'))
- def try_to_add(self):
- """Add current page in repo."""
+ def get_items(self):
+ """Return all items of pages linked through the
interwiki."""
wd_data = set()
for iw_page in self.iwlangs.values():
if not iw_page.exists():
@@ -165,6 +171,11 @@
except pywikibot.NoPage:
output('Interwiki %s does not have an item' %
iw_page.title(asLink=True))
+ return wd_data
+
+ def try_to_add(self):
+ """Add current page in repo."""
+ wd_data = self.get_items()
if not wd_data:
# will create a new item with interwiki
return None
@@ -181,6 +192,26 @@
item.setSitelink(self.current_page)
return item
+ def try_to_merge(self, item):
+ """Merge two items."""
+ wd_data = self.get_items()
+ if not wd_data:
+ # todo: add links to item
+ return None
+ if len(wd_data) > 1:
+ warning('Interwiki conflict in %s, skipping...' %
+ self.current_page.title(asLink=True))
+ return False
+ target_item = list(wd_data).pop()
+ try:
+ item.mergeInto(target_item)
+ except pywikibot.data.api.APIError:
+ # warning already printed by the API
+ return False
+ else:
+ target_item.get(force=True)
+ return target_item
+
def main(*args):
"""
--
To view, visit
https://gerrit.wikimedia.org/r/364471
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Idc4e3e55dabce96039cf810fc47e8e723358cdf6
Gerrit-PatchSet: 3
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Matěj Suchánek <matejsuchanek97(a)gmail.com>
Gerrit-Reviewer: Dalba <dalba.wiki(a)gmail.com>
Gerrit-Reviewer: JAn Dudík <jan.dudik(a)gmail.com>
Gerrit-Reviewer: Magul <tomasz.magulski(a)gmail.com>
Gerrit-Reviewer: Matěj Suchánek <matejsuchanek97(a)gmail.com>
Gerrit-Reviewer: Mpaa <mpaa.wiki(a)gmail.com>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>