Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migration to Python #9

Open
wants to merge 636 commits into
base: main
Choose a base branch
from
Open

Migration to Python #9

wants to merge 636 commits into from

Conversation

MaxG87
Copy link
Owner

@MaxG87 MaxG87 commented Jul 23, 2024

No description provided.

MaxG87 added 30 commits July 20, 2022 22:01
Wenn `cryptsetup` mit der Option `--uuid` auf einen Symlink angewandt
wird, entfernt es diesen. Es scheint, als könnte dieses Verhalten nicht
abgestellt werden.

Unglücklicherweise verließen sich einige Tests darauf, dass der
entsprechende Symlink dauerhaft vorhanden ist. Dadurch waren sie
inkompatibel zu der angestrebten Anpassung, die UUID beim verschlüsseln
zu setzen.

Insgesamt scheint es aber durchaus so, als gehören die Vorgänge des
Entschlüsselns und Mountens gar nicht nach `backup_logic.py`. Immerhin
ist dort die Logik zum Erstellen von Backups aufgehoben, nicht die
Entpackung der Festplatte. Indem nun die beiden genannten Vorgänge nach
`cli.py` verschoben wurde, ist der Code vermutlich ein bisschen besser
organisiert und die angestrebte UUID-Änderung kann umgesetzt werden ohne
Tests kaputt zu machen.
Die Konzeption der prepare_* Funktionen war falsch. Anders als gedacht
haben unformatierte Geräte keine UUID. Damit können sie auch nicht über
UUID identifiziert werden. Stattdessen wird nun ein Pfad zum Gerät
angegeben, typischerweise etwas wie `/dev/sda1`. Die für die
Konfiguration benötigte UUID wird direkt generiert und an `cryptsetup`
übergeben.
Die Konzeption der prepare_* Funktionen war falsch. Anders als gedacht
haben unformatierte Geräte keine UUID. Damit können sie auch nicht über
UUID identifiziert werden. Stattdessen wird nun ein Pfad zum Gerät
angegeben, typischerweise etwas wie `/dev/sda1`. Die für die
Konfiguration benötigte UUID wird direkt generiert und an `cryptsetup`
übergeben.
Der vorhergehende Commit hat zwar das Unterkommando schon fertig
implementiert, aber die Tests haben dies noch nicht widergespiegelt. Um
nicht einen vollständigen Backup-Test aufsetzen zu müssen, wird nur ein
open-close-Rundtrip getestet.
Was momentan die BackupLogik ist, soll später in den Backends aufgehoben
sein. Mehr Informationen wird die Beschreibung des Mergecommits geben.
Dieses neue Unterkommando ermöglicht, neue Speichermedien
vollautomatisch für die Verwendung mit ButterBackup einzurichten.
Die Logik, die aus einem Konfigurationsobjekt eine geparste
Konfiguration macht, ist nun nicht mehr für das Einlesen der Datei
verantwortlich. Da nun direkt in den CLI-Funktionen die
Konfigurationsdatei eingelesen wird, ist es möglich, sich auf die
Garantien des CLI-Parsers zu verlassen und die Konfigurationsdatei als
existent anzunehmen. Dies ermöglicht es, einige Tests ersatzlos zu
streichen.

Außerdem wird das Parsen der Liste nun vollständig an `pydantic`
übergeben. Dies ermöglicht es, viel Komplexität ersatzlos zu streichen.
Die schon existierenden Tests wurden angepasst, aber beibehalten, um die
korrekte Funktion der Hilfsfunktion sicherzustellen.
Die in diesem Branch umgesetzten BackupBackends kommen dem, was im
entfernten Punkt gefordert wurde, am nächsten.
Der Fehler wurde gefunden, kann aber nicht behoben werden.
Es wird eine neue Klassenhierarchie eingeführt, welche die verschiedenen
Arten, ein Backup durchzuführen, besser gruppiert. Es ergeben sich zwei
Vorteile.

Erstens wird der Code dadurch etwas besser gruppiert. Anstatt vieler
eigenständiger Funktionen in einem großen Modul gibt es nun eine relativ
brauchbare Gruppierung nach Zweck. Das ist zwar nur ein kosmetischer
Vorteil, aber im gegebenen Modul nicht zu unterschätzen.

Zweitens kann dank der BackupBackends nun Laufzeitpolymorphismus
ausgenutzt werden. Vor der Änderung musste auf eine Hilfsfunktion
vertraut werden, welche durch Introspektion des Typs der Konfiguration
die korrekte nächste Hilfsfunktion bestimmt und aufruft. Nun wird das
korrekte Backend mittels einer Factory erstellt und dann dort die
Methode `do_backup()` aufgerufen. Dies macht den Kontrollfluss ein wenig
eleganter. Viel bedeutender ist jedoch, dass nun ein illegaler
Zustand verunmöglicht wurde, da Konfiguration und Logik viel enger
gekoppelt sind.
Für alle CLI-Kommandos wurde ein Docstring geschrieben. Da Typer diesen
in die Hilfetexten des CLI übernimmt, wurde so auch die
CLI-Dokumentation verbessert.
* neues Kommando `format-device`
* neues Kommando `version`
* erhebliche interne Verbesserungen mit `parse_raw_as` und
  `BackupBackend`
* Dokumentation für CLI-Texte erstellt
* Angaben von Verzeichnissen und unlesbaren Dateien als Konfiguration
  werden nun schon vom CLI-Parser abgelehnt
Es hat sowieso genervt, Python 3.7 zu unterstützen, da dadurch die
TypeHints komplizierter geworden sind. Jetzt, da `importlib.metadata` in
Python 3.7 nicht unterstützt wird, existiert auch ein handfester Grund
dafür, Python 3.7 loszuwerden.
Der Standardwert ist `True`. Daher ist das gesetzte `True` redundant,
während es in `butter-backup format-device` fehlt.
MaxG87 and others added 28 commits July 9, 2024 09:59
Bumps the production-dependencies group with 1 update in the / directory: [typer](https://github.com/tiangolo/typer).


Updates `typer` from 0.9.4 to 0.12.3
- [Release notes](https://github.com/tiangolo/typer/releases)
- [Changelog](https://github.com/tiangolo/typer/blob/master/docs/release-notes.md)
- [Commits](fastapi/typer@0.9.4...0.12.3)

---
updated-dependencies:
- dependency-name: typer
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>
This dependency is provided as a Vim plugin.
ButterBackup provides most of what is required here. Of course, much of
it not be used, but the basic setup and some of its CLI commands can be
reused conveniently.

Merge remote-tracking branch 'local/main' into from-butter-backup
This changeset will resolve all deprecation warnings regarding
Pydantic v2. Additionally, some unrelated updates of version numbers
have been performed.
This changeset will resolve all deprecation warnings regarding
Pydantic v2. Additionally, some unrelated updates of version numbers
have been performed.
This changeset will resolve all deprecation warnings regarding
Pydantic v2. Additionally, some unrelated updates of version numbers
have been performed.
Some occasions were missed.
Some places were missed.
This provides a fully functional root_subvol_snapshot that can be pruned
to the intended functionality.
Everything dealing with configuration files will be removed, so
something testing XDG_* becomes obsolete.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants