Skip to content

Paketabhängigkeiten #195

@MartinGauk

Description

@MartinGauk

Hier soll überlegt werden, wie statische und dynamische Abhängigkeiten eines QPy-Pakets zu anderen Paketen behandelt werden sollen.

Was sollen die Abhängigkeiten machen?

  • natürlich sollen sie Python-seitig Funktionen bereitstellen können, die vom Hauptpaket aufgerufen werden können
  • sie sollen auch statische Dateien wie z.B. JavaScript enthalten können
  • z.B. bei dem künftigen Feature "Routes" sollen sie eigene Routes registrieren können

Die letzten beiden Punkte erfordern, dass alle Pakete (auch reine Library-Pakete) eine init Funktion haben. Dafür existiert auch bereits das BasePackageInterface.

Statische Abhängigkeiten

  • sind in der ZIP-Datei zusammen mit dem Hauptpaket enthalten, entpackt?
  • müssen beim Bauen des Hauptpakets in einem definierten Unterordner liegen
  • das questionpy package könnte zu einem QPy-Paket ausgebaut werden und vorerst implizit als statische Abhängigkeit mitpaketiert werden

Dynamische Abhängigkeiten

  • werden in der qpy_config.yml definiert und zur Laufzeit vom Application Server geladen
  • die statischen und dynamischen Abhängigkeiten können rekursiv weitere dynamische Abhängigkeiten beinhalten?
  • die konkreten Abhängigkeiten (Paket und Version) beim Bauen festhalten (im Manifest locken) vs. der Application Server löst sie auf
  • eine Abhängigkeit kann auch als "web-only" (oder so ähnlich) definiert werden, d.h. sie wird vom Application Server nicht in den Worker geladen, z.B. MathJax, das einige MB umfasst und im Worker keinen Nutzen hat, da es nur statische Dateien (JS und Fonts) beinhaltet

Implementierungsfragen

  • Ist die Reihenfolge relevant, in der das Hauptpaket und die Abhängigkeiten ausgeführt werden (d.h. ihre init Funktionen)?
  • IDE: die Abhängigkeiten sollten für die Entwicklung des Hauptpakets so verfügbar gemacht werden können, dass Importe ordentlich funktionieren, sowohl Python als auch JS.
  • Das LMS hat die Möglichkeit, "web-only" Pakete auszutauschen, z.B. MathJax wird selber kompatibel bereitgestellt

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions