jenkins-bot has submitted this change and it was merged.

Change subject: Added WikidataQuery page generator
......................................................................


Added WikidataQuery page generator

The generator takes a WikidataQuery string and works on the resulting
page set. This allows complex queries like "Places in the U.S. that are
named after Francis of Assisi":
-wikidataquery:tree[30][150][17,131] AND claim[138:676555]

Change-Id: If35fbc947889dc4d7a6afcebedd899d5e1ae54db
---
M pywikibot/pagegenerators.py
1 file changed, 39 insertions(+), 3 deletions(-)

Approvals:
  Mpaa: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/pywikibot/pagegenerators.py b/pywikibot/pagegenerators.py
index d66de77..e1d510f 100644
--- a/pywikibot/pagegenerators.py
+++ b/pywikibot/pagegenerators.py
@@ -25,11 +25,11 @@
 import re
 import time
 import pywikibot
-from . import date
+from pywikibot import date
 from pywikibot import config
 from pywikibot import deprecate_arg, i18n
 from pywikibot.comms import http
-
+import pywikibot.data.wikidataquery as wdquery
 
 # ported from version 1 for backwards-compatibility
 # most of these functions just wrap a Site or Page method that returns
@@ -144,6 +144,9 @@
                   Argument can be given as "-withoutinterwiki:n" where
                   n is some number (??).
 
+-wikidataquery    Takes a WikidataQuery query string like claim[31:12280]
+                  and works on the resulting pages.
+
 -random           Work on random pages returned by [[Special:Random]].
                   Can also be given as "-random:n" where n is the number
                   of pages to be returned, otherwise the default is 10 pages.
@@ -218,7 +221,8 @@
                     self.gens[i].set_maximum_items(self.limit)
             else:
                 if self.namespaces:
-                    self.gens[i] = NamespaceFilterPageGenerator(self.gens[i], 
namespaces)
+                    self.gens[i] = NamespaceFilterPageGenerator(self.gens[i],
+                                                                namespaces)
                 if self.limit:
                     self.gens[i] = itertools.islice(self.gens[i], self.limit)
         if len(self.gens) == 0:
@@ -490,6 +494,12 @@
             gen = YahooSearchPageGenerator(arg[7:])
         elif arg.startswith('-untagged'):
             gen = UntaggedPageGenerator(arg[10:])
+        elif arg.startswith('-wikidataquery'):
+            query = arg[len('-wikidataquery:'):]
+            if not query:
+                query = pywikibot.input(
+                    u'WikidataQuery string:')
+            gen = WikidataQueryPageGenerator(query)
 
         if gen:
             self.gens.append(gen)
@@ -1300,5 +1310,31 @@
         for day in range(1, date.getNumberOfDaysInMonth(month) + 1):
             yield pywikibot.Page(pywikibot.Link(fd(month, day), site))
 
+
+def WikidataQueryPageGenerator(query, site=None):
+    """Generate pages that result from the given WikidataQuery.
+
+    @param query: the WikidataQuery query string.
+
+    """
+    if site is None:
+        site = pywikibot.Site()
+    repo = site.data_repository()
+
+    wd_queryset = wdquery.QuerySet(query)
+
+    wd_query = wdquery.WikidataQuery(cacheMaxAge=0)
+    data = wd_query.query(wd_queryset)
+
+    pywikibot.output(u'retrieved %d items' % data[u'status'][u'items'])
+    for item in data[u'items']:
+        page = pywikibot.ItemPage(repo, u'Q' + unicode(item))
+        try:
+            link = page.getSitelink(site)
+        except pywikibot.NoPage:
+            continue
+        yield pywikibot.Page(pywikibot.Link(link, site))
+
+
 if __name__ == "__main__":
     pywikibot.output('Pagegenerators cannot be run as script - are you looking 
for listpages.py?')

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

Gerrit-MessageType: merged
Gerrit-Change-Id: If35fbc947889dc4d7a6afcebedd899d5e1ae54db
Gerrit-PatchSet: 5
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: FelixReimann <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Mpaa <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
Pywikibot-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikibot-commits

Reply via email to