Erste Schritte¶
Installation¶
Benötigt Python ≥ 3.12 und viur-core ≥ 3.7, < 4.
1. Revisionen an einem Skeleton verfolgen¶
Von RevisionAbstractSkel erben:
from viur.core.skeleton import Skeleton
from viur.revision import RevisionAbstractSkel
class ExampleSkel(RevisionAbstractSkel, Skeleton):
kindName = "example"
# … deine Bones …
Standardmäßig erzeugt jeder Schreibvorgang eine neue Revision. Um nur auf
Änderungen bestimmter Bones zu reagieren, setze revision_fields:
revision_fields = ["*"] ist der Wildcard-Standard — jede nicht-leere
Änderungsliste löst eine Revision aus.
Coalescing-Fenster¶
Schnell aufeinanderfolgende Schreibvorgänge (z. B. Auto-Save) innerhalb eines 15-Minuten-Fensters werden standardmäßig zu einer einzigen Revision zusammengefasst. Pro Skel überschreiben:
import datetime
class ExampleSkel(RevisionAbstractSkel, Skeleton):
# Coalescing komplett deaktivieren:
revision_coalesce_window = None
# Oder verkürzen:
revision_coalesce_window = datetime.timedelta(minutes=2)
2. Revisions-Endpunkte am Modul bereitstellen¶
Das fügt dem Modul fünf Endpunkte hinzu — die vollständigen
Request-/Response-Formen siehe API-Referenz zu
RevisionModule:
| Methode | URL | Zweck |
|---|---|---|
| GET | /<module>/list_revision |
Revisionen auflisten |
| GET | /<module>/view_revision |
Eine Revision anzeigen |
| POST | /<module>/apply_revision |
Eine Revision wiederherstellen |
| POST | /<module>/delete_revision |
Eine einzelne Revision löschen |
| GET | /<module>/cleanup_revisions_now |
Aufbewahrung manuell ausführen |
Alle erfordern entweder das Recht root oder <moduleName>-manage.
3. Aufbewahrung läuft automatisch¶
Ein täglicher PeriodicTask dünnt die Historie pro Ursprungs-Entität aus.
Zur Bucket-Logik siehe Aufbewahrung.
Programmatische API¶
Eine bestimmte Revision in eine viewSkel-Instanz laden:
skel = self.viewSkel()
if not skel.read_revision(entity_key, version=3):
raise errors.NotFound("Revision not found")
version="latest" (Standard) liefert die neueste Revision; übergib eine
Ganzzahl, um über revision_index auszuwählen.