MoinWiki 2.0
Übersicht über den Stand von moin 2.0.
Mit Beispielen von Unterschieden zu moin 1.9.
Allgemein
MoinMoin ist eine Wiki-Software, die in Python geschrieben ist. Die offiziell unterstützte Version ist noch 1.9. Derzeit wird aber an der Version 2.0 gearbeitet.
Projekt homepage: moinmo.in/MoinMoin2.0 Repository: github.com/moinwiki/moin
MoinMoin ist Freie Software (Open Source Software) unter der GNU General Public License V2+.
Sie können es verwenden:
- als Website, die leicht zu warten ist
- als Wissensbasis
- für Notizen
- um Dokumente zu erstellen
- ...
Die erste moin Version ist 2000 released worden. Es ist seit damals von einer Datei zu hunderten Modulen und tausenden Codezeilen angewachsen. Vor mehr als 10 Jahren haben wir mit der Infrastruktur von moin 2.0 begonnen.
Referenzen
Sites, die das MoinMoin Wiki nutzen
- .. und viele andere.
Refactoring
- weniger Code Zeilen
- Redesign des internen Workflows
- läuft mit Python ab Version 3.9
gute Storage API - nicht wie in 1.9 über mehrere Module verstreut (Page, PageEditor, Attachfile)
- Userprofile, Attachments und Pages gleich behandeln als Mimetype-Items,
- Tree based transformation auf der Basis von emeraldtree im Speicher, in 1.9: Parser, Formatter (zeilenweise)
- Trennung von data und meta, in 1.9 ist meta in data, z.B. #format rst, nun als “contenttype”: “text/x-rst;charset=utf-8”
- Outsourcing von fremden Bibliotheken, in 1.9 diverse Java, js Bibliotheken
Verwenden von PyPi Packages
- Nutzen von gutem Code anderer Projekte, ersetzt z.B. den eigenen theming code, restful urls usw.
- Themes durch Verwendung der Template Engine Jinja2
- deutlich verbesserte UI, HTML5, JQUery
- Sphinx für die Dokumentation
Quellen
Es gibt aktuell 3 Möglichkeiten um die MoinWiki Quellen zu installieren bzw. herunterzuladen:
- Der aktuellste Stand kann über das github Repository heruntergeladen werden
$ git clone https://github.com/moinwiki/moin
Im Python package index unter pypi.org gibt es eine Pre-Version des Pakets. Das Paket wird von Zeit zu Zeit aktualisiert. Installation mit
pip install --pre moin
- Als Archiv kann das gleiche Paket als tar.gz Datei über folgende Url herunter geladen werden:
Installation und Erstellen eines Wikis
siehe
oder für Debian inklusive Vorbereitung des linux Systems:
Python Bibliotheken
moin 2.0 basiert auf einer Vielzahl von Bibliotheken. Alle sind als PyPi Package verfügbar.
- Werkzeug (wsgi framework)
- Jinja2 (template engine)
- whoosh (Suche, Index für Storage)
- Flask (micro framework)
- Flatland (form processing, validation)
- pygments (text file highlighting)
- blinker (event signalling e.g. for change notification trigger)
- emeraldtree (xml processing)
weitere siehe pyproject.toml
Im Gegensatz zu moin 1.9 ist keine Kopie dieser Bibliotheken in moin 2.0 enthalten. moin 2.0 ist mit pip installierbar und Abhängigkeiten sind in der pyproject.toml definiert.
Externe Bibliotheken
moin 2.0 wird mit pip installiert. Einiges aus der Infrastruktur sind jedoch keine Python Programme, z.B.:
- ckeditor
- autosize
- font_awesome
- svgedit_moin
- jQuery
Diese Bibliotheken/Programme werden auf PyPi zur Verfügung gestellt, siehe auch XStatic Packaging Standard xstatic.readthedocs.io
Backends
moin 2.0 hat eine API für storage Backends und Stores.
- Indizierung/Suche via whoosh
- Items, Revisionen, Daten werden durch eine UUID identifiziert
- Name des Items ist nur eine META Information.
- z.B. eine Umbenennung ändert nur den META Eintrag
- Stores sind sehr einfache Key/Value stores.
Der Hauptaugenmerk liegt auf dem Filesystem Backend, für alle anderen gilt: Es wird noch dran gearbeitet! Dadurch muss schonmal der Wiki Datenbestand gelöscht werden. (ALPHA!)
Config
Die Konfiguration liegt in einem Python File wikiconfig.py (Ausschnitt):
1 """
2 !MoinMoin Wiki Configuration - see https://moin-20.readthedocs.io/en/latest/admin/configure.html
3 """
4 acls = {
5 # maps namespace name -> acl configuration dict for that namespace
6 #
7 # One way to customize this for large wikis is to create a TrustedEditorsGroup item with
8 # ACL = "TrustedEditorsGroup:read,write All:"
9 # add a list of user names under the item's User Group metadata heading.
10 # Item content does not matter.
11 # Every user in YOUR-TRUSTED-EDITOR-GROUP will be able to add/delete users.
12 #
13 # most wiki data will be stored in NAMESPACE_DEFAULT
14 NAMESPACE_DEFAULT: dict(
15 before='YOUR-SUPER-EDITOR:read,write,create,destroy,admin',
16 default='YOUR-TRUSTED-EDITORS-GROUP:read,write,create All:read,write,create',
17 after='',
18 hierarchic=False, ),
Mimetype
moin 2.0 unterscheidet nicht mehr zwischen Dateianhängen und Seiten. Es gibt nur noch mimetype basierte Items.
Items können versionierbar sein. Revisionen haben Daten und Metadaten (Meta Daten sind Key: Value Paare). Die Meta Daten eines Items enthalten z.B.:
- item name
- acl
- contentype
- tags
Transclude
Ist das neue Include. Syntax:
{{item}}
Sie können ein Item dadurch in ein anderes “transcluden”.
Die Operation wird intern sauber auf DOM-Tree-Ebene ausgeführt.
Via on-mouse-over können Sie zu dem Ursprung des Items navigieren, um es dort zu bearbeiten.
Markup
moin 2.0 kann verschiedene Markups rendern und konvertieren, u.a.:
moinwiki (http://moinmo.in/HelpOnMoinWikiSyntax)
markdown (https://python-markdown.github.io)
creolewiki (http://www.wikicreole.org/)
docbook (http://www.docbook.org/)
mediawiki (http://www.mediawiki.org/wiki/Help:Formatting)
- ...
Converter
Parser und Formatter werden durch Converter ersetzt.
moin 2.0 benutzt intern einen DOM-Tree (implementiert mit emeraldtree, einem Fork von elementtree).
Wir unterscheiden zwischen Input und Output Konvertern, ein Auszug zeigt was dann über den DOM-Tree in etwas anders ausgegeben werden kann. Nicht alles ist verlustfrei.
- moinwiki_in
- moinwiki_out
- html_in
- html_out
- docbook_in
- docbook_out
- rst_in
- rst_out
- ...
Macros
Verwendung ähnlich wie in moin 1.9, intern aber DOM-Tree basierend. Viele Macros sind bereits an die neue Version angepasst, Beispiele:
<<TableOfContents>> <<ItemList()>> <<TitleIndex()>> <<MonthCalendar>>
Die Makros stehen aktuell nur im Moinwiki-Markup zur Verfügung. Siehe auch help-en/MoinWikiMacros
Views
Es gibt keine Actions mehr, wir sprechen als Entwickler von Views.
Durch die Verwendung von flask sind restful URLs gegeben. Die Views sind mit einem Präfix + versehen, z.B. für die Metadaten:
Andere Views:
...
Viele Macros wie z.B. RecentChanges sind nun als View implementiert.
Der View-HTML-Output wird mit der Jinja2-Template-Engine generiert. Wir verwenden autoescaping von Jinja2, was XSS-Problemen vorbeugt.
Das moin 1.9 plugin System ist zu komplex und dies würde durch die neue API noch erhöht werden.
Migration moin 1.9 nach moin 2.0
Für die Migration eines bestehenden Wikis auf moin 2.0 existiert ein Befehl, siehe
moin import19 --help
Beispiel Ausgabe:
INFO moin.cli.migration.moin19.import19 Finished conversion! INFO moin.cli.migration.moin19.import19 Migration statistics: INFO moin.cli.migration.moin19.import19 Users: 72 INFO moin.cli.migration.moin19.import19 Items: 4149 INFO moin.cli.migration.moin19.import19 Revisions: 19501 INFO moin.cli.migration.moin19.import19 Attachments: 39 INFO moin.cli.migration.moin19.import19 Warnings: 1127 - missing_user INFO moin.cli.migration.moin19.import19 Warnings: 168 - missing_file INFO moin.cli.migration.moin19.import19 Warnings: 105 - del_item INFO moin.cli.migration.moin19.import19 Unknown Macros: 7 INFO moin.cli.migration.moin19.import19 ['TitleIndex', 'FullSearch', 'Action', 'SystemAdmin', 'Navigation', 'GoTo', 'ShowSmileys']
(!) Ideen ?
Unterstützung gesucht.
- Optimierung
- Verbesserung
- Sicherheit
- Dokumentation
- Das default Theme verbessern
- Jinja2/Flatland widgets
- alternative Themes
FrOsCon 2024
Treffen wir uns auf der FrOsCon 2024 in St. Augustin am 17./18. August 2024?
Quelle
PyCon 2011 Präsentation Reimar Bauer
Copyright 2011/2024, MoinMoin Coreteam.