SlideShow

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:

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

Refactoring

Quellen

Es gibt aktuell 3 Möglichkeiten um die MoinWiki Quellen zu installieren bzw. herunterzuladen:

$ git clone https://github.com/moinwiki/moin

pip install --pre  moin

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.

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.:

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.

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.:

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.:

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.

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.

FrOsCon 2024

Quelle

PyCon 2011 Präsentation Reimar Bauer

Copyright 2011/2024, MoinMoin Coreteam.

FrOSCon2024/VortragMoinwiki (zuletzt geändert am 2024-06-26 17:24:17 durch HansUlrichBirke)

Alle Inhalte in diesem Wiki stehen unter der Creative Commons SA 4.0 DE Lizenz