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



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

Reply via email to