Matěj Suchánek has uploaded a new change for review. (
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, 39 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core
refs/changes/71/364471/1
diff --git a/scripts/interwikidata.py b/scripts/interwikidata.py
index af36424..7c47040 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,19 +158,24 @@
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():
- warning('Interwiki %s does not exist, skipping...' %
- iw_page.title(asLink=True))
- continue
+ if not iw_page.exists():
+ warning('Interwiki %s does not exist,
skipping...' %
+ iw_page.title(asLink=True))
+ continue
try:
wd_data.add(pywikibot.ItemPage.fromPage(iw_page))
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
+ 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 printed
+ 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: newchange
Gerrit-Change-Id: Idc4e3e55dabce96039cf810fc47e8e723358cdf6
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Matěj Suchánek <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits