Ein professionelles Python-Tool zur automatischen Synchronisation von Dateien zwischen LernSax und dem lokalen Dateisystem über WebDAV. Das Tool überwacht die LernSax-Pinnwand auf neue Dateien und lädt diese automatisch herunter, während es intelligente Konfliktbehandlung und verschiedene Vergleichsstrategien bietet.
- Überblick
- Funktionen
- Voraussetzungen
- Installation
- Konfiguration
- Verwendung
- Architektur
- Konfliktbehandlung
- Vergleichsstrategien
- Troubleshooting
Dieses Tool ermöglicht es, Dateien von LernSax automatisch auf den lokalen Computer zu synchronisieren. Es bietet zwei Betriebsmodi:
- Listener-Modus: Überwacht kontinuierlich die LernSax-Pinnwand auf neue Dateien und lädt diese automatisch herunter
- Full-Sync-Modus: Führt eine vollständige Synchronisation aller Dateien durch
Das Tool integriert sich nahtlos in LernSax, nutzt WebDAV für den Dateitransfer und bietet erweiterte Funktionen wie intelligente Konfliktbehandlung, Dateivergleiche und sichere Credential-Verwaltung.
- ✅ Automatische Dateiüberwachung: Kontinuierliche Überwachung der LernSax-Pinnwand auf neue Dateien
- ✅ Intelligente Konfliktbehandlung: Mehrere Strategien zur Behandlung von Dateikonflikten
- ✅ Flexible Vergleichsstrategien: Drei Modi für Dateivergleiche (fast, safe, hybrid)
- ✅ Sichere Credential-Verwaltung: Integration mit dem System-Keyring für sichere Passwort-Speicherung
- ✅ Session-Management: Automatische Verwaltung von LernSax-Sessions
- ✅ mtime-Synchronisation: Erhaltung der Original-Zeitstempel von Remote-Dateien
- ✅ Skipables-Liste: Möglichkeit, bestimmte Dateien dauerhaft zu überspringen
- ✅ Dateityp-Filterung: Ausschluss bestimmter Dateitypen (z.B. große Video-Dateien)
- ✅ Farbiges Logging: Übersichtliche, farbige Konsolenausgabe für bessere Lesbarkeit
- Python 3.9 oder höher
- Zugang zu einem LernSax-Account mit WebDAV-Zugriff
- Internetverbindung
⚠️ WICHTIG für Listener-Modus: Die Option
muss im LernSax-Raum aktiviert sein, damit der Listener-Modus funktionieren kann
-
Repository klonen oder herunterladen
-
Abhängigkeiten installieren
pip install -r requirements.txt
Die wichtigsten Abhängigkeiten:
keyring: Sichere Credential-Speicherungwebdav3: WebDAV-Client (lokal imlibs/Verzeichnis)lxml: XML-Verarbeitungrequests: HTTP-Requestscolorlog: Farbiges Logging
-
Konfigurationsdatei anpassen
Siehe Abschnitt Konfiguration für Details.
Die Konfiguration erfolgt über die Datei config.ini. Eine Beispielkonfiguration ist bereits vorhanden:
[webdav]
host_name = https://www.lernsax.de/webdav.php
remote_path = raum@deineschule.lernsax.de/storage/
local_path = tmp/
service = lernsax-webdav
use_skipables = True
exclude_extensions = [".avi"]
# Vergleichsstrategie: fast (Pfad+Name+Größe+mtime), safe (mit Hash), hybrid (Hash nur bei Verdacht)
comparison_strategy = fast
# Konfliktregel: overwrite (Remote gewinnt), skip (Lokal behalten), keep_both (beide mit Suffix), quarantine (in quarantine_path Ordner)
conflict_resolution = skip
# Backup vor Überschreiben (nur bei conflict_resolution=overwrite)
backup_before_overwrite = True
# Quarantäne-Ordner für Konflikte (nur bei conflict_resolution=quarantine)
quarantine_path = conflicts
# mtime-Toleranzfenster in Sekunden (±Wert, z.B. 60 = ±1 Minute)
mtime_tolerance_seconds = 60
[lernsax]
poll_interval_seconds = 10host_name: Die WebDAV-URL Ihres LernSax-Serversremote_path: Der Remote-Pfad auf dem Server (z.B.it242@bszetdd.lernsax.de/storage/)local_path: Der lokale Pfad, in den Dateien heruntergeladen werden sollenservice: Service-Name für die Keyring-Integrationuse_skipables: Aktiviert/deaktiviert die Verwendung derskipables.txtDateiexclude_extensions: Liste von Dateiendungen, die ausgeschlossen werden sollen (JSON-Format)comparison_strategy: Vergleichsstrategie (fast,safe,hybrid) - siehe Vergleichsstrategienconflict_resolution: Konfliktbehandlungsstrategie (overwrite,skip,keep_both,quarantine) - siehe Konfliktbehandlungbackup_before_overwrite: Erstellt ein Backup vor dem Überschreiben (nur beioverwrite)quarantine_path: Pfad für den Quarantäne-Ordner (nur beiquarantine)mtime_tolerance_seconds: Toleranzfenster für mtime-Vergleiche in Sekunden
poll_interval_seconds: Intervall in Sekunden, in dem die Pinnwand auf neue Dateien geprüft wird (nur Listener-Modus)
Listener-Modus (Standard):
python main.py
⚠️ Voraussetzung: Die Option![]()
muss im LernSax-Raum aktiviert sein, damit der Listener-Modus die Pinnwand korrekt überwachen kann. Diese Einstellung finden Sie in den Raum-Einstellungen von LernSax.
Full-Sync-Modus:
python main.py --mode full-syncpython main.py [OPTIONEN]Verfügbare Optionen:
--mode {listener,full-sync}: Betriebsmodus (Standard:listener)--config PATH: Pfad zur Konfigurationsdatei (Standard:config.ini)--log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}: Logging-Level (Standard:INFO)
Beispiele:
# Listener-Modus mit Debug-Logging
python main.py --mode listener --log-level DEBUG
# Full-Sync mit benutzerdefinierter Konfiguration
python main.py --mode full-sync --config my_config.ini
# Nur Logging-Level ändern
python main.py --log-level WARNINGBeim ersten Start werden Sie zur Eingabe Ihrer LernSax-Credentials aufgefordert:
- Benutzername: Ihr LernSax-Benutzername
- Passwort: Ihr LernSax-Passwort
Die Credentials werden sicher im System-Keyring gespeichert und müssen bei zukünftigen Starts nicht erneut eingegeben werden.
Das Projekt ist modular aufgebaut:
pzm/
├── main.py # Entry-Point mit CLI-Argumenten
├── config.ini # Konfigurationsdatei
├── requirements.txt # Python-Abhängigkeiten
├── skipables.txt # Liste von Dateien, die übersprungen werden sollen
│
├── src/
│ ├── core/ # Kern-Funktionalität
│ │ ├── config.py # Konfigurationsverwaltung
│ │ └── credentials.py # Credential-Service
│ │
│ ├── lernsax/ # LernSax-spezifische Funktionalität
│ │ ├── session.py # Session-Management für LernSax
│ │ ├── pinnwand.py # Pinnwand-Parser
│ │ └── listener.py # Listener für neue Dateien
│ │
│ ├── webdav/ # WebDAV-Funktionalität
│ │ ├── client.py # WebDAV-Client-Wrapper
│ │ ├── downloader.py # Download-Logik
│ │ ├── file_comparator.py # Dateivergleichs-Strategien
│ │ └── conflict_handler.py # Konfliktbehandlung
│ │
│ ├── services/ # Service-Layer
│ │ └── sync_service.py # Haupt-Synchronisationsservice
│ │
│ ├── models/ # Datenmodelle
│ │ └── datei.py # Datei-Modell
│ │
│ └── utils/ # Utilities
│ └── keyring.py # Keyring-Hilfsfunktionen
│
└── libs/ # Lokale Bibliotheken
└── webdav-client-python-3/ # WebDAV-Client-Bibliothek
-
Listener-Modus:
LernSaxListenerüberwacht die Pinnwand in konfigurierten Intervallen- Neue Dateien werden erkannt und an
SyncServiceübergeben WebDavDownloaderlädt die Dateien herunterFileComparatorvergleicht lokale und Remote-DateienConflictHandlerbehandelt Konflikte entsprechend der Konfiguration
-
Full-Sync-Modus:
SyncServiceinitialisiert den WebDAV-ClientWebDavDownloader.pull_continue()synchronisiert rekursiv alle Dateien- Gleiche Vergleichs- und Konfliktbehandlungslogik wie im Listener-Modus
Das Tool bietet vier Strategien zur Behandlung von Dateikonflikten:
Die Remote-Datei überschreibt die lokale Datei. Optional kann ein Backup erstellt werden (backup_before_overwrite = True).
Verwendung: Wenn Sie immer die neueste Version vom Server haben möchten.
Die lokale Datei wird beibehalten, die Remote-Änderung wird übersprungen.
Verwendung: Wenn lokale Änderungen Priorität haben sollen.
Beide Versionen werden behalten. Die lokale Datei wird mit einem Timestamp-Suffix umbenannt.
Verwendung: Wenn Sie beide Versionen behalten möchten.
Beide Versionen werden in einen separaten Quarantäne-Ordner verschoben, wobei die Ordnerstruktur erhalten bleibt.
Verwendung: Wenn Sie Konflikte manuell prüfen möchten, bevor Sie sie lösen.
Das Tool bietet drei Strategien zum Vergleich von Dateien:
Vergleicht nur Metadaten:
- Dateiname und Pfad
- Dateigröße
- mtime (Modifikationszeit) innerhalb des Toleranzfensters
Vorteile: Sehr schnell, keine Downloads erforderlich
Nachteile: Kann bei identischen Metadaten aber unterschiedlichem Inhalt fehlschlagen
Führt zusätzlich einen Hash-Vergleich durch:
- Alle Prüfungen von
fast - SHA-256 Hash-Vergleich des Dateiinhalts
Vorteile: 100% sicher, erkennt alle Unterschiede
Nachteile: Langsamer, erfordert Download für Hash-Berechnung
Kombiniert beide Ansätze:
- Verwendet zunächst die schnelle Heuristik
- Führt Hash-Vergleich nur bei Verdacht durch (unterschiedliche Größe oder mtime)
Vorteile: Guter Kompromiss zwischen Geschwindigkeit und Sicherheit
Nachteile: Kann bei sehr seltenen Edge-Cases fehlschlagen
Lösung:
- Überprüfen Sie Ihre Credentials in der Konfiguration
- Das Tool löscht automatisch gespeicherte Credentials bei Fehlern
- Geben Sie Ihre Credentials beim nächsten Start erneut ein
Lösung:
- Diese Dateien werden automatisch zur
skipables.txthinzugefügt - Sie können die Datei manuell bearbeiten, um Einträge zu entfernen
Lösung:
- Das Tool erkennt automatisch ungültige Sessions und erstellt eine neue
- Keine manuelle Intervention erforderlich
Mögliche Ursachen:
- Datei ist in
skipables.txteingetragen - Dateiendung ist in
exclude_extensionsaufgelistet - Datei existiert bereits lokal und
conflict_resolution = skip - Logging-Level auf
DEBUGsetzen für detaillierte Informationen
Lösung:
- WICHTIG: Stellen Sie sicher, dass die Option
im LernSax-Raum aktiviert ist - Diese Einstellung ist erforderlich, damit der Listener-Modus die Pinnwand-Einträge korrekt parsen kann
- Die Einstellung finden Sie in den Raum-Einstellungen von LernSax
Lösung:
- Stellen Sie sicher, dass ein Keyring-Backend installiert ist
- Windows: Windows Credential Manager wird automatisch verwendet
- Linux: Installieren Sie
python3-keyringoder ein anderes Backend - macOS: Keychain wird automatisch verwendet
Die Datei skipables.txt enthält eine Liste von Remote-Pfaden, die beim Download übersprungen werden sollen. Diese Datei wird automatisch erstellt, wenn use_skipables = True gesetzt ist. Dateien werden automatisch hinzugefügt, wenn:
- Keine Leserechte vorhanden sind (403-Fehler)
- Andere Fehler beim Download auftreten
Sie können die Datei manuell bearbeiten, um Einträge zu entfernen oder hinzuzufügen.
Das Tool verwendet farbiges Logging für bessere Lesbarkeit:
- 🟢 INFO: Normale Operationen
- 🟡 WARNING: Warnungen (z.B. Dateien übersprungen)
- 🔴 ERROR: Fehler (z.B. Download fehlgeschlagen)
- 🔵 DEBUG: Detaillierte Debug-Informationen
- Vergleichsstrategie: Verwenden Sie
fastfür große Dateienmengen,hybridfür einen guten Kompromiss - Poll-Intervall: Erhöhen Sie
poll_interval_secondsfür weniger Server-Last - Exclude Extensions: Fügen Sie große Dateitypen (z.B.
.avi,.mp4) zuexclude_extensionshinzu - Skipables: Nutzen Sie die Skipables-Liste für Dateien, die nicht synchronisiert werden sollen
Dieses Projekt ist für den persönlichen Gebrauch bestimmt.
Bei Problemen oder Fragen:
- Überprüfen Sie die Logs mit
--log-level DEBUG - Überprüfen Sie die Konfiguration in
config.ini - Stellen Sie sicher, dass alle Abhängigkeiten installiert sind
Hinweis: Dieses Tool ist nicht offiziell mit LernSax verbunden und wird als Open-Source-Projekt bereitgestellt.
