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 mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to