Closed MartinGauk closed 4 months ago
Wir hatten überlegt, dass wir im Manifest alle Dateien des Pakets (jedenfalls im dist Ordner) im Manifest aufführen sollten zusammen mit dem MIME-Type.
Ich verstehe dich so, dass während des Build-Prozesses des Pakets eine Liste mit Dateien geführt wird, die ins Zip-File (dist
-Ordner) geschrieben werden. Abschließend soll diese Liste dann ins Manifest geschrieben werden.
Das wäre mit der aktuellen Klassenhierarchie nicht zu vereinbaren, denke ich.
Aktuell erbt questionpy_sdk.models.PackageConfig
von questionpy_common.manifest.Manifest
. Wenn wir Manifest
nun Felder hinzufügen, die nur nach dem Build-Prozess vorhanden sind, müssten wir dem irgendwie Rechnung tragen.
Also z.B. ManifestDist
erbt von Manifest
. ManifestDist
wäre neu und beinhaltet zusätzliche Felder, die der Build-Prozess hinzufügt. questionpy-server
würde dann zukünftig mit ManifestDist
anstatt Manifest
arbeiten. (Gäbe natürlich noch andere Möglichkeit das zu modellieren, z.B. Composition.)
Ich denke, das Ganze zeigt nur ein Problem auf, welches uns früher oder später eh beißen würde: DirBasedPackage
aus dem Server erwartet ein Manifest
. Das würde zukünftig mit ManifestDist
nicht mehr funktionieren, da ja ein Package-Verzeichnis noch nicht gebaut ist. (Dasselbe gilt aber auch für andere Build-Artefakte, die bspw. per Build-Hooks gebaut werden.)
Wie weiter vorgehen?
Das SDK baut wahlweise direkt ins dist
-Verzeichnis (anstatt .qpy-Datei).
Das SDK sollte die Möglichkeit bieten, direkt ins dist
-Verzeichnis des Quellverzeichnisses zu bauen. Das sollte wahrscheinlich auch noch durch ein watch
-Kommando ergänzt werden, welches das Quellverzeichnis überwacht und bei file changes automatisch baut.
Ein DirBasedPackage
ist nur dann valide, wenn es ein fertig gebautes dist
beinhaltet.
Das "Paket-Bauen" wird Teil des Servers.
Die Logik zum Paket-Bauen lebt im Server. Dann könnte DirBasedPackage
tatsächlich ein Quellverzeichnis meinen.
Ich tendiere zu 1., denn ich denke, das Bauen von Paketen (und generell entwicklungsbezogene Aufgaben) sollten nicht im Server, sondern im SDK leben. ~Evtl. ist DirBasedPackage
schon eine Verletzung dieses Grundsatzes, denn DirBasedPackage
hat ja neben Entwicklung erst mal keine andere Existenzberechtigung (oder?). Evtl. wäre es sogar möglich und auch sauberer, DirBasedPackage
(oder die Logik dahinter) ganz aus dem Server herauszuhalten und ins SDK zu verschieben?~ Nein, weil später qpy-Pakete potentiell entpackt werden irgendwo....
Den MIME-Type können wir durch
file
ermitteln lassen.
Meinst du das Kommando GNU file? file ist ja nicht portable, also existiert nicht unter Windows ohne WSL oder ähnliches. Daher müsste man libmagic nehmen (also die lib auf dem das file-Kommando basiert), z.B. in Form von python-magic.
Es gibt auch das mimetypes-Modul aus der Python Standard Lib, allerdings rät das nur anhand der Dateiendung. Vielleicht wäre das schon ausreichend?
Wie weiter vorgehen?
dist
des Source-Verzeichnisses zu bauen.Danke für die Zusammenfassung unseres Meetings vorhin. Noch eine kleine Ergänzung, was wir besprochen haben:
Das Manifest wird ergänzt um ein Mapping/dict von str
(relativer Pfad zu dist
) zu PackageFile
.
PackageFile(BaseModel):
+ mime_type: str
+ size: int
Resolved in 4714958c823ac4090072fd163ee7f5b05725c831
Wir hatten überlegt, dass wir im Manifest alle Dateien des Pakets (jedenfalls im
dist
Ordner) im Manifest aufführen sollten zusammen mit dem MIME-Type. Der Sinn dahinter ist vor allem, dass dem LMS leicht diestatic
Dateien bekannt gemacht werden können und es generell Klarheit über die MIME-Types gibt. Die Dateigröße ist sicherlich auch sinnvoll.Den MIME-Type können wir durch
file
ermitteln lassen.