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

Reply via email to