Revision: 7495
Author:   alexsh
Date:     2009-10-18 17:24:37 +0000 (Sun, 18 Oct 2009)

Log Message:
-----------
ImagePage(): handle NotImplementedError

Modified Paths:
--------------
    trunk/pywikipedia/wikipedia.py

Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py      2009-10-18 16:42:51 UTC (rev 7494)
+++ trunk/pywikipedia/wikipedia.py      2009-10-18 17:24:37 UTC (rev 7495)
@@ -737,8 +737,8 @@
             'prop': ['revisions','info'],
             'rvprop': 
['content','ids','flags','timestamp','user','comment','size'],
             'rvlimit': 1,
-            'inprop': 'protection',#|talkid|subjectid',
-            'intoken': 'edit',
+            'inprop': ['protection','talkid','subjectid','url','readable'],
+            #'intoken': 'edit',
         }
         if oldid:
             params['rvstartid'] = oldid
@@ -776,13 +776,13 @@
         
         if change_edit_time:
             self._editTime = 
parsetime2stamp(pageInfo['revisions'][0]['timestamp'])
-            self._startTime = parsetime2stamp(pageInfo["starttimestamp"])
+            if "starttimestamp" in pageInfo:
+                self._startTime = parsetime2stamp(pageInfo["starttimestamp"])
             
             
         self._isWatched = False #cannot handle in API in my research for now.
         
-        pagetext = pageInfo['revisions'][0]['*']
-        pagetext = unescape(pagetext)
+        pagetext = unescape(pageInfo['revisions'][0]['*'])
         pagetext = pagetext.rstrip()
         if self.site().lang == 'eo':
             pagetext = decodeEsperantoX(pagetext)
@@ -3432,7 +3432,7 @@
         if self.namespace() != 6:
             raise ValueError(u'BUG: %s is not in the image namespace!' % title)
         self._imagePageHtml = None
-        self._local = True
+        self._local = None
         self._latestInfo = {}
         self._infoLoaded = False
 
@@ -3456,12 +3456,20 @@
             'iiprop': ['timestamp', 'user', 'comment', 'url', 'size', 
'dimensions', 'sha1', 'mime', 'metadata', 'archivename', 'bitdepth'],
             'iilimit': limit,
         }
-        data = query.GetData(params, self.site())
+        try:
+            data = query.GetData(params, self.site())
+        except NotImplementedError:
+            output("API not work, loading page HTML.")
+            self.getImagePageHtml()
+            return
+            
         if 'error' in data:
             raise RuntimeError("%s" %data['error'])
         count = 0
         if data['query']['pages'].values()[0]["imagerepository"] == "shared":
             self._local = False
+        else:
+            self._local = True
         infos = []
         
         while True:
@@ -3499,17 +3507,24 @@
         if not self._infoLoaded:
             self._loadInfo()
         
-        return self.latestInfo['url']
-        #urlR = re.compile(r'<div class="fullImageLink" id="file">.*?<a 
href="(?P<url>[^ ]+?)"(?! class="image")|<span class="dangerousLink"><a 
href="(?P<url2>.+?)"', re.DOTALL)
-        #m = urlR.search(self.getImagePageHtml())
+        if self._infoLoaded:
+            return self.latestInfo['url']
+        
+        urlR = re.compile(r'<div class="fullImageLink" id="file">.*?<a 
href="(?P<url>[^ ]+?)"(?! class="image")|<span class="dangerousLink"><a 
href="(?P<url2>.+?)"', re.DOTALL)
+        m = urlR.search(self.getImagePageHtml())
 
-        #    url = m.group('url') or m.group('url2')
+        url = m.group('url') or m.group('url2')
+        return url
 
     def fileIsOnCommons(self):
         """Return True if the image is stored on Wikimedia Commons"""
         if not self._infoLoaded:
             self._loadInfo()
-        return not self._local
+        
+        if self._infoLoaded:
+            return not self._local
+        
+        return 
self.fileUrl().startswith(u'http://upload.wikimedia.org/wikipedia/commons/')
 
     def fileIsShared(self):
         """Return True if image is stored on Wikitravel shared repository."""
@@ -3575,7 +3590,7 @@
                 self._loadInfo()
             try:
                 return self._latestInfo['sha1']
-            except (KeyError, IndexError):
+            except (KeyError, IndexError, TypeError):
                 try:
                     self.get()
                 except NoPage:
@@ -3598,6 +3613,38 @@
         return u'{| border="1"\n! date/time || username || resolution || size 
|| edit summary\n|----\n' + u'\n|----\n'.join(lines) + '\n|}'
 
     def usingPages(self):
+        try:
+            if config.use_api and self.site().versionnumber() >= 11:
+                x = self.site().api_address()
+                del x
+            else:
+                raise NotImplementedError
+        except NotImplementedError:
+            for a in self._usingPagesOld():
+                yield a
+            return
+        params = {
+            'action': 'query',
+            'list': 'imageusage',
+            'iutitle': self.title(),
+            'iulimit': config.special_page_limit,
+            #'': '',
+        }
+        
+        while True:
+            data = query.GetData(params, self.site())
+            if 'error' in data:
+                raise RuntimeError("%s" % data['error'])
+            
+            for iu in data['query']["imageusage"]:
+                yield Page(self.site(), iu['title'], defaultNamespace=iu['ns'])
+            
+            if 'query-continue' in data:
+                params['iucontinue'] = 
data['query-continue']['imageusage']['iucontinue']
+            else:
+                break
+    
+    def _usingPagesOld(self):
         """Yield Pages on which the image is displayed."""
         titleList = re.search('(?s)<h2 id="filelinks">.+?<!-- end content -->',
                               self.getImagePageHtml()).group()



_______________________________________________
Pywikipedia-svn mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-svn

Reply via email to