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