Revision: 5272 Author: russblau Date: 2008-04-25 15:36:24 +0000 (Fri, 25 Apr 2008)
Log Message: ----------- implemented getlanglinks(); current implementation causes the bot to connect to every site referred to in a language link, which probably isn't desirable.
Modified Paths: -------------- branches/rewrite/pywikibot/data/api.py branches/rewrite/pywikibot/page.py branches/rewrite/pywikibot/site.py branches/rewrite/pywikibot/tests/page_tests.py
Modified: branches/rewrite/pywikibot/data/api.py =================================================================== --- branches/rewrite/pywikibot/data/api.py 2008-04-25 08:32:54 UTC (rev 5271) +++ branches/rewrite/pywikibot/data/api.py 2008-04-25 15:36:24 UTC (rev 5272) @@ -465,6 +465,7 @@ raise AssertionError( "Page %s has neither 'pageid' nor 'missing' attribute" % pagedict['title']) + page._redir = 'redirect' in pagedict if 'lastrevid' in pagedict: page._revid = pagedict['lastrevid'] if 'touched' in pagedict:
Modified: branches/rewrite/pywikibot/page.py =================================================================== --- branches/rewrite/pywikibot/page.py 2008-04-25 08:32:54 UTC (rev 5271) +++ branches/rewrite/pywikibot/page.py 2008-04-25 15:36:24 UTC (rev 5272) @@ -520,7 +520,6 @@ # no restricting template found return True
- def put(self, newtext, comment=None, watchArticle=None, minorEdit=True, force=False): """Save the page with the contents of the first argument as the text.
Modified: branches/rewrite/pywikibot/site.py =================================================================== --- branches/rewrite/pywikibot/site.py 2008-04-25 08:32:54 UTC (rev 5271) +++ branches/rewrite/pywikibot/site.py 2008-04-25 15:36:24 UTC (rev 5272) @@ -484,21 +484,32 @@ return self._namespaces[num] return self._namespaces[num][0]
+ def getpageinfo(self, page): + """Load page info from api and save in page attributes""" + title = page.title(withSection=False) + query = api.PropertyGenerator( + "info", + inprop="protection|talkid|subjectid", + titles=title.encode(self.encoding())) + for pageitem in query: + if pageitem['title'] != title: + raise RuntimeError( + "getpageinfo: Query on %s returned data on '%s'" + % (page, pageitem['title'])) + api.update_page(page, pageitem) + def page_exists(self, page): """Return True if and only if page is an existing page on site.""" if not hasattr(page, "_pageid"): - query = api.PropertyGenerator( - "info", inprop="protection|talkid|subjectid", - titles=page.title(withSection=False - ).encode(self.encoding())) - for pageitem in query: - if pageitem['title'] != page.title(withSection=False): - raise RuntimeError( - "page_exists: Query on %s returned data on '%s'" - % (page, pageitem['title'])) - page._pageid = pageitem['pageid'] + self.getpageinfo(page) return page._pageid > 0
+ def page_isredirect(self, page): + """Return True if and only if page is a redirect.""" + if not hasattr(page, "_redir"): + self.getpageinfo(page) + return bool(page._redir) + # following group of methods map more-or-less directly to API queries
def getbacklinks(self, page, followRedirects=False, filterRedirects=None, @@ -752,8 +763,27 @@ page._revisions[revision.revid] = revision if latest: page._revid = revision.revid -
+ def getinterwiki(self, page): + # TODO + raise NotImplementedError + + def getlanglinks(self, page): + """Iterate all interlanguage links on page, yielding Link objects.""" + lltitle = page.title(withSection=False) + llquery = api.PropertyGenerator("langlinks", + titles=lltitle.encode(self.encoding()) + ) + for pageitem in llquery: + if pageitem['title'] != lltitle: + raise RuntimeError( + "getlanglinks: Query on %s returned data on '%s'" + % (page, pageitem['title'])) + for linkdata in pageitem['langlinks']: + yield pywikibot.Link(linkdata['*'], + source=pywikibot.Site(linkdata['lang'])) + + #### METHODS NOT IMPLEMENTED YET (but may be delegated to Family object) #### class NotImplementedYet:
Modified: branches/rewrite/pywikibot/tests/page_tests.py =================================================================== --- branches/rewrite/pywikibot/tests/page_tests.py 2008-04-25 08:32:54 UTC (rev 5271) +++ branches/rewrite/pywikibot/tests/page_tests.py 2008-04-25 15:36:24 UTC (rev 5272) @@ -203,6 +203,9 @@
if __name__ == '__main__': try: - unittest.main() - except SystemExit: - pass + try: + unittest.main() + except SystemExit: + pass + finally: + pywikibot.stopme()