Ricordisamoa has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/126213

Change subject: create a new WikidataBot class for cacheSources() and 
getSource() for claimit.py, coordinate_import.py and harvest_template.py
......................................................................

create a new WikidataBot class for cacheSources() and getSource()
for claimit.py, coordinate_import.py and harvest_template.py

bug: 62438

this also allows for non-Wikipedia sources
in claimit.py and coordinate_import.py
as with change I29df011b82fd8687d4c38def62d0c0ea3a1b7994

bug: 62991
Change-Id: Ic05987911f0878d42a06cf5af842134bd9d615e8
---
M pywikibot/bot.py
M scripts/claimit.py
M scripts/coordinate_import.py
M scripts/harvest_template.py
4 files changed, 45 insertions(+), 85 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/13/126213/1

diff --git a/pywikibot/bot.py b/pywikibot/bot.py
index 3aa8189..7beda63 100644
--- a/pywikibot/bot.py
+++ b/pywikibot/bot.py
@@ -21,6 +21,7 @@
 import os.path
 import sys
 import re
+import json
 
 _logger = "bot"
 
@@ -815,3 +816,32 @@
 
         if choice != 'n':
             page.put(newtext, async=(choice == 'a'))
+
+
+class WikidataBot:
+    """
+    Generic Wikidata Bot to be subclassed
+    used in claimit.py, coordinate_import.py and harvest_template.py
+    """
+
+    def cacheSources(self):
+        """
+        Fetches the sources from the onwiki list
+        and stores it internally
+        """
+        page = pywikibot.Page(self.repo, u'List of wikis/python', ns=4)
+        self.source_values = json.loads(page.get())
+        for family_code, family in self.source_values.iteritems():
+            for source_lang in family:
+                self.source_values[family_code][source_lang] = 
pywikibot.ItemPage(self.repo,
+                                                                               
   family[source_lang])
+
+    def getSource(self, site):
+        """
+        Get the source for the specified site,
+        if possible
+        """
+        if site.family.name in self.source_values and site.code in 
self.source_values[site.family.name]:
+            source = pywikibot.Claim(self.repo, 'P143')
+            
source.setTarget(self.source_values.get(site.family.name).get(site.code))
+            return source
diff --git a/scripts/claimit.py b/scripts/claimit.py
index db8ff17..64beeb2 100755
--- a/scripts/claimit.py
+++ b/scripts/claimit.py
@@ -50,19 +50,18 @@
 """
 #
 # (C) Legoktm, 2013
-# (C) Pywikibot team, 2013
+# (C) Pywikibot team, 2013-2014
 #
 # Distributed under the terms of the MIT license.
 #
 __version__ = '$Id$'
 #
 
-import json
 import pywikibot
-from pywikibot import pagegenerators
+from pywikibot import pagegenerators, WikidataBot
 
 
-class ClaimRobot:
+class ClaimRobot(WikidataBot):
     """
     A bot to add Wikidata claims
     """
@@ -79,28 +78,6 @@
         self.exists_arg = exists_arg
         self.repo = pywikibot.Site().data_repository()
         self.cacheSources()
-
-    def getSource(self, lang):
-        """
-        Get the source for the specified language,
-        if possible
-        """
-        if lang in self.source_values:
-            source = pywikibot.Claim(self.repo, 'p143')
-            source.setTarget(self.source_values.get(lang))
-            return source
-
-    def cacheSources(self):
-        """
-        Fetches the sources from the onwiki list
-        and stores it internally
-        """
-        page = pywikibot.Page(self.repo, u'Wikidata:List of wikis/python')
-        self.source_values = json.loads(page.get())
-        self.source_values = self.source_values['wikipedia']
-        for source_lang in self.source_values:
-            self.source_values[source_lang] = pywikibot.ItemPage(self.repo,
-                                                                 
self.source_values[source_lang])
 
     def run(self):
         """
@@ -147,7 +124,7 @@
                                      % (claim.getID(), claim.getTarget()))
                     item.addClaim(claim)
                     # A generator might yield pages from multiple languages
-                    source = self.getSource(page.site.language())
+                    source = self.getSource(page.site)
                     if source:
                         claim.addSource(source, bot=True)
                     # TODO FIXME: We need to check that we aren't adding a
