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