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