diff --git a/scripts/coordinate_import.py b/scripts/coordinate_import.py
index f89f55f..d732c22 100644
--- a/scripts/coordinate_import.py
+++ b/scripts/coordinate_import.py
@@ -18,18 +18,17 @@
 """
 #
 # (C) Multichill 2014
-# (C) Pywikibot team, 2013
+# (C) Pywikibot team, 2013-2014
 #
 # Distributed under the terms of MIT License.
 #
 __version__ = '$Id$'
 #
-import json
 import pywikibot
-from pywikibot import pagegenerators
+from pywikibot import pagegenerators, WikidataBot
 
 
-class coordImportRobot:
+class CoordImportRobot(WikidataBot):
     """
     A bot to import coordinates to Wikidata
     """
@@ -40,31 +39,8 @@
 
         """
         self.generator = pagegenerators.PreloadingGenerator(generator)
-        self.site = pywikibot.Site()
         self.repo = pywikibot.Site().data_repository()
         self.cacheSources()
-
-    def getSource(self, lang):
-        """
-        Get the source for the specified language,
-        if possible
-        """
-        if lang in self.source_values:
-            source = pywikibot.Claim(self.repo, 'p143')
-            source.setTarget(self.source_values.get(lang))
-            return source
-
-    def cacheSources(self):
-        """
-        Fetches the sources from the onwiki list
-        and stores it internally
-        """
-        page = pywikibot.Page(self.repo, u'Wikidata:List of wikis/python')
-        self.source_values = json.loads(page.get())
-        self.source_values = self.source_values['wikipedia']
-        for source_lang in self.source_values:
-            self.source_values[source_lang] = pywikibot.ItemPage(self.repo,
-                                                                 
self.source_values[source_lang])
 
     def run(self):
         """
@@ -88,7 +64,7 @@
                         pywikibot.output(u'Adding %s, %s to %s' % 
(coordinate.lat, coordinate.lon, item.title()))
                         item.addClaim(newclaim)
 
-                        source = self.getSource(page.site.language())
+                        source = self.getSource(page.site)
                         if source:
                             newclaim.addSource(source, bot=True)
 
@@ -102,7 +78,7 @@
 
     generator = gen.getCombinedGenerator()
 
-    coordbot = coordImportRobot(generator)
+    coordbot = CoordImportRobot(generator)
     coordbot.run()
 
 if __name__ == "__main__":
diff --git a/scripts/harvest_template.py b/scripts/harvest_template.py
index 79adb7c..ec85415 100755
--- a/scripts/harvest_template.py
+++ b/scripts/harvest_template.py
@@ -16,7 +16,7 @@
 """
 #
 # (C) Multichill, Amir, 2013
-# (C) Pywikibot team, 2013
+# (C) Pywikibot team, 2013-2014
 #
 # Distributed under the terms of MIT License.
 #
@@ -24,14 +24,13 @@
 #
 
 import re
-import json
 import pywikibot
-from pywikibot import pagegenerators as pg
+from pywikibot import pagegenerators as pg, WikidataBot
 
 docuReplacements = {'&params;': pywikibot.pagegenerators.parameterHelp}
 
 
-class HarvestRobot:
+class HarvestRobot(WikidataBot):
     """
     A bot to add Wikidata claims
     """
@@ -50,28 +49,6 @@
         self.repo = pywikibot.Site().data_repository()
         self.cacheSources()
 
-    def getSource(self, site):
-        """
-        Get the source for the specified site,
-        if possible
-        """
-        if site.family.name in self.source_values and site.code in 
self.source_values[site.family.name]:
-            source = pywikibot.Claim(self.repo, 'P143')
-            
source.setTarget(self.source_values.get(site.family.name).get(site.code))
-            return source
-
-    def cacheSources(self):
-        """
-        Fetches the sources from the onwiki list
-        and stores it internally
-        """
-        page = pywikibot.Page(self.repo, u'List of wikis/python', ns=4)
-        self.source_values = json.loads(page.get())
-        for family_code, family in self.source_values.iteritems():
-            for source_lang in family:
-                self.source_values[family_code][source_lang] = 
pywikibot.ItemPage(self.repo,
-                                                                               
   family[source_lang])
-
     def run(self):
         """
         Starts the robot.
@@ -79,7 +56,7 @@
         self.templateTitles = self.getTemplateSynonyms(self.templateTitle)
         for page in self.generator:
             try:
-                self.procesPage(page)
+                self.processPage(page)
             except Exception as e:
                 pywikibot.exception(tb=True)
 
@@ -97,9 +74,9 @@
         titles.append(temp.title(withNamespace=False))
         return titles
 
-    def procesPage(self, page):
+    def processPage(self, page):
         """
-        Proces a single page
+        Process a single page
         """
         item = pywikibot.ItemPage.fromPage(page)
         pywikibot.output('Processing %s' % page)

-- 
To view, visit https://gerrit.wikimedia.org/r/126213
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic05987911f0878d42a06cf5af842134bd9d615e8
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Ricordisamoa <ricordisa...@live.it>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to