Prinzipieller Aufbau eines erweiterten Pluginsystems
Verfasst: Dienstag 23. November 2004, 22:54
Hallo,
ich versuche gerade ein etwas größeres Pluginsystem auf die Beine zu stellen, wobei mir die Strukturierung des Codes nicht wirklich klar ist. Also dachte ich, frage ich hier mal nach...
Zu meiner Idee, erst einmal der Aufbau im Filesystem:
mainscript.py ist das Haupscript, welches eine Klasse enthält. Diese soll die Instanzen von jeder Library erstellen (jede libraryX.py enthält eine Klasse die letztendlich instanziiert werden soll). Jede Library ist bekannt und wird hardcoded aufgerufen. Welche Daten diese beinhalten ist an dieser Stelle egal. Wichtig ist der Pluginmanager, dieser soll die Dateien im Pluginordner durchgehen und die Plugins laden (jede Datei stellt ein Plugin dar). So weit, so gut. Jetzt stoße ich aber auf Probleme, denn meine Anforderungen lauten:
- Jede Library soll auf die Funktionen der anderen Libraries zugreifen können
- Jedes Plugin soll eine Funktion registerPlugin besitzen, welche als Parameter eine Klasse übergeben bekommt (das eigentliche Plugin)
- Jedes Plugin soll auf die Funktionen der Libraries zugreifen können
- Es darf nur mit Referenzen gearbeitet werden, da eine Library, sagen wir mal, ein geöffnetes Fileobjekt beinhaltet
Um das Ganze in einer Art "Use Case Code" zu verdeutlichen:
Uff, ein ziemlich schwer zu erklärender Sachverhalt.
Imports und dergleichen habe ich absichtlich ausgelassen, da diese meiner Meinung nach nur (noch mehr) verwirren würden.
Hoffe mein Anliegen ist einigermaßen verständlich geworden, meine Frage war: Wie kann ich eine solche Struktur am besten verwirklichen, bzw. wie würdet ihr eine solche Struktur verwirklichen? Ich und andere Leute haben sich an der Geschichte schon die Zähne ausgebissen.
Help appreciated...
Grüße,
Vortec
ich versuche gerade ein etwas größeres Pluginsystem auf die Beine zu stellen, wobei mir die Strukturierung des Codes nicht wirklich klar ist. Also dachte ich, frage ich hier mal nach...
Zu meiner Idee, erst einmal der Aufbau im Filesystem:
Code: Alles auswählen
/script
/script/libraries
/script/libraries/library1.py
/script/libraries/library2.py
/script/libraries/plugin_manager.py
/plugins
/script/plugins/plugin1.py
/script/plugins/plugin2.py
/script/mainscript.py
- Jede Library soll auf die Funktionen der anderen Libraries zugreifen können
- Jedes Plugin soll eine Funktion registerPlugin besitzen, welche als Parameter eine Klasse übergeben bekommt (das eigentliche Plugin)
- Jedes Plugin soll auf die Funktionen der Libraries zugreifen können
- Es darf nur mit Referenzen gearbeitet werden, da eine Library, sagen wir mal, ein geöffnetes Fileobjekt beinhaltet
Um das Ganze in einer Art "Use Case Code" zu verdeutlichen:
Code: Alles auswählen
# /script/mainscript.py
class MainScript:
def __init__(self):
self.library1 = libraries.library1.Library1()
self.library2 = libraries.library2.Library2()
self.plugin_manager = libraries.plugin_manager.PluginManager()
Code: Alles auswählen
# /script/libraries/library1.py
class Library1:
def foo(self):
return "foo"
def bar(self, args):
return "bar"
Code: Alles auswählen
# /script/libraries/library2.py
class Library2:
def foo2(self):
return "foo2"
def bar2(self, args):
return self.library1.foo() # An dieser Stelle Referenz auf library1.py
Code: Alles auswählen
# /script/libraries/plugin_manager.py
class PluginManager:
def __init__(self):
for s in plugin_folder:
plugin = imp.load_module() # Wenn das Plugin geladen wird, wie wird registerPlugin() aufgerufen, wie komm ich an die übergebende Klasse ran?
Code: Alles auswählen
# /script/plugins/plugin1.py
class AnyPlugin:
def pFoo(self):
return self.library1.foo() # Hier wieder Referenz auf library1.py
def pBar(self, args):
return "pBar"
registerPlugin(AnyPlugin)
Imports und dergleichen habe ich absichtlich ausgelassen, da diese meiner Meinung nach nur (noch mehr) verwirren würden.
Hoffe mein Anliegen ist einigermaßen verständlich geworden, meine Frage war: Wie kann ich eine solche Struktur am besten verwirklichen, bzw. wie würdet ihr eine solche Struktur verwirklichen? Ich und andere Leute haben sich an der Geschichte schon die Zähne ausgebissen.
Help appreciated...
Grüße,
Vortec