Crivens!

static blog engine – v – article.py

Donnerstag, 25. März 2010, Themen:

Eigentlich wollte ich nach dem Modul inventory.py mit dem Modul inbox.py weitermachen, da diese beiden zusammen gehören. Allerdings werde ich einen Ausflug zur Artikelklasse einschieben, da einige Funktionen bei inbox.py eine Rolle spielen.

Wie der Name schon vermuten lässt, handelt es sich bei der Klasse Article um einen Eintrag im Blog. Anders jedoch als bei ArticleNodes handelt es sich nicht um die logische Beziehung zu Elternelementen oder nachvolgenden Artikel sondern um den Inhalt und entsprechende Meta-Angaben.

Ein Objekt der Klasse liest eine Datei (oder ein Datei-ähnliches Objekt) ein, stellt sicher dass alle Metaangaben stimmig sind, kann den eigentlichen Inhalt des Eintrages durch einen Parser schicken um eine HTML-Ausgabe zu erhalten und nach lokalen Verknüpfungen suchen. Aber der Reihe nach:

Aufbau der eines Artikels

Der Aufbau eines Eintrages sieht wie folgt aus: Zuerst kommen Zeilen bei denen die Metaangaben stehen. Jeweils ein Schlüsselwort gefolgt durch einen Doppelpunkt und danach der jeweilige Wert der dem Schlüssel zugeordnet ist. Danach erfolgt eine Leerzeile und darauf der eigentliche Blog-Eintrag.

1
2
3
4
Title:  static blog engine – v – article.py
Tags:   sbe, python

Eigentlich wollte ich nach dem Modul […]

Metaangaben

Die folgenden Metaangaben werden momentan verstanden. Groß-/Kleinschreibung ist nicht relevant und fehlende Angaben werden anhand von Einstellungen oder Dateieigenschaften gesetzt.

Schlüssel Beschreibung
Title der Titel des Eintrages
Author der Autor
Created Zeitpunkt, wann der Eintrag erstellt wurde, Format: 2010-03-25T11:49:46
Tags Tags, durch ein Komma getrennt
Comments On oder Off, schaltet Kommentare an oder aus, noch nicht verwendet
Trackback On oder Off, schaltet Trackbacks an oder aus, noch nicht verwendet
TagURI eindeutige Identifizierung des Eintrages, wird automatisch ermittelt

Ist kein Titel für den Eintrag vorhanden wird innerhalb des Textes nach einer Überschrift gesucht und die erste die gefunden wird verwendet. Wurde keine ermittelt wird ein Standardwert aus der Konfiguration benutzte. Für den Schlüssel Created wird das Erstellungsdatum abgefragt, sofern es sich um ein Dateiobjekt handelt.

Parser

Momentan werden nur zwei Parser unterstützt: Markdown und einen Pseudoparser für HTML – dabei wird einfach der "Text" der Datei unverändert zurückgegeben. Die Unterstützung für andere Parser ist einfach zu bewerkstelligen, sie müssen einfach nur (X)HTML zurückgeben können. Den erstellten HTML-Code wird zwischengespeichert, da es sich meistens um eine relativ aufwendige Prozedur handelt.

Lokale Links

Zuerst muss ich klären was ich als "Lokale Links" verstehe. Falls ein Bild mit einem Eintrag verknüpft wird sollte dies auch einfach in die Inbox gelegt werden und mit dem Artikel zusammen an den richtigen Ort verschoben werden. Allerdings gibt es auch Verknüpfungen – z.B. zu einem immer wiederkehrenden Element – die absolut sind (http://example.com/a_picture.jpg) oder sich auf ein anderes Verzeichnis verweisen (../previous_day/a_picture.jpg). Nach diesen sollte nicht gesucht werden. Ich habe für diese den Namen "Lokale Links" gewählt und sie haben ein recht einfaches Unterscheidundsmerkmal: sie enthalten keinen Slash /. Eine Art von Links – die in ein Unterverzeichnis (photos/a_picture.jpg) fällt dabei unter den Tisch obwohl diese durchaus kopierenswert wären. Da dies meiner Ansicht nach nicht allzuoft vorkommt, kann man ein Unterverzeichnis auch mal von Hand kopieren oder verschieben. Ein Artikelobjekt stellt eine Methode zur Verfügung, welche die lokalen Links extrahiert und zurückgibt.

Kommentare:
blog comments powered by Disqus