@@ -30,25 +30,26 @@ class WPToolsQuery(object):
3030 WPToolsQuery class
3131 """
3232
33+ DEFAULT_ENDPOINT = '/w/api.php'
3334 MAXWIDTH = 72
3435 RPAD = 4
3536
3637 IMAGEINFO = Template ((
37- "${WIKI}/w/api.php ?action=query"
38+ "${WIKI}${ENDPOINT} ?action=query"
3839 "&format=json"
3940 "&formatversion=2"
4041 "&iiprop=size|url|timestamp|extmetadata"
4142 "&prop=imageinfo"
4243 "&titles=${FILES}" ))
4344
4445 LIST = Template ((
45- "${WIKI}/w/api.php ?action=query"
46+ "${WIKI}${ENDPOINT} ?action=query"
4647 "&format=json"
4748 "&formatversion=2"
4849 "&list=${LIST}" ))
4950
5051 PARSE = Template ((
51- "${WIKI}/w/api.php ?action=parse"
52+ "${WIKI}${ENDPOINT} ?action=parse"
5253 "&format=json"
5354 "&formatversion=2"
5455 "&contentmodel=text"
@@ -60,7 +61,7 @@ class WPToolsQuery(object):
6061 "&page=${PAGE}" ))
6162
6263 QUERY = Template ((
63- "${WIKI}/w/api.php ?action=query"
64+ "${WIKI}${ENDPOINT} ?action=query"
6465 "&exintro"
6566 "&format=json"
6667 "&formatversion=2"
@@ -78,7 +79,7 @@ class WPToolsQuery(object):
7879 "&titles=${TITLES}" ))
7980
8081 QUERYMORE = Template ((
81- "${WIKI}/w/api.php ?action=query"
82+ "${WIKI}${ENDPOINT} ?action=query"
8283 "&bllimit=500"
8384 "&bltitle=${TITLES}"
8485 "&cllimit=500"
@@ -94,39 +95,45 @@ class WPToolsQuery(object):
9495 "&titles=${TITLES}" ))
9596
9697 WIKIDATA = Template ((
97- "${WIKI}/w/api.php ?action=wbgetentities"
98+ "${WIKI}${ENDPOINT} ?action=wbgetentities"
9899 "&format=json"
99100 "&formatversion=2"
100101 "&languages=${LANG}"
101102 "&props=${PROPS}"
102103 "&redirects=yes" ))
103104
105+ endpoint = None
104106 lang = None
105107 status = None
106108 variant = None
107109 wiki = None
108110
109- def __init__ (self , lang = 'en' , variant = None , wiki = None ):
111+ def __init__ (self , lang = 'en' , variant = None , wiki = None , endpoint = None ):
110112 """
111113 Returns a WPToolsQuery object
112114
113115 Arguments:
114116 - [lang=en]: <str> Mediawiki language code
115117 - [variant=None]: <str> language variant
116118 - [wiki=None]: <str> alternative wiki site
119+ - [endpoint=None]: <str> alternative API endoint
117120 """
118121 self .lang = lang
119122 self .variant = variant
120123
121124 self .wiki = wiki or "%s.wikipedia.org" % self .lang
122125 self .domain = domain_name (self .wiki )
126+ self .endpoint = endpoint or self .DEFAULT_ENDPOINT
123127 self .uri = self .wiki_uri (self .wiki )
124128
125129 def category (self , title , pageid = None , cparams = None , namespace = None ):
126130 """
127131 Returns category query string
128132 """
129- query = self .LIST .substitute (WIKI = self .uri , LIST = 'categorymembers' )
133+ query = self .LIST .substitute (
134+ WIKI = self .uri ,
135+ ENDPOINT = self .endpoint ,
136+ LIST = 'categorymembers' )
130137 status = pageid or title
131138
132139 query += "&cmlimit=500"
@@ -163,6 +170,7 @@ def labels(self, qids):
163170
164171 query = self .WIKIDATA .substitute (
165172 WIKI = self .uri ,
173+ ENDPOINT = self .endpoint ,
166174 LANG = self .variant or self .lang ,
167175 PROPS = 'labels' )
168176
@@ -181,14 +189,19 @@ def imageinfo(self, files):
181189
182190 self .set_status ('imageinfo' , files )
183191
184- return self .IMAGEINFO .substitute (WIKI = self .uri , FILES = files )
192+ return self .IMAGEINFO .substitute (
193+ WIKI = self .uri ,
194+ ENDPOINT = self .endpoint ,
195+ FILES = files )
185196
186197 def parse (self , title , pageid = None ):
187198 """
188199 Returns Mediawiki action=parse query string
189200 """
190- qry = self .PARSE .substitute (WIKI = self .uri ,
191- PAGE = safequote (title ) or pageid )
201+ qry = self .PARSE .substitute (
202+ WIKI = self .uri ,
203+ ENDPOINT = self .endpoint ,
204+ PAGE = safequote (title ) or pageid )
192205
193206 if pageid and not title :
194207 qry = qry .replace ('&page=' , '&pageid=' ).replace ('&redirects' , '' )
@@ -204,8 +217,10 @@ def query(self, titles, pageids=None):
204217 """
205218 Returns MediaWiki action=query query string
206219 """
207- query = self .QUERY .substitute (WIKI = self .uri ,
208- TITLES = safequote (titles ) or pageids )
220+ query = self .QUERY .substitute (
221+ WIKI = self .uri ,
222+ ENDPOINT = self .endpoint ,
223+ TITLES = safequote (titles ) or pageids )
209224 status = titles or pageids
210225
211226 if pageids and not titles :
@@ -225,6 +240,7 @@ def querymore(self, titles, pageids=None, cparams=None):
225240 """
226241 query = self .QUERYMORE .substitute (
227242 WIKI = self .uri ,
243+ ENDPOINT = self .endpoint ,
228244 TITLES = safequote (titles ) or pageids )
229245
230246 status = "%s" % (pageids or titles )
@@ -247,7 +263,10 @@ def random(self, namespace=0):
247263 """
248264 Returns query string for random page
249265 """
250- query = self .LIST .substitute (WIKI = self .uri , LIST = 'random' )
266+ query = self .LIST .substitute (
267+ WIKI = self .uri ,
268+ ENDPOINT = self .endpoint ,
269+ LIST = 'random' )
251270 query += "&rnlimit=1&rnnamespace=%d" % namespace
252271
253272 emoji = [
@@ -309,28 +328,31 @@ def site(self, action):
309328 """
310329 query = None
311330 viewdays = 7
331+ hostpath = self .uri + self .endpoint
312332
313333 if action == 'siteinfo' :
314- query = self .uri + ('/w/api.php?action=query'
315- '&meta=siteinfo|siteviews'
316- '&siprop=general|statistics'
317- '&list=mostviewed&pvimlimit=max' )
334+ query = hostpath + (
335+ '?action=query'
336+ '&meta=siteinfo|siteviews'
337+ '&siprop=general|statistics'
338+ '&list=mostviewed&pvimlimit=max' )
318339 query += '&pvisdays=%d' % viewdays # meta=siteviews
319340 self .set_status ('query' , 'siteinfo|siteviews|mostviewed' )
320341 elif action == 'sitematrix' :
321- query = self . uri + '/w/api.php ?action=sitematrix'
342+ query = hostpath + '?action=sitematrix'
322343 self .set_status ('sitematrix' , 'all' )
323344 elif action == 'sitevisitors' :
324- query = self .uri + ('/w/api.php?action=query'
325- '&meta=siteviews&pvismetric=uniques' )
345+ query = hostpath + (
346+ '?action=query'
347+ '&meta=siteviews&pvismetric=uniques' )
326348 query += '&pvisdays=%d' % viewdays # meta=siteviews
327349 self .set_status ('query' , 'siteviews:uniques' )
328350
329- query += '&format=json&formatversion=2'
330-
331351 if not query :
332352 raise ValueError ("Could not form query" )
333353
354+ query += '&format=json&formatversion=2'
355+
334356 return query
335357
336358 def wiki_uri (self , wiki ):
@@ -350,6 +372,7 @@ def wikidata(self, title, wikibase=None):
350372
351373 query = self .WIKIDATA .substitute (
352374 WIKI = self .uri ,
375+ ENDPOINT = self .endpoint ,
353376 LANG = self .variant or self .lang ,
354377 PROPS = "aliases|info|claims|descriptions|labels|sitelinks" )
355378
0 commit comments