Ja,klingt so...
Das Programm führt aber immer alle Plugins aus.
Eine Konfigurationsmöglichkeit müsste man noch einbauen.
Ja,klingt so...
Das Programm führt aber immer alle Plugins aus.
Eine Konfigurationsmöglichkeit müsste man noch einbauen.
Für die config der einzelnen Plugins kann man das dann auch fest in die Python Datei am Anfang als constanten einbauen. Da sollte man den Aufwand eines Config Parsers evtl vermeiden. Keep it simple ;-) Und da kann man ja dann auch angeben, ob das Modul überhaupt aktiv sein soll. Das bisschen Rechenaufwand zum "sinnlosen" Einbinden des Moduls sollte kein Problem sein.
Oder man legt nur die config sowie andere Initialisierungen in die __init__.py und macht dann für den eigentlichen Modul Code eine Datei die importiert wird. Man muss die Einstigesdatei ja nicht zwingend __init__.py nennen - siehe pluginloader.py da kann mans ja angeben
Schaut mal in den Dev-Branch / plugin_test
pluginloader.py enthält die Funktionen zum load/reload der Plugins
und die plugin_test.py ruft jede sekunde die Plugins auf.
das schöne an imp.load_module ist, dass schon geladene Module einfach nur neu geladen werden. Also äquivalent zu reload(). man könnte die Plugins also während Boswatch läuft verändern. Die werden bei jedem Aufruf sowieso nachgeladen :-)
Geändert von Schrolli (18.05.2015 um 09:15 Uhr)
Das sind aber meiner Meinung nach alles Dinge, die man im Nachhinein ändern kann. Mit der prinzipiellen Funktion eines Plugin Systems hats ja nix zu tun. Ob ich die Module nun EINMALIG lade oder öfters. Würde erst mal priorisieren das so umzusetzen, dass der Code ausgelagert ist, und es funktioniert.
Dann kann man über den "produktiv" Feinschliff nachdenken, oder hast du da eine andere Meinung?
Gruß
Nein, ich hätte ja noch kleiner mit Funktionen angefangen, bevor ich die Funktionen in Module ausgelagert hätte. Deswegen habe ich nichts gegen schrittweise Vorgehen.
config.ini
Pflicht für Plugin-Name: MySQLCode:useMySQL = 1
Plugins ausführen:
Edit: Fehler im Code bereinigtCode:for i in pluginloader.getPlugins(): if int(config.get("Modules", "use"+i["name"])) print("Loading plugin " + i["name"]) plugin = pluginloader.loadPlugin(i) plugin.run()
Wäre die minimale Anpassung config.ini um eine neue Zeile ergänzen.
Geändert von JHC (18.05.2015 um 09:40 Uhr)
Oke das würde ich so kaufen :-D Die Idee ist gut. Ich mach mich später mal dran, das Grundlegende einzubauen.
Naja wir machen jetzt ja nichts anderes, als die Dinge in eine Funktion zu packen. Nur das die Funktionen jetzt eben driekt in eigenen Dateien liegen :-) Und bis auf die paar Zeilen loader Srcipt ist es ja kein Unterschied...
Würde das wohl reichen, jedem Plugin folgende 6 Daten zu übergeben, oder hab ich was wichtiges vergessen?
Code:ZVEI: ===== typ = zvei time = datetime frequenz= empfangsfrequenz data1 = zvei code data2 = data3 = FMS: ==== typ = fms time = datetime frequenz= empfangsfrequenz data1 = fms kennung data2 = status data3 = richtung POCSAG 1200: ============ typ = poc1200 time = datetime frequenz= empfangsfrequenz data1 = ric data2 = sub_ric data3 = text
Aktive Benutzer in diesem Thema: 6 (Registrierte Benutzer: 0, Gäste: 6)