Wie am besten ein Plugin-System basteln?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Hi,
ich bin mir nicht ganz sicher ob das hier das richtige Forum ist da die frage doch eher theoretisch ist und zu dem Problem noch kein Code vorhanden ist.

Ich bin gerade dabei eine Website zu basteln und wuerde diese gerne durch Plugins erweiterbar machen, so dass nur das noetigste quasi im core ist und das jegliche zusatzfunktionen per Plugins Modular hinzugefuegt werden koennen.

Das laden von Plugins ist ja nicht sonderlich das problem... aber was mich beschaeftigt und wo ich ned so recht weiss wie ich das machen soll ... nachdem die Plugins geladen sind muessen die sich ja irgendwie in die Site "einhaken" oder so ... sprich Navigationspunkte hinzufuegen oder Schaltflaechen oder zusaetzliche Seiten oder, oder...

Wie macht man denn sowas am besten? Ich meine man koennte ueberall ueber die Application verteilt funktions/methoden aufrufe dazubasteln und in diesen dann die zugehoerigen module/plugins abfeuern... aber irgendwie finde ich das nen bissle unschoen... weil ich ja so an gewisse vorgaben gebunden bin...

Waere sehr dankbar wenn mir jemand nen paar Anregungen dazu geben koennte...

liebe gruessle und nen frohes neues
zero-one
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hmm, hast du dir mal die Setuptools-Entrypoints angeschaut? Oder, vielleicht sogar besser, wie Zine das macht? Das ist ja eine Python-Web-Applikation mit recht umfangreichen Plugin-System.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Ich hab mir bei Zine die pluginsystem.py angesehen dort war aber nur das Plugin laden definiert so wie ich das gesehen habe.
Habe dort noch nicht gefunden wie die Plugins in der App verankert sind... ausserdem fuerchte ich das der Code in Zine noch nen bissle zu hoch ist fuer mich ^^...
Aber ich werden auf jedenfall noch ein wenig im Zine-code rumschauen.
Vielleicht koennte ja mitsuhiko, der ja wahrscheinlich das Pluginsystem von Zine verbrochen hat, kurz erklaeren wie des grob funktioniert.
Aber auch andere Tipps sind willkommen :)

danke und gruessle
zero-one
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Am Ende des Tages muss man doch aber einfach wissen, was man durch ein Plug-in alles verändern können will und dann dort bestimmte Schnittstellen vorsehen.

Man könnte ja die Konvention vereinbaren, dass ein Plugin als Python-Modul geladen wird und dort eine `init`-Funktion existieren muss, der ein `registry`-Objekt übergeben wird, das eine `add_to_navigation`-Methode besitzt. Eine zweite Funktion `destroy`, die aufgerufen wird, wenn das Plugin wieder enthalden werden soll. Da müsste dieses sich dann wieder aus der Navigation austragen.

Ein Menü könnte aus hierarchischen Einträgen bestehen, die jeweils einen Namen, einen Vater und eine Position im Vater haben. Als viertes Argument verweisen sie auf einen Endpunkt, etwas, dass aus einer URL und einem zugehörigen Controller (oder View in Django-Sprechweise) besteht und letztlich zum Anzeigen einer Webseite führt. Ein Menü könnte alternativ seine Kinder auch automatisch nach dem Namen sortieren und die Positionsangabe ignorieren. Oder es sortiert immer alle Elemente mit der gleichen Positionsnummer, dann hat man automatisch beides.

Stefan
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Überleg dir erstmal was du mit einem Plugin verändern können willst und wie du dass im Plugin gerne machen würdest. Dann überleg dir mal was du dafür zu verfügung stellen musst.

Letztendlich ist es so dass du im Programm Events auslösen musst, Plugins müssen irgendwie handler bereitstellen die dann aufgerufen werden und diese Plugins müssen irgendwie auf dass Programm zugreifen können und eventuell auch Dinge verändern oder austauschen können.
Antworten