http://www.mediawiki.org/wiki/Special:Code/pywikipedia/11250
Revision: 11250 Author: xqt Date: 2013-03-24 11:13:03 +0000 (Sun, 24 Mar 2013) Log Message: ----------- * revert r11238 * convert tabs to spaces (fix for r11216) * remove api parameter for Page.interwiki(), use has_transcluded_data instead * some PEP8 changes and code optimization
Modified Paths: -------------- trunk/pywikipedia/featured.py trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/featured.py =================================================================== --- trunk/pywikipedia/featured.py 2013-03-24 11:07:22 UTC (rev 11249) +++ trunk/pywikipedia/featured.py 2013-03-24 11:13:03 UTC (rev 11250) @@ -352,7 +352,7 @@ if page.isRedirectPage(): page = page.getRedirectTarget() try: - iw=page.interwiki(api=True) + iw=page.interwiki() except: pywikibot.output(u"%s -> no interwiki, giving up" % page.title()) return None @@ -385,7 +385,7 @@ pywikibot.output(u"%s -> page doesn't exist, skipping" % ourpage.title()) return None try: - iw = ourpage.interwiki(api=True) + iw = ourpage.interwiki() except: return None backpage=None
Modified: trunk/pywikipedia/wikipedia.py =================================================================== --- trunk/pywikipedia/wikipedia.py 2013-03-24 11:07:22 UTC (rev 11249) +++ trunk/pywikipedia/wikipedia.py 2013-03-24 11:13:03 UTC (rev 11250) @@ -46,7 +46,7 @@ setAction(text): Use 'text' instead of "Wikipedia python library" in edit summaries setUserAgent(text): Sets the string being passed to the HTTP server as - the User-agent: header. The default is + the User-agent: header. The default is '<script>/<revision> Pywikipediabot/1.0', where '<script>' is the tail path component and file name of the currently executing script and revision is the SVN revision of Pywikipediabot. @@ -2627,7 +2627,8 @@ data=datas['query']['pages'].values()[0]['protection'] return data
- def interwiki(self, api=False): + @deprecate_arg("api", None) + def interwiki(self): """Return a list of interwiki links in the page text.
This will retrieve the page to do its work, so it can raise @@ -2639,46 +2640,43 @@ """ if hasattr(self, "_interwikis"): return self._interwikis - if api: + + if self.site.has_transcluded_data: params = { 'action': 'query', 'prop' : 'langlinks', 'titles' : self.title(), } - if not self.site().isAllowed('apihighlimits') and config.special_page_limit > 500: + if not self.site().isAllowed('apihighlimits') and \ + config.special_page_limit > 500: params['cllimit'] = 500 - allDone = False iwlinks=[] - while not allDone: + while True: datas = query.GetData(params, self.site()) data=datas['query']['pages'].values()[0] if "langlinks" in data: for c in data['langlinks']: - llpage = Page(getSite(c["lang"]),c["*"]) + llpage = Page(getSite(c["lang"]), c["*"]) iwlinks.append(llpage)
if 'query-continue' in datas: if 'langlinks' in datas['query-continue']: params.update(datas['query-continue']['langlinks']) else: - allDone = True + break + self._interwikis = iwlinks return iwlinks + text = self.get() - # Replace {{PAGENAME}} by its value - for pagenametext in self.site().pagenamecodes( - self.site().language()): + for pagenametext in self.site().pagenamecodes(self.site().language()): text = text.replace(u"{{%s}}" % pagenametext, self.title()) - - ll = getLanguageLinks(text, insite=self.site(), pageLink=self.title(asLink=True)) - + ll = getLanguageLinks(text, insite=self.site(), + pageLink=self.title(asLink=True)) result = ll.values() - self._interwikis = result return result
- - def categories(self, get_redirect=False, api=False): """Return a list of Category objects that the article is in. Please be aware: the api call returns also categies which are included @@ -4340,53 +4338,57 @@ return 302, response.msg, data['success'] return response.code, response.msg, data
- def editclaim(self, WDproperty, value,raw_value=False, refs=None, comment=None, token=None, sysop=False,botflag=True): - if isinstance(WDproperty,int): - propertyID=WDproperty - elif isinstance(WDproperty,basestring): + def editclaim(self, WDproperty, value,raw_value=False, refs=None, + comment=None, token=None, sysop=False, botflag=True): + if isinstance(WDproperty, int): + propertyID = WDproperty + elif isinstance(WDproperty, basestring): try: propertyID=int(WDproperty) except ValueError: try: - propertyID=int(WDproperty.replace("p","").replace("P","")) + propertyID = int( + WDproperty.replace("p", "").replace("P", "")) except ValueError: - search=self.searchentities(WDproperty, 'property', lang=self._originSite.lang) - propertyID=int(search[0]["id"].replace("p","")) + search = self.searchentities(WDproperty, 'property', + lang=self._originSite.lang) + propertyID = int(search[0]["id"].replace("p", "")) else: pass else: pass else: raise RuntimeError("Unknown property type: %s" % WDproperty) - if not raw_value: - if isinstance(value, int): # for 'quantity' entity-type - value="{"entity-type":"item","numeric-id":%s}" % value - elif isinstance(value, unicode): # for 'string' entity-type + if not raw_value: + if isinstance(value, int): # for 'quantity' entity-type + value = "{"entity-type":"item","numeric-id":%s}" % value + elif isinstance(value, unicode): # for 'string' entity-type value = json.dumps(value) - elif isinstance(value, basestring): # for 'quantity' entity-type + elif isinstance(value, basestring): # for 'quantity' entity-type try: value=int(value) except ValueError: try: - value=int(value.replace("q","").replace("Q","")) + value=int(value.replace("q","").replace("Q", "")) except ValueError: - search=self.searchentities(value, 'item', lang=self._originSite.lang) - value=int(search[0]["id"].replace("q","")) + search=self.searchentities(value, 'item', + lang=self._originSite.lang) + value=int(search[0]["id"].replace("q", "")) else: pass else: pass value="{"entity-type":"item","numeric-id":%s}" % value - else: # otherwise + else: raise RuntimeError("Unknown property type: %s" % value) - value="{"entity-type":"item","numeric-id":%s}" % value + value = "{"entity-type":"item","numeric-id":%s}" % value else: pass - claims=self.get()['claims'] - theclaim=None + claims = self.get()['claims'] + theclaim = None for claim in claims: - if claim['m'][1]==propertyID: - theclaim=claim + if claim['m'][1] == propertyID: + theclaim = claim if theclaim: params = { 'action': 'wbsetclaimvalue', @@ -4394,10 +4396,7 @@ 'snaktype': 'value', 'value': value, } - if token: - params['token'] = token - else: - params['token'] = self.site().getToken(sysop = sysop) + params['token'] = token or self.site().getToken(sysop=sysop) output(u"Changing %s" % self.title()) data = query.GetData(params, self.site(), sysop=sysop) if 'error' in data: @@ -4408,43 +4407,48 @@ else: params = { 'action': 'wbcreateclaim', - 'entity': self.title().replace("Q","q"), + 'entity': self.title().replace("Q", "q"), 'snaktype': 'value', - 'property': u"p"+str(propertyID), + 'property': "p%d" % propertyID, 'value': value, } - if token: - params['token'] = token - else: - params['token'] = self.site().getToken(sysop = sysop) + params['token'] = token or self.site().getToken(sysop=sysop) output(u"Creating %s" % self.title()) data = query.GetData(params, self.site(), sysop=sysop) if 'error' in data: raise RuntimeError("API query error: %s" % data) - if u'warnings' in data: + if 'warnings' in data: output(str(data[u'warnings'])) guid=data['claim']['id'] if refs: - snak=[] + snak = [] for ref in refs: if isinstance(ref,basestring): - raise RuntimeError("the references must be like this:{(ref1,value1),(ref2,value2)}") - for i in [0,1]: - if isinstance(ref[i],int): - value=ref[i] - elif isinstance(ref[i],basestring): + raise RuntimeError( + "the references must be like this: {(ref1, value1), (ref2, value2)}") + for i in range(2): + if isinstance(ref[i], int): + value = ref[i] + elif isinstance(ref[i], basestring): try: - value=int(ref[i]) + value = int(ref[i]) except ValueError: try: - value=int(ref[i].replace("q","").replace("Q","").replace("P","").replace("p","")) + value = int( + ref[i].lower().replace("Q", + "").replace("P", "")) except ValueError: - if i==0: - typesearch='property' + if i == 0: + typesearch = 'property' else: - typesearch='item' - search=self.searchentities(ref[i], typesearch, lang=self._originSite.lang) - value=int(search[0]["id"].replace("q","").replace("p","")) + typesearch = 'item' + search=self.searchentities( + ref[i], typesearch, + lang=self._originSite.lang) + value = int( + search[0]["id"].replace("q", + "").replace("p", + "")) else: pass else: @@ -4452,19 +4456,22 @@ else: raise RuntimeError("Unknown item: %s" % ref[i]) snak.append(value) - finalsnak={} - for i in range(0,len(snak)/2): - snaki = [{"snaktype":"value", - "property":"p"+str(snak[i*2]), - "datavalue":{"type":"wikibase-entityid","value":{"entity-type":"item","numeric-id":snak[(i*2)+1]}}}] - finalsnak["p"+str(snak[i*2])]=snaki + finalsnak = {} + for i in range(0, len(snak) / 2): + snaki = [ + {"snaktype": "value", + "property":"p"+str(snak[i*2]), + "datavalue": {"type": "wikibase-entityid", + "value": {"entity-type": "item", + "numeric-id": snak[(i * 2) + 1]}}}] + finalsnak["p%d" % snak[i * 2]] = snaki finalsnak=json.dumps(finalsnak) finalsnak=finalsnak.replace("'", '"') params = { 'action': 'wbsetreference', - 'statement' : guid, - 'snaks' :u"%s" % finalsnak, - 'bot' : '1' + 'statement': guid, + 'snaks': u"%s" % finalsnak, + 'bot': '1' } if token: params['token'] = token @@ -4474,7 +4481,7 @@ data = query.GetData(params, self.site(), sysop=sysop) if 'error' in data: raise RuntimeError("API query error: %s" % data) - if u'warnings' in data: + if 'warnings' in data: output(str(data[u'warnings']))
def _getentity(self,force=False, get_redirect=False, throttle=True, @@ -4658,12 +4665,13 @@
""" links = self.get()['links'] - self._interwiki = [Page(getSite(code.replace('wiki', '').replace('_', '-'),fam='wikipedia'), - links[code]) - for code in links] + self._interwiki = [Page(getSite(code.replace('wiki', + '').replace('_', '-'), + fam='wikipedia'), + links[code]) for code in links] return self._interwiki
-wikidataPage = DataPage #keep compatible +wikidataPage = DataPage #keep compatible
class ImagePage(Page):
pywikipedia-svn@lists.wikimedia.org