Revision: 6330 Author: kim Date: 2009-02-05 23:08:58 +0000 (Thu, 05 Feb 2009)
Log Message: ----------- Add an example on how to use pywikipedia as a library.
Added Paths: ----------- trunk/pywikipedia/logindata.py trunk/pywikipedia/simple_family.py
Added: trunk/pywikipedia/logindata.py =================================================================== --- trunk/pywikipedia/logindata.py (rev 0) +++ trunk/pywikipedia/logindata.py 2009-02-05 23:08:58 UTC (rev 6330) @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- + +#Usable example module: Use of pywikipedia as a +# library. +# +# Looks up the path to pywikipedia (pywikipedia_path) +# in a settings.py file. You'll need to provide that, +# and/or refactor. + +# (C) Kim Bruning for Wikiation, sponsored by Kennisnet, 2009 +# +# Distributed under the terms of the MIT license. +# + +import sys, os +import settings +if settings.pywikipedia_path not in sys.path: + sys.path.append(settings.pywikipedia_path) + +# pywikipedia can only set itself up if everything is +# done in its own directory. This needs fixing sometime. +# for now, we live with it. +cwd=os.getcwd() +os.chdir(settings.pywikipedia_path) +import wikipedia, login +from simple_family import Family +os.chdir(cwd) + +class LoginData: + """An example class that uses pywikipedia as a library. + usage example: + + from logindata import LoginData, wikipedia + target_wiki=LoginData( ... ) # for example, fill in from a settings file, or use code to generate, or ... + site=target_wiki.login() + page=wikipedia.Page(site,"Main Page") + """ + + + def __init__( + """ + paramaters: + name: arbitrary name. Pick something easy to remember + protocol: http|https + server: dns address or ip address + scriptpath: path on server itself + (ie: protocol:server/scriptpath http://6.wikiation.nl/revisions/REL1.13.2) + version: mediawiki version of the target mediawiki instance + lang: default language, as configured on target mediawiki instance + encoding: should (almost) always be utf-8 + api_supported: Does this mediawiki instance support the mediawiki api? + RversionTab: Magic. See superclass for information. + user: Username on wiki + password: password for this user + """ + + + self, + name='MY_NAME_FOR_THIS_SERVER', + protocol='http', + server='www.my_server.com', + scriptpath='/my/script/path/', + version='1.13.2', + lang='en', + encoding='utf-8', + user='MY_BOT_USER', + password='MY_SECRET_PASSWORD', + RversionTab=None, + api_supported=False + ): + self.lang=lang + self.user=user + self.password=password + self.family=base_family.Family( + name=name, + protocol=protocol, + server=server, + scriptpath=scriptpath, + version=version, + lang=lang, + encoding=encoding, + RversionTab=RversionTab, + api_supported=api_supported) + self.site=None + + def login(self): + """Attempt to log in on the site described + by this class. Returns a pywikipedia site object""" + self.site=wikipedia.Site( + code=self.lang, + fam=self.family, + user=self.user + ) + loginManager=login.LoginManager( + password=self.password, + site=self.site, + username=self.user + ) + loginManager.login() + return self.site
Added: trunk/pywikipedia/simple_family.py =================================================================== --- trunk/pywikipedia/simple_family.py (rev 0) +++ trunk/pywikipedia/simple_family.py 2009-02-05 23:08:58 UTC (rev 6330) @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- + +# ============================================ +# NOTE FOR USERS: Unlike the Family files in +# the family # directory, you do not need to +# edit this file to configure anything. +# ============================================ + +# (C) Kim Bruning for Wikiation, sponsored by Kennisnet, 2009 +# +# Distributed under the terms of the MIT license. +# + +import sys, settings +if settings.pywikipedia_path not in sys.path: + sys.path.append(settings.pywikipedia_path) + +import config, family, urllib +class Family(family.Family): + """Friendlier version of the pywikipedia family class. + We can use this in conjunction with none-pywikipedia + config files. + + Note that this just handles most common cases. + If you run into a special case, you'll have to fall back + to your regular pywikipedia. + """ + + def __init__(self, + """name: arbitrary name. Pick something easy to remember + protocol: http|https + server: dns address or ip address + scriptpath: path on server itself + (ie: protocol:server/scriptpath http://6.wikiation.nl/revisions/REL1.13.2) + version: mediawiki version of the target mediawiki instance + lang: default language, as configured on target mediawiki instance + encoding: should (almost) always be utf-8 + api_supported: Does this mediawiki instance support the mediawiki api? + RversionTab: Magic. See superclass for information. + """ + name='MY_NAME_FOR_THIS_SERVER', + protocol='http', + server='www.my_server.com', + scriptpath='/my/script/path', + version='1.13.2', + lang='en', + encoding='utf-8', + api_supported=False, + RversionTab=None # very rare beast, you probably won't need it. + ): + + family.Family.__init__(self) + self.name = name # REQUIRED; replace with actual name + + self.langs = { # REQUIRED + lang: server, # Include one line for each wiki in family + } + self._protocol=protocol + self._scriptpath=scriptpath + self._version=version + self._encoding=encoding + # may as well add these here, so we can have a 1 stop shop + self._lang=lang + self._server=server + self._api_supported=api_supported + self._RversionTab=RversionTab + + def protocol(self, code): + """ + returns "http" or "https" + """ + return self._protocol + + def scriptpath(self, code): + """returns the prefix used to locate scripts on this wiki. + """ + return self._scriptpath + + def apipath(self, code): + """returns whether or not this wiki + if self._api_supported: + return '%s/api.php' % self.scriptpath(code) + else: + raise NotImplementedError, "%s wiki family does not support api.php" % self.name + + # Which version of MediaWiki is used? + def version(self, code): + # Replace with the actual version being run on your wiki + return self._version + + def code2encoding(self, code): + """Return the encoding for a specific language wiki""" + # Most wikis nowadays use UTF-8, but change this if yours uses + # a different encoding + return self._encoding + + def RversionTab(self, code): + return self._RversionTab