]>
<<TableOfContents>> Einleitung fgfdg qa d d d d d MoinMoin ist eine Wiki-Software, welche in Python geschrieben ist. Zur Drucklegung dieses Buches befindet sich die Version 1.7 kurz vor der Veröffentlichung -- auf der Homepage (http://moinmo.in) können Sie Aktuelles zum Entwicklungsstand erfahren. MoinMoin ist Freie Software (Open Source Software) unter der GNU General Public License. Diese Beschreibung setzt voraus, dass Sie die aktuelle Version dieser Software von der Homepage herunterladen. Ein Wiki ist eine im World Wide Web verfügbare Seitensammlung, die von den Benutzern nicht nur gelesen, sondern auch in Echtzeit online geändert werden kann. Wie bei Hypertexten üblich, sind die einzelnen Seiten und Artikel eines Wikis durch Querverweise (Links) miteinander verbunden. Ab der Version 1.6 enthält MoinMoin ein vorkonfiguriertes Wiki, das in Verbindung mit dem in der Python-Standardbibliothek enthaltenen Webserver gut für ein persönliches Wiki auf dem lokalem Desktop geeignet ist. Diese Kombination ermöglicht es ebenso, in einer Entwicklungsumgebung (z.B. Eclipse/PyDev), komfortabel zu debuggen. Folgen Sie daher bitte den Hinweisen in der Installationsanleitung für das vorkonfigurierte Wiki. Dieses Wiki enthält auch die Hilfeseiten; Verweise auf das Hilfesystem sind im Text mit einer Hinterlegung markiert. Nahezu alles an MoinMoin kann durch ein ausgeklügeltes Plugin-Konzept verändert werden. Das Aussehen könnnen Sie durch ein eigenes Theme (siehe Kapitel theme) umgestalten. Mit einem Parser (siehe parser plugins können Sie Inhalte interpretieren und diese dann darstellen. Ein Macro (siehe macro plugins) dient dazu, in Form eines Kommandos etwas auf einer Seite einzufügen, während Sie mit einer Action (siehe Kapitel action plugins) bestimmen, was auf "Knopfdruck" geschehen soll. Ein Formatter siehe Kapitel formatter plugins) und Kapitel formatter) erlaubt eine Ausgabe in einem beliebigen Format. Filter (filter plugins) werden zum Erstellen des Suchindex am Beispiel von Dateianhängen benutzt. Mit XMLRPC (siehe Kapitel xmlrpc und xmlrpc plugins) können Sie über eine Netzwerkverbindung mit MoinMoin kommunizieren. Falls Sie Verbesserungswünsche haben, können Sie einen Feature Request <<FootNote(FeatureRequest)>> erstellen - eventuell sogar mit einem Patch, wenn Sie das Feature bereits implementiert haben. Im Nachfolgenden beziehen sich alle Beschreibungen auf den Standalone-Server und das vorkonfigurierte Wiki. <<Anchor(wikistarten)>> Um dieses zu starten, gehen Sie in das Verzeichnis moin-1.6 und rufen Sie das Programm moin.py auf. Ihr lokales Wiki erreichen Sie dann über die URL http://localhost:8080/ (siehe Abbildung). Falls Einstellungen geändert werden müssen, werden diese in der Konfigurationsdatei wikiconfig.py im gleichen Verzeichnis vorgenommen (siehe HilfeZurKonfiguration). <<Anchor(perswiki)>> Das persönliche Wiki
#pragma supplementation-page on
#pragma section-numbers on
#!wiki blue
This text was written for a [[http://www.rrzn.uni-hannover.de/buecher.html?&no_cache=1&tx_rrznbuecher_pi1[showUid]=215|german python book]]. The idea was to give an advertice in learning python with examples of popular python projects. Two chapter of the book were about python learning and the last chapter describes first steps for three python projects. At last the publisher decided to drop the third chapter for several reasons.
@copyright: 2007-2008 MoinMoin:ReimarBauer
@license: GPL
#!wiki yellow
. <<Hits>> times read
MoinMoin (1.6) - Erweiterungen und Anpassungen (Reimar Bauer)
##der text der hier hin soll steckt noch im Buch

Das nachfolgende Schaubild<<FootNote(mit freundlicher Genehmigung von Nir Soffer)>> zeigt die wesentlichen Klassen, die beim Ablauf des Programms moin.py eine Wiki-Seite in Ihrem Browser ausgeben. Die einzelnen Klassen stellen einzelne Schritte dar. Beispielsweise wird über eine Action eine Seite durch Page angefordert. Diese Seite wird durch das Theme mit weiteren Inhalten ausgestattet und dann als HTML-Seite auf ihrem Browser ausgegeben. <<Anchor(Schaubild)>>
|
Prinzipieller Aufbau von MoinMoin |
Diesen Klassen ist gemeinsam, dass sie über ein request-Objekt miteinander kommunizieren. Mit einem eigenem request-Objekt (siehe Kapitel request) können Sie aus einer anderen Applikation MoinMoin nutzen, um ein Wiki in Ihre Applikation zu integrieren.
Damit das Arbeiten mit dem MoinMoin-Code einfacher fällt, stelle ich Ihnen zunächst einige Klassen aus der Bibliothek vor, jedoch kann ich deren Methoden nicht komplett aufführen und auch nicht alle Parameter beschreiben. Ich beschränke mich hier auf jene, die wir dann auch in Beispielen verwenden werden. Da Sie den Sourcecode vorliegen haben, werden Sie noch viele andere interessante Klassen und Methoden finden. Gerne können Sie die Entwickler auch in ihrem chatroom #moin auf chat.freenode.net besuchen, wenn etwas unklar ist oder Sie über weitere Möglichkeiten diskutieren wollen.
Anhand des nachfolgenden Beispiels sehen Sie, wie Sie einige Funktionen zum Ausgeben einer Seite anwenden können.
#!python from MoinMoin.Page import Page from MoinMoin.request import request_cli request = request_cli.Request() pagename = u'StartSeite' text = Page(request, pagename).get_raw_body() print text
##||Ausgabe der StartSeite||
Zunächst werden von MoinMoin.Page die Page-Klasse und von MoinMoin.request das Modul request_cli importiert. Die Page Klasse (siehe Kapitel Page) benötigen Sie für den lesenden Zugriff auf eine Wiki-Seite. Die Klasse request_cli (siehe Kapitel request) benötigen Sie für alle Zugriffe auf das Wiki, die von der Python shell erfolgen.
Der Variablen request wird mit request = request_cli.Request() ein frisch erzeugtes request-Objekt zugewiesen.
Die Variable pagename bekommt als unicode String z.B. mit u'StartSeite' den Namen der Seite zugewiesen, die Sie ausgeben möchten.
Die nachfolgende Zeile text = Page(request, pagename).get_raw_body() wendet aus der Klasse Page die Methode get_raw_body (siehe Kapitel page.get_raw_body) an. Diese liest den Inhalt der Seite und speichert deren Rückgabewert in der Variablen text.
Mit print text wird der Inhalt von text ausgegeben.
#!wiki comment
Um die Beispiele im Python-Interpreter ausprobieren zu können, sollten Sie in das Verzeichnis {{{moin-1.6
wechseln. In diesem Verzeichnis können Sie durch moin.py den Standalone-Server starten, um Ihre Änderungen mitzuverfolgen.
In den Beispielen, die auf eine Wiki-Seite oder deren Dateianhänge (attachments) zugreifen, werden immer auch die Zugriffsrechte des ausführenden Benutzers geprüft. Daher gewährleisten Sie bitte auch, dass in Ihrer Wiki-Konfiguration dem entsprechenden Benutzer diese Rechte erteilt werden.
In der Konfigurationsdatei wikiconfig.py sollte daher folgende Zeile enthalten sein:
acl_rights_default = uAll:read,write,delete,revert,admin'
Diese Zeile regelt, dass in den nachfolgenden Beispielen alle Benutzer auf jeder Seite des Wikis die Rechte zum Lesen, Schreiben, Löschen, Wiederherstellen und zur Administration der Seite haben. }}} <<Anchor(request)>>
Den Klassen (siehe Abbildung) ist das zentrale request-Objekt gemeinsam. Dieses enthält Daten und Objekte, die für die Bearbeitung in den einzelnen Programmen benötigt werden; u.a. den Zugriff auf die Konfigurationsdatei.
Neben einem request-Objekt (request_cli), dass Sie zum Arbeiten in der Python-Shell verwenden können, unterstützt MoinMoin auch cgi, fcgi, mod_python, standalone, twisted und wsgi. (siehe HilfeZurInstallation)
Sehr praktisch ist, dass Sie mit diesem request-Objekt in der Python-Shell viele der Methoden, die für die Plugin-Entwicklung (siehe Kapitel Plugins) wichtig sind, ausprobieren und kennen lernen können.
Falls Sie bereits eine in Python entwickelte Applikation haben, können Sie unter anderem mit diesem request-Objekt auch mit einem MoinMoin-Wiki kommunizieren oder die Wiki- Funktionalitäten anwenden. Das nachfolgende Beispiel zeigt, wie Sie ein request-Objekt in der Python-Shell bilden können, und wie Sie von der Shell aus auf das Wiki zugreifen können.
#!python from MoinMoin.request import request_cli request = request_cli.Request()
##[caption=request abgeleitet von request_cli]{request Object}Sie können sich mit help(request) die Docstrings von request ausgeben lassen. Die Ausgabe beginnt mit dem folgendem Text:
Help on Request in module MoinMoin.request.request_cli object: class Request(MoinMoin.request.RequestBase) | specialized on command line interface and script requests | | Method resolution order: | Request ....
Die Methode request.getText ermöglicht die Übersetzung von Text (z.B. die Beschriftung der Navigationselemente) in die voreingestellte Sprache des Benutzers.
#!python [caption=Internationalisierung]{getText}
request.lang = 'de'
_ = request.getText
print _("Mail me my account data")
Für das cli-request-Objekt (command line interface) wird diese Funktionalität derzeit nicht unterstützt. Daher sind die Ausgaben, der in der Beschreibung verwendeten Beispiele auf der Basis von request_cli.Request() in englisch.
MoinMoin wird englischsprachig entwickelt und der Text dann in die jeweilige Benutzersprache übersetzt. Sie finden unter moin-1.6/MoinMoin/i18 in der Datei de.MoinMoin.po die deutschen Übersetzungen. Evtl. finden Sie in dieser Datei dort einen passenden Ausgabetext für Ihre Erweiterung. Dann können Sie direkt von den vorhandenen Übersetzungen profitieren. Die Übersetzungsarbeit wird gemeinschaftlich von vielen Nutzern auf dem Wiki MoinMaster <<FootNote(EditingOnMoinMaster)>> durchgeführt. Dieses Wiki dient auch der Entwicklung der Hilfeseiten, die Sie in Ihrem Wiki vorfinden.
<<Anchor(requestusermay)>>
Mit den Methoden von request.user.may werden die Rechte des Benutzers für eine Seite überprüft.
#!python pagename = u'StartSeite' print request.user.may.read(pagename) print request.user.may.write(pagename) print request.user.may.delete(pagename) print request.user.may.revert(pagename) print request.user.may.admin(pagename)
##[caption=Abfrage der Zugriffsrechte]{request.user.may}<<Anchor(Page)>>
Die Klasse Page wird für den readonly-Zugriff auf eine Seite verwendet. Sie können damit auch auf ältere Versionen einer Seite als die aktuelle zugreifen. Bei Operationen, die auf Wiki-Seiten oder deren Attachments vorgenommen werden, werden die Zugriffsrechte des Benutzers überprüft (mit sog. ACLs, siehe HilfeZuAccessControlLists).
#!python from MoinMoin.Page import Page
##[caption=import Page]{Page Object}Mit der Methode Page.exists() stellen Sie fest, ob eine Seite bereits existiert, z.B.:
#!python [caption=Zeige ob die Seite existiert]{Page exists}
pagename = u'StartSeite'
print Page(request, pagename).exists()
Ausgabe:
True
Die Methode Page.getRevList() gibt eine Liste der Revisionen einer Seite zurück. Die aktuelle Revision wird als erste angezeigt.
-------------------------------------------------------------------------------- mismatched tag: line 449, column 